On Wed, Nov 4, 2015 at 10:12 AM, Brian Paul <bri...@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 <imir...@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 <bri...@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 >> > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev