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.
This commit is contained in:
Pauli Nieminen 2009-08-31 20:25:33 +03:00
parent 7870edc778
commit fde929c4fd
5 changed files with 67 additions and 3 deletions

View file

@ -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;

View file

@ -32,6 +32,7 @@
#include <errno.h>
#include "radeon_bocs_wrapper.h"
#include "radeon_common.h"
struct cs_manager_legacy {
struct radeon_cs_manager base;

View file

@ -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);

View file

@ -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);
}

View file

@ -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