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

Marek Olšák maraeo at gmail.com
Wed Nov 4 01:14:49 PST 2015


Reviewed-by: Marek Olšák <marek.olsak at amd.com>
On Nov 4, 2015 6:49 AM, "Ilia Mirkin" <imirkin at alum.mit.edu> 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,
> +   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
> --
> 2.4.10
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20151104/55191c84/attachment-0001.html>


More information about the mesa-dev mailing list