mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 04:48:08 +02:00
wgl: Integrate the trace driver on debug builds.
This commit is contained in:
parent
927eb8fe4c
commit
923b4413a6
5 changed files with 74 additions and 14 deletions
|
|
@ -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,
|
||||
]
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue