gallium: Conditional debugging output.

Generalize the conditional debugging output code found trhought the gallium
drivers.
This commit is contained in:
José Fonseca
2008-03-11 12:03:11 +00:00
parent 130b315454
commit 45c5989511
2 changed files with 98 additions and 0 deletions

View File

@@ -41,6 +41,8 @@
#include <stdarg.h>
#include "p_compiler.h"
#ifdef __cplusplus
extern "C" {
@@ -93,6 +95,68 @@ void debug_assert_fail(const char *expr, const char *file, unsigned line);
#define assert(expr) debug_assert(expr)
/**
* Set a channel's debug mask.
*
* uuid is just a random 32 bit integer that uniquely identifies the debugging
* channel.
*
* @note Due to current implementation issues, make sure the lower 8 bits of
* UUID are unique.
*/
void debug_mask_set(uint32_t uuid, uint32_t mask);
uint32_t debug_mask_get(uint32_t uuid);
/**
* Conditional debug output.
*
* This is just a generalization of the debug filtering mechanism used
* throughout Gallium.
*
* You use this function as:
*
* @code
* #define MYDRIVER_UUID 0x12345678 // random 32 bit identifier
*
* static inline mydriver_debug(uint32_t what, const char *format, ...)
* {
* #ifdef DEBUG
* va_list ap;
* va_start(ap, format);
* debug_mask_vprintf(MYDRIVER_UUID, what, format, ap);
* va_end(ap);
* #endif
* }
*
* ...
*
* debug_mask_set(MYDRIVER_UUID,
* MYDRIVER_DEBUG_THIS |
* MYDRIVER_DEBUG_THAT |
* ... );
*
* ...
*
* mydriver_debug(MYDRIVER_DEBUG_THIS,
* "this and this happened\n");
*
* mydriver_debug(MYDRIVER_DEBUG_THAT,
* "that = %f\n", that);
* ...
* @endcode
*
* You can also define several variants of mydriver_debug, with hardcoded what.
* Note that although macros with variable number of arguments would accomplish
* more in less code, they are not portable.
*/
void debug_mask_vprintf(uint32_t uuid,
uint32_t what,
const char *format,
va_list ap);
#ifdef __cplusplus
}
#endif