Mesa (master): wgl: Integrate the trace driver on debug builds.

Jose Fonseca jrfonseca at kemper.freedesktop.org
Wed Apr 8 15:26:12 UTC 2009


Module: Mesa
Branch: master
Commit: 923b4413a63530be37cd44eed29910db21b39ac6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=923b4413a63530be37cd44eed29910db21b39ac6

Author: José Fonseca <jfonseca at vmware.com>
Date:   Wed Apr  8 15:30:31 2009 +0100

wgl: Integrate the trace driver on debug builds.

---

 .../state_trackers/wgl/shared/stw_context.c        |   23 +++++++++++++++-
 src/gallium/state_trackers/wgl/shared/stw_device.c |   28 ++++++++++++++++---
 src/gallium/state_trackers/wgl/shared/stw_device.h |    5 +++
 .../state_trackers/wgl/shared/stw_framebuffer.c    |   29 ++++++++++++++-----
 src/gallium/winsys/gdi/SConscript                  |    1 +
 5 files changed, 73 insertions(+), 13 deletions(-)

diff --git a/src/gallium/state_trackers/wgl/shared/stw_context.c b/src/gallium/state_trackers/wgl/shared/stw_context.c
index 82aabe0..f890225 100644
--- a/src/gallium/state_trackers/wgl/shared/stw_context.c
+++ b/src/gallium/state_trackers/wgl/shared/stw_context.c
@@ -33,6 +33,12 @@
 #include "pipe/p_context.h"
 #include "state_tracker/st_context.h"
 #include "state_tracker/st_public.h"
+
+#ifdef DEBUG
+#include "trace/tr_screen.h"
+#include "trace/tr_context.h"
+#endif
+
 #include "shared/stw_device.h"
 #include "shared/stw_winsys.h"
 #include "shared/stw_framebuffer.h"
@@ -77,6 +83,7 @@ stw_create_layer_context(
    const struct pixelformat_info *pf = NULL;
    struct stw_context *ctx = NULL;
    GLvisual *visual = NULL;
+   struct pipe_screen *screen = NULL;
    struct pipe_context *pipe = NULL;
    UINT_PTR hglrc = 0;
 
@@ -120,10 +127,24 @@ stw_create_layer_context(
    if (visual == NULL) 
       goto fail;
 
-   pipe = stw_dev->stw_winsys->create_context( stw_dev->screen );
+   screen = stw_dev->screen;
+
+#ifdef DEBUG
+   /* Unwrap screen */
+   if(stw_dev->trace_running)
+      screen = trace_screen(screen)->screen;
+#endif
+
+   pipe = stw_dev->stw_winsys->create_context( screen );
    if (pipe == NULL) 
       goto fail;
 
+#ifdef DEBUG
+   /* Wrap context */
+   if(stw_dev->trace_running)
+      pipe = trace_context_create(stw_dev->screen, pipe);
+#endif
+
    assert(!pipe->priv);
    pipe->priv = hdc;
 
diff --git a/src/gallium/state_trackers/wgl/shared/stw_device.c b/src/gallium/state_trackers/wgl/shared/stw_device.c
index c550172..51936c2 100644
--- a/src/gallium/state_trackers/wgl/shared/stw_device.c
+++ b/src/gallium/state_trackers/wgl/shared/stw_device.c
@@ -31,6 +31,11 @@
 #include "util/u_debug.h"
 #include "pipe/p_screen.h"
 
+#ifdef DEBUG
+#include "trace/tr_screen.h"
+#include "trace/tr_texture.h"
+#endif
+
 #include "shared/stw_device.h"
 #include "shared/stw_winsys.h"
 #include "shared/stw_pixelformat.h"
@@ -52,13 +57,20 @@ struct stw_device *stw_dev = NULL;
  */
 static void 
 st_flush_frontbuffer(struct pipe_screen *screen,
-                     struct pipe_surface *surf,
+                     struct pipe_surface *surface,
                      void *context_private )
 {
    const struct stw_winsys *stw_winsys = stw_dev->stw_winsys;
    HDC hdc = (HDC)context_private;
    
-   stw_winsys->flush_frontbuffer(screen, surf, hdc);
+#ifdef DEBUG
+   if(stw_dev->trace_running) {
+      screen = trace_screen(screen)->screen;
+      surface = trace_surface(surface)->surface;
+   }
+#endif
+   
+   stw_winsys->flush_frontbuffer(screen, surface, hdc);
 }
 
 
@@ -66,6 +78,7 @@ boolean
 st_init(const struct stw_winsys *stw_winsys)
 {
    static struct stw_device stw_dev_storage;
+   struct pipe_screen *screen;
 
    debug_printf("%s\n", __FUNCTION__);
    
@@ -86,10 +99,17 @@ st_init(const struct stw_winsys *stw_winsys)
    _glthread_INIT_MUTEX(OneTimeLock);
 #endif
 
-   stw_dev->screen = stw_winsys->create_screen();
-   if(!stw_dev->screen)
+   screen = stw_winsys->create_screen();
+   if(!screen)
       goto error1;
 
+#ifdef DEBUG
+   stw_dev->screen = trace_screen_create(screen);
+   stw_dev->trace_running = stw_dev->screen != screen ? TRUE : FALSE;
+#else
+   stw_dev->screen = screen;
+#endif
+   
    stw_dev->screen->flush_frontbuffer = st_flush_frontbuffer;
    
    pipe_mutex_init( stw_dev->mutex );
diff --git a/src/gallium/state_trackers/wgl/shared/stw_device.h b/src/gallium/state_trackers/wgl/shared/stw_device.h
index 6a9cee0..703cb67 100644
--- a/src/gallium/state_trackers/wgl/shared/stw_device.h
+++ b/src/gallium/state_trackers/wgl/shared/stw_device.h
@@ -39,8 +39,13 @@ struct pipe_screen;
 struct stw_device
 {
    const struct stw_winsys *stw_winsys;
+   
    struct pipe_screen *screen;
    
+#ifdef DEBUG
+   boolean trace_running;
+#endif
+   
    pipe_mutex mutex;
 
    struct handle_table *ctx_table;
diff --git a/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c b/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c
index c289a8a..c96c4b8 100644
--- a/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c
+++ b/src/gallium/state_trackers/wgl/shared/stw_framebuffer.c
@@ -32,6 +32,12 @@
 #include "pipe/p_screen.h"
 #include "state_tracker/st_context.h"
 #include "state_tracker/st_public.h"
+
+#ifdef DEBUG
+#include "trace/tr_screen.h"
+#include "trace/tr_texture.h"
+#endif
+
 #include "stw_framebuffer.h"
 #include "stw_device.h"
 #include "stw_public.h"
@@ -246,7 +252,8 @@ stw_swap_buffers(
    HDC hdc )
 {
    struct stw_framebuffer *fb;
-   struct pipe_surface *surf;
+   struct pipe_screen *screen;
+   struct pipe_surface *surface;
 
    fb = framebuffer_from_hdc( hdc );
    if (fb == NULL)
@@ -257,14 +264,20 @@ stw_swap_buffers(
     */
    st_notify_swapbuffers( fb->stfb );
 
-   if(st_get_framebuffer_surface( fb->stfb, ST_SURFACE_BACK_LEFT, &surf )) {
-      stw_dev->stw_winsys->flush_frontbuffer(stw_dev->screen,
-                                             surf,
-                                             hdc );
-   }
-   else {
-       /* FIXME: this shouldn't happen, but does on glean */
+   screen = stw_dev->screen;
+   
+   if(!st_get_framebuffer_surface( fb->stfb, ST_SURFACE_BACK_LEFT, &surface ))
+      /* FIXME: this shouldn't happen, but does on glean */
+      return FALSE;
+
+#ifdef DEBUG
+   if(stw_dev->trace_running) {
+      screen = trace_screen(screen)->screen;
+      surface = trace_surface(surface)->surface;
    }
+#endif
 
+   stw_dev->stw_winsys->flush_frontbuffer( screen, surface, hdc );
+   
    return TRUE;
 }
diff --git a/src/gallium/winsys/gdi/SConscript b/src/gallium/winsys/gdi/SConscript
index 42290d7..aabab95 100644
--- a/src/gallium/winsys/gdi/SConscript
+++ b/src/gallium/winsys/gdi/SConscript
@@ -27,6 +27,7 @@ if env['platform'] == 'windows':
 		sources += ['#src/gallium/state_trackers/wgl/opengl32.def']
 		
 	drivers = [
+		trace,
 		softpipe,
 	]
 




More information about the mesa-commit mailing list