wgl: Integrate the trace driver on debug builds.

This commit is contained in:
José Fonseca 2009-04-08 15:30:31 +01:00
parent 927eb8fe4c
commit 923b4413a6
5 changed files with 74 additions and 14 deletions

View file

@ -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;

View file

@ -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 );

View file

@ -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;

View file

@ -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;
}

View file

@ -27,6 +27,7 @@ if env['platform'] == 'windows':
sources += ['#src/gallium/state_trackers/wgl/opengl32.def']
drivers = [
trace,
softpipe,
]