nouveau: add support for sending debug messages via KHR_debug
authorIlia Mirkin <imirkin@alum.mit.edu>
Fri, 30 Oct 2015 21:23:22 +0000 (17:23 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Thu, 5 Nov 2015 16:22:19 +0000 (11:22 -0500)
Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
src/gallium/drivers/nouveau/nouveau_context.h
src/gallium/drivers/nouveau/nouveau_screen.c
src/gallium/drivers/nouveau/nv30/nv30_context.c
src/gallium/drivers/nouveau/nv50/nv50_context.c
src/gallium/drivers/nouveau/nvc0/nvc0_context.c

index decb2714ede041f20b63e09f54dafc1b63cb4864..a8189b82f82a08f4ce5cdbf9cb562aa3d36be566 100644 (file)
@@ -14,6 +14,7 @@ struct nouveau_context {
 
    struct nouveau_client *client;
    struct nouveau_pushbuf *pushbuf;
+   struct pipe_debug_callback debug;
 
    bool vbo_dirty;
 
@@ -63,6 +64,9 @@ nouveau_context(struct pipe_context *pipe)
 void
 nouveau_context_init_vdec(struct nouveau_context *);
 
+void
+nouveau_context_init(struct nouveau_context *);
+
 void
 nouveau_scratch_runout_release(struct nouveau_context *);
 
index 47603b0b7fd3bbf275538df1bf474d69c50c2313..21d431788ecaff92882039bbf1c678c25f4c3679 100644 (file)
@@ -18,6 +18,7 @@
 
 #include "nouveau_winsys.h"
 #include "nouveau_screen.h"
+#include "nouveau_context.h"
 #include "nouveau_fence.h"
 #include "nouveau_mm.h"
 #include "nouveau_buffer.h"
@@ -238,3 +239,21 @@ nouveau_screen_fini(struct nouveau_screen *screen)
 
    nouveau_device_del(&screen->device);
 }
+
+static void
+nouveau_set_debug_callback(struct pipe_context *pipe,
+                           const struct pipe_debug_callback *cb)
+{
+   struct nouveau_context *context = nouveau_context(pipe);
+
+   if (cb)
+      context->debug = *cb;
+   else
+      memset(&context->debug, 0, sizeof(context->debug));
+}
+
+void
+nouveau_context_init(struct nouveau_context *context)
+{
+   context->pipe.set_debug_callback = nouveau_set_debug_callback;
+}
index a36fd57fae7bcc49699498cbcf35087eecb84bab..3ed088912e2e2e8e694e1928a60acc03856df32b 100644 (file)
@@ -242,6 +242,7 @@ nv30_context_create(struct pipe_screen *pscreen, void *priv, unsigned ctxflags)
    if (debug_get_bool_option("NV30_SWTNL", false))
       nv30->draw_flags |= NV30_NEW_SWTNL;
 
+   nouveau_context_init(&nv30->base);
    nv30->sample_mask = 0xffff;
    nv30_vbo_init(pipe);
    nv30_query_init(pipe);
index 4108f48005e79e0bba18ab606c798594595873bb..7867c2df7f38d6730b4f5f07a5831b9752185dcd 100644 (file)
@@ -306,6 +306,7 @@ nv50_create(struct pipe_screen *pscreen, void *priv, unsigned ctxflags)
    }
    nv50->base.pushbuf->kick_notify = nv50_default_kick_notify;
 
+   nouveau_context_init(&nv50->base);
    nv50_init_query_functions(nv50);
    nv50_init_surface_functions(nv50);
    nv50_init_state_functions(nv50);
index f7604f11788594b0dcad2801684e9ac608d3f12d..82ed5a1864e7d940ecb1340a8a66f3f69fc3d537 100644 (file)
@@ -309,6 +309,7 @@ nvc0_create(struct pipe_screen *pscreen, void *priv, unsigned ctxflags)
    pipe->memory_barrier = nvc0_memory_barrier;
    pipe->get_sample_position = nvc0_context_get_sample_position;
 
+   nouveau_context_init(&nvc0->base);
    nvc0_init_query_functions(nvc0);
    nvc0_init_surface_functions(nvc0);
    nvc0_init_state_functions(nvc0);