[Mesa-dev] [PATCH v4 1/6] gallium: expose a debug message callback settable by context owner

Ilia Mirkin imirkin at alum.mit.edu
Wed Nov 4 08:20:39 PST 2015


On Wed, Nov 4, 2015 at 10:12 AM, Brian Paul <brianp at vmware.com> wrote:
> On 11/03/2015 10:49 PM, Ilia Mirkin wrote:
>>
>> This will allow gallium drivers to send messages to KHR_debug endpoints
>>
>> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
>> ---
>>   src/gallium/auxiliary/util/u_debug.c | 14 ++++++++++++++
>>   src/gallium/auxiliary/util/u_debug.h | 20 ++++++++++++++++++++
>>   src/gallium/docs/source/context.rst  |  3 +++
>>   src/gallium/include/pipe/p_context.h |  8 ++++++++
>>   src/gallium/include/pipe/p_defines.h | 12 ++++++++++++
>>   src/gallium/include/pipe/p_state.h   | 25 +++++++++++++++++++++++++
>>   6 files changed, 82 insertions(+)
>>
>> diff --git a/src/gallium/auxiliary/util/u_debug.c
>> b/src/gallium/auxiliary/util/u_debug.c
>> index 7388a49..7029536 100644
>> --- a/src/gallium/auxiliary/util/u_debug.c
>> +++ b/src/gallium/auxiliary/util/u_debug.c
>> @@ -70,6 +70,20 @@ void _debug_vprintf(const char *format, va_list ap)
>>   #endif
>>   }
>>
>> +void
>> +_pipe_debug_message(
>> +   struct pipe_debug_callback *cb,
>> +   unsigned *id,
>> +   enum pipe_debug_type type,
>> +   const char *fmt, ...)
>> +{
>> +   va_list args;
>> +   va_start(args, fmt);
>> +   if (cb && cb->debug_message)
>> +      cb->debug_message(cb->data, id, type, fmt, args);
>> +   va_end(args);
>> +}
>> +
>>
>>   void
>>   debug_disable_error_message_boxes(void)
>> diff --git a/src/gallium/auxiliary/util/u_debug.h
>> b/src/gallium/auxiliary/util/u_debug.h
>> index 926063a..aaf223c 100644
>> --- a/src/gallium/auxiliary/util/u_debug.h
>> +++ b/src/gallium/auxiliary/util/u_debug.h
>> @@ -42,6 +42,7 @@
>>   #include "os/os_misc.h"
>>
>>   #include "pipe/p_format.h"
>> +#include "pipe/p_defines.h"
>>
>>
>>   #ifdef        __cplusplus
>> @@ -262,6 +263,25 @@ void _debug_assert_fail(const char *expr,
>>      _debug_printf("error: %s\n", __msg)
>>   #endif
>>
>> +/**
>> + * Output a debug log message to the debug info callback.
>> + */
>> +#define pipe_debug_message(cb, type, fmt, ...) do { \
>> +   static unsigned id = 0; \
>> +   _pipe_debug_message(cb, &id, \
>> +                       PIPE_DEBUG_TYPE_ ## type, \
>> +                       fmt, __VA_ARGS__); \
>> +} while (0)
>> +
>> +struct pipe_debug_callback;
>> +
>> +void
>> +_pipe_debug_message(
>> +   struct pipe_debug_callback *cb,
>> +   unsigned *id,
>> +   enum pipe_debug_type type,
>> +   const char *fmt, ...) _util_printf_format(4, 5);
>> +
>>
>>   /**
>>    * Used by debug_dump_enum and debug_dump_flags to describe symbols.
>> diff --git a/src/gallium/docs/source/context.rst
>> b/src/gallium/docs/source/context.rst
>> index a7d08d2..dbc0877 100644
>> --- a/src/gallium/docs/source/context.rst
>> +++ b/src/gallium/docs/source/context.rst
>> @@ -84,6 +84,9 @@ objects. They all follow simple, one-method binding
>> calls, e.g.
>>       levels. This corresponds to GL's ``PATCH_DEFAULT_OUTER_LEVEL``.
>>     * ``default_inner_level`` is the default value for the inner
>> tessellation
>>       levels. This corresponds to GL's ``PATCH_DEFAULT_INNER_LEVEL``.
>> +* ``set_debug_callback`` sets the callback to be used for reporting
>> +  various debug messages, eventually reported via KHR_debug and
>> +  similar mechanisms.
>>
>>
>>   Sampler Views
>> diff --git a/src/gallium/include/pipe/p_context.h
>> b/src/gallium/include/pipe/p_context.h
>> index 6f9fe76..5adbd18 100644
>> --- a/src/gallium/include/pipe/p_context.h
>> +++ b/src/gallium/include/pipe/p_context.h
>> @@ -45,6 +45,7 @@ struct pipe_blit_info;
>>   struct pipe_box;
>>   struct pipe_clip_state;
>>   struct pipe_constant_buffer;
>> +struct pipe_debug_callback;
>>   struct pipe_depth_stencil_alpha_state;
>>   struct pipe_draw_info;
>>   struct pipe_fence_handle;
>> @@ -239,6 +240,13 @@ struct pipe_context {
>>                             const float default_inner_level[2]);
>>
>>      /**
>> +    * Sets the debug callback. If the pointer is null, then no callback
>> is
>> +    * set, otherwise a copy of the data should be made.
>> +    */
>> +   void (*set_debug_callback)(struct pipe_context *,
>> +                              const struct pipe_debug_callback *);
>> +
>> +   /**
>>       * Bind an array of shader buffers that will be used by a shader.
>>       * Any buffers that were previously bound to the specified range
>>       * will be unbound.
>> diff --git a/src/gallium/include/pipe/p_defines.h
>> b/src/gallium/include/pipe/p_defines.h
>> index b15c880..d6f87cc 100644
>> --- a/src/gallium/include/pipe/p_defines.h
>> +++ b/src/gallium/include/pipe/p_defines.h
>> @@ -868,6 +868,18 @@ struct pipe_driver_query_group_info
>>      unsigned num_queries;
>>   };
>>
>> +enum pipe_debug_type
>> +{
>> +   PIPE_DEBUG_TYPE_OUT_OF_MEMORY = 1,
>
>
> Is the = 1 needed for some reason?

Not particularly. I just don't like 0 meaning something valid.

>
> Otherwise, for patches 1 & 2,
> Reviewed-by: Brian Paul <brianp at vmware.com>
>
>
>
>> +   PIPE_DEBUG_TYPE_ERROR,
>> +   PIPE_DEBUG_TYPE_SHADER_INFO,
>> +   PIPE_DEBUG_TYPE_PERF_INFO,
>> +   PIPE_DEBUG_TYPE_INFO,
>> +   PIPE_DEBUG_TYPE_FALLBACK,
>> +   PIPE_DEBUG_TYPE_CONFORMANCE,
>> +};
>> +
>> +
>>   #ifdef __cplusplus
>>   }
>>   #endif
>> diff --git a/src/gallium/include/pipe/p_state.h
>> b/src/gallium/include/pipe/p_state.h
>> index 4bf8d46..6bdf03a 100644
>> --- a/src/gallium/include/pipe/p_state.h
>> +++ b/src/gallium/include/pipe/p_state.h
>> @@ -684,6 +684,31 @@ struct pipe_compute_state
>>      unsigned req_input_mem; /**< Required size of the INPUT resource. */
>>   };
>>
>> +/**
>> + * Structure that contains a callback for debug messages from the driver
>> back
>> + * to the state tracker.
>> + */
>> +struct pipe_debug_callback
>> +{
>> +   /**
>> +    * Callback for the driver to report debug/performance/etc information
>> back
>> +    * to the state tracker.
>> +    *
>> +    * \param data       user-supplied data pointer
>> +    * \param id         message type identifier, if pointed value is 0,
>> then a
>> +    *                   new id is assigned
>> +    * \param type       PIPE_DEBUG_TYPE_*
>> +    * \param format     printf-style format string
>> +    * \param args       args for format string
>> +    */
>> +   void (*debug_message)(void *data,
>> +                         unsigned *id,
>> +                         enum pipe_debug_type type,
>> +                         const char *fmt,
>> +                         va_list args);
>> +   void *data;
>> +};
>> +
>>   #ifdef __cplusplus
>>   }
>>   #endif
>>
>


More information about the mesa-dev mailing list