[Mesa-dev] [PATCH] gallium/u_threaded: drop and ignore all non-async debug callbacks

Marek Olšák maraeo at gmail.com
Fri May 12 19:06:55 UTC 2017


From: Marek Olšák <marek.olsak at amd.com>

This is necessary to comply with OpenGL.
---
 src/gallium/auxiliary/util/u_threaded_context.c | 7 +++++++
 src/gallium/auxiliary/util/u_threaded_context.h | 4 +---
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/src/gallium/auxiliary/util/u_threaded_context.c b/src/gallium/auxiliary/util/u_threaded_context.c
index b44430f..50cb820 100644
--- a/src/gallium/auxiliary/util/u_threaded_context.c
+++ b/src/gallium/auxiliary/util/u_threaded_context.c
@@ -1585,20 +1585,27 @@ tc_dump_debug_state(struct pipe_context *_pipe, FILE *stream,
    pipe->dump_debug_state(pipe, stream, flags);
 }
 
 static void
 tc_set_debug_callback(struct pipe_context *_pipe,
                       const struct pipe_debug_callback *cb)
 {
    struct threaded_context *tc = threaded_context(_pipe);
    struct pipe_context *pipe = tc->pipe;
 
+   /* Drop all synchronous debug callbacks. Drivers are expected to be OK
+    * with this. shader-db will use an environment variable to disable
+    * the threaded context.
+    */
+   if (cb && cb->debug_message && !cb->async)
+      return;
+
    tc_sync(tc);
    pipe->set_debug_callback(pipe, cb);
 }
 
 static void
 tc_create_fence_fd(struct pipe_context *_pipe,
                    struct pipe_fence_handle **fence, int fd)
 {
    struct threaded_context *tc = threaded_context(_pipe);
    struct pipe_context *pipe = tc->pipe;
diff --git a/src/gallium/auxiliary/util/u_threaded_context.h b/src/gallium/auxiliary/util/u_threaded_context.h
index ea58d4c..f139230 100644
--- a/src/gallium/auxiliary/util/u_threaded_context.h
+++ b/src/gallium/auxiliary/util/u_threaded_context.h
@@ -48,23 +48,21 @@
  *
  * 3) The threaded context must not be enabled for contexts that can use video
  *    codecs.
  *
  * 4) Changes in driver behavior:
  *    - begin_query and end_query always return true; return values from
  *      the driver are ignored.
  *    - generate_mipmap uses is_format_supported to determine success;
  *      the return value from the driver is ignored.
  *    - resource_commit always returns true; failures are ignored.
- *    - If a non-async debug callback is set, the threaded context keeps using
- *      asynchronous execution. This is OK for shader-db, but the driver
- *      shouldn't use the debug callback in any other way.
+ *    - set_debug_callback is skipped if the callback is synchronous.
  *
  *
  * Thread-safety requirements on context functions
  * -----------------------------------------------
  *
  * These pipe_context functions are executed directly, so they shouldn't use
  * pipe_context in an unsafe way. They are de-facto screen functions now:
  * - create_query
  * - create_batch_query
  * - create_*_state (all CSOs and shaders)
-- 
2.7.4



More information about the mesa-dev mailing list