diff --git a/src/gallium/auxiliary/meson.build b/src/gallium/auxiliary/meson.build index 437b98e6b2c..0ef46d7cdb1 100644 --- a/src/gallium/auxiliary/meson.build +++ b/src/gallium/auxiliary/meson.build @@ -230,6 +230,7 @@ files_libgallium = files( 'util/u_cache.h', 'util/u_compute.c', 'util/u_compute.h', + 'util/u_debug_cb.h', 'util/u_debug_flush.c', 'util/u_debug_flush.h', 'util/u_debug_image.c', diff --git a/src/gallium/auxiliary/util/u_debug_cb.h b/src/gallium/auxiliary/util/u_debug_cb.h new file mode 100644 index 00000000000..525377225d9 --- /dev/null +++ b/src/gallium/auxiliary/util/u_debug_cb.h @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2022 Collabora, Ltd. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * on the rights to use, copy, modify, merge, publish, distribute, sub + * license, and/or sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef U_DEBUG_H +#define U_DEBUG_H + +#include "util/u_debug.h" +#include "pipe/p_context.h" + +#ifdef __cplusplus +extern "C" { +#endif + +static inline void +u_default_set_debug_callback(struct pipe_context *ctx, + const struct util_debug_callback *cb) +{ + if (cb) + ctx->debug = *cb; + else + memset(&ctx->debug, 0, sizeof(ctx->debug)); +} + +#ifdef __cplusplus +} +#endif + +#endif /* U_LOG_H */ diff --git a/src/gallium/include/pipe/p_context.h b/src/gallium/include/pipe/p_context.h index 75e30da09f9..c4471a3723a 100644 --- a/src/gallium/include/pipe/p_context.h +++ b/src/gallium/include/pipe/p_context.h @@ -32,6 +32,7 @@ #include "p_format.h" #include "p_video_enums.h" #include "p_defines.h" +#include "util/u_debug.h" #include #ifdef __cplusplus @@ -104,6 +105,12 @@ struct pipe_context { struct u_upload_mgr *stream_uploader; /* everything but shader constants */ struct u_upload_mgr *const_uploader; /* shader constants only */ + /** + * Debug callback set by u_default_set_debug_callback. Frontends should use + * set_debug_callback in case drivers need to flush compiler queues. + */ + struct util_debug_callback debug; + void (*destroy)( struct pipe_context * ); /**