wgl: Integrate the trace driver on debug builds.
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ if env['platform'] == 'windows':
|
||||
sources += ['#src/gallium/state_trackers/wgl/opengl32.def']
|
||||
|
||||
drivers = [
|
||||
trace,
|
||||
softpipe,
|
||||
]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user