From fde929c4fdee2e998542f071ff7165d87f572593 Mon Sep 17 00:00:00 2001 From: Pauli Nieminen Date: Mon, 31 Aug 2009 20:25:33 +0300 Subject: radeon: Add support for indenting debug output. Indetion can be used to make it easier to read debug code when sections of debug output are indented. --- .../drivers/dri/radeon/radeon_common_context.h | 2 ++ src/mesa/drivers/dri/radeon/radeon_cs_legacy.c | 1 + src/mesa/drivers/dri/radeon/radeon_cs_legacy.h | 2 +- src/mesa/drivers/dri/radeon/radeon_debug.c | 35 ++++++++++++++++++++++ src/mesa/drivers/dri/radeon/radeon_debug.h | 30 +++++++++++++++++-- 5 files changed, 67 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/mesa/drivers/dri/radeon/radeon_common_context.h b/src/mesa/drivers/dri/radeon/radeon_common_context.h index d17060d5cc..0309345393 100644 --- a/src/mesa/drivers/dri/radeon/radeon_common_context.h +++ b/src/mesa/drivers/dri/radeon/radeon_common_context.h @@ -467,6 +467,8 @@ struct radeon_context { struct radeon_cmdbuf cmdbuf; + struct radeon_debug debug; + drm_clip_rect_t fboRect; GLboolean constant_cliprect; /* use for FBO or DRI2 rendering */ GLboolean front_cliprects; diff --git a/src/mesa/drivers/dri/radeon/radeon_cs_legacy.c b/src/mesa/drivers/dri/radeon/radeon_cs_legacy.c index 587e2acf91..f1addb299e 100644 --- a/src/mesa/drivers/dri/radeon/radeon_cs_legacy.c +++ b/src/mesa/drivers/dri/radeon/radeon_cs_legacy.c @@ -32,6 +32,7 @@ #include #include "radeon_bocs_wrapper.h" +#include "radeon_common.h" struct cs_manager_legacy { struct radeon_cs_manager base; diff --git a/src/mesa/drivers/dri/radeon/radeon_cs_legacy.h b/src/mesa/drivers/dri/radeon/radeon_cs_legacy.h index e177b4bafe..cafbc9e576 100644 --- a/src/mesa/drivers/dri/radeon/radeon_cs_legacy.h +++ b/src/mesa/drivers/dri/radeon/radeon_cs_legacy.h @@ -32,7 +32,7 @@ #ifndef RADEON_CS_LEGACY_H #define RADEON_CS_LEGACY_H -#include "radeon_common.h" +struct radeon_context; struct radeon_cs_manager *radeon_cs_manager_legacy_ctor(struct radeon_context *ctx); void radeon_cs_manager_legacy_dtor(struct radeon_cs_manager *csm); diff --git a/src/mesa/drivers/dri/radeon/radeon_debug.c b/src/mesa/drivers/dri/radeon/radeon_debug.c index cb1fd63cf7..691680e956 100644 --- a/src/mesa/drivers/dri/radeon/radeon_debug.c +++ b/src/mesa/drivers/dri/radeon/radeon_debug.c @@ -30,6 +30,7 @@ #include "utils.h" #include "radeon_debug.h" +#include "radeon_common_context.h" static const struct dri_debug_control debug_control[] = { {"fall", RADEON_FALLBACKS}, @@ -61,3 +62,37 @@ void radeon_init_debug(void) radeon_enabled_debug_types |= RADEON_GENERAL; } + +void _radeon_debug_add_indent(void) +{ + GET_CURRENT_CONTEXT(ctx); + radeonContextPtr radeon = RADEON_CONTEXT(ctx); + const size_t length = sizeof(radeon->debug.indent) + / sizeof(radeon->debug.indent[0]); + if (radeon->debug.indent_depth < length - 1) { + radeon->debug.indent[radeon->debug.indent_depth] = '\t'; + ++radeon->debug.indent_depth; + }; +} + +void _radeon_debug_remove_indent(void) +{ + GET_CURRENT_CONTEXT(ctx); + radeonContextPtr radeon = RADEON_CONTEXT(ctx); + if (radeon->debug.indent_depth > 0) { + radeon->debug.indent[radeon->debug.indent_depth] = '\0'; + --radeon->debug.indent_depth; + } +} + +extern void _radeon_print(const radeon_debug_type_t type, + const radeon_debug_level_t level, + const char* message, + va_list values) +{ + GET_CURRENT_CONTEXT(ctx); + radeonContextPtr radeon = RADEON_CONTEXT(ctx); + // FIXME: Make this multi thread safe + fprintf(stderr, "%s", radeon->debug.indent); + vfprintf(stderr, message, values); +} diff --git a/src/mesa/drivers/dri/radeon/radeon_debug.h b/src/mesa/drivers/dri/radeon/radeon_debug.h index 2b35044fb6..3e1481dfa1 100644 --- a/src/mesa/drivers/dri/radeon/radeon_debug.h +++ b/src/mesa/drivers/dri/radeon/radeon_debug.h @@ -71,6 +71,13 @@ typedef enum radeon_debug_types { RADEON_GENERAL = 0x10000 /* Used for errors and warnings */ } radeon_debug_type_t; +#define RADEON_MAX_INDENT 5 + +struct radeon_debug { + size_t indent_depth; + char indent[RADEON_MAX_INDENT]; +}; + extern radeon_debug_type_t radeon_enabled_debug_types; /** @@ -91,6 +98,11 @@ static inline int radeon_is_debug_enabled(const radeon_debug_type_t type, #define __attribute__(x) /*empty*/ #endif + +extern void _radeon_print(const radeon_debug_type_t type, + const radeon_debug_level_t level, + const char* message, + va_list values); /** * Format attribute requires declaration for setting it. Don't ask me why! */ @@ -113,7 +125,7 @@ static inline void radeon_print(const radeon_debug_type_t type, va_list values; va_start( values, message ); - vfprintf(stderr, message, values); + _radeon_print(type, level, message, values); va_end( values ); } } @@ -142,8 +154,22 @@ static inline void radeon_warning(const char* message, ...) va_end( values ); } - extern void radeon_init_debug(void); +extern void _radeon_debug_add_indent(void); +extern void _radeon_debug_remove_indent(void); + +static inline void radeon_debug_add_indent(void) +{ + if (RADEON_DEBUG_LEVEL >= RADEON_VERBOSE) { + _radeon_debug_add_indent(); + } +} +static inline void radeon_debug_remove_indent(void) +{ + if (RADEON_DEBUG_LEVEL >= RADEON_VERBOSE) { + _radeon_debug_remove_indent(); + } +} /* From http://gcc. gnu.org/onlinedocs/gcc-3.2.3/gcc/Variadic-Macros.html . I suppose we could inline this and use macro to fetch out __LINE__ and stuff in case we run into trouble -- cgit v1.2.3