mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-06 09:28:07 +02:00
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:
parent
7870edc778
commit
fde929c4fd
5 changed files with 67 additions and 3 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue