summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gallium/drivers/trace/tr_context.c13
-rw-r--r--src/gallium/drivers/trace/tr_context.h3
-rw-r--r--src/gallium/drivers/trace/tr_screen.c24
-rw-r--r--src/gallium/drivers/trace/tr_winsys.c23
-rw-r--r--src/gallium/drivers/trace/tr_winsys.h3
5 files changed, 34 insertions, 32 deletions
diff --git a/src/gallium/drivers/trace/tr_context.c b/src/gallium/drivers/trace/tr_context.c
index f82126370cf..e43fc01c557 100644
--- a/src/gallium/drivers/trace/tr_context.c
+++ b/src/gallium/drivers/trace/tr_context.c
@@ -959,7 +959,8 @@ trace_context_destroy(struct pipe_context *_pipe)
struct pipe_context *
-trace_context_create(struct pipe_context *pipe)
+trace_context_create(struct pipe_screen *screen,
+ struct pipe_context *pipe)
{
struct trace_stream *stream;
struct trace_context *tr_ctx;
@@ -971,8 +972,8 @@ trace_context_create(struct pipe_context *pipe)
if(!tr_ctx)
return NULL;
- tr_ctx->base.winsys = pipe->winsys;
- tr_ctx->base.screen = pipe->screen;
+ tr_ctx->base.winsys = screen->winsys;
+ tr_ctx->base.screen = screen;
tr_ctx->base.destroy = trace_context_destroy;
tr_ctx->base.set_edgeflags = trace_context_set_edgeflags;
tr_ctx->base.draw_arrays = trace_context_draw_arrays;
@@ -1017,11 +1018,7 @@ trace_context_create(struct pipe_context *pipe)
tr_ctx->base.flush = trace_context_flush;
tr_ctx->pipe = pipe;
- tr_ctx->stream = stream = trace_winsys(pipe->winsys)->stream;
-
- /* We don't want to trace the internal pipe calls */
- pipe->winsys = trace_winsys(pipe->winsys)->winsys;
- pipe->screen = trace_screen(pipe->screen)->screen;
+ tr_ctx->stream = stream = trace_screen(screen)->stream;
trace_dump_call_begin(stream, "", "pipe_context_create");
trace_dump_arg_begin(stream, "screen");
diff --git a/src/gallium/drivers/trace/tr_context.h b/src/gallium/drivers/trace/tr_context.h
index 2c0b0c72e45..1aa822ba02e 100644
--- a/src/gallium/drivers/trace/tr_context.h
+++ b/src/gallium/drivers/trace/tr_context.h
@@ -57,7 +57,8 @@ trace_context(struct pipe_context *pipe)
struct pipe_context *
-trace_context_create(struct pipe_context *pipe);
+trace_context_create(struct pipe_screen *screen,
+ struct pipe_context *pipe);
#endif /* TR_CONTEXT_H_ */
diff --git a/src/gallium/drivers/trace/tr_screen.c b/src/gallium/drivers/trace/tr_screen.c
index 27c218039ec..0e253123aee 100644
--- a/src/gallium/drivers/trace/tr_screen.c
+++ b/src/gallium/drivers/trace/tr_screen.c
@@ -338,7 +338,11 @@ trace_screen_destroy(struct pipe_screen *_screen)
screen->destroy(screen);
trace_dump_call_end(stream);
-
+
+ trace_dump_trace_end(stream);
+
+ trace_stream_close(stream);
+
FREE(tr_scr);
}
@@ -348,6 +352,7 @@ trace_screen_create(struct pipe_screen *screen)
{
struct trace_stream *stream;
struct trace_screen *tr_scr;
+ struct pipe_winsys *winsys;
if(!debug_get_bool_option("GALLIUM_TRACE", FALSE))
return screen;
@@ -356,7 +361,17 @@ trace_screen_create(struct pipe_screen *screen)
if(!tr_scr)
return NULL;
- tr_scr->base.winsys = screen->winsys;
+ tr_scr->stream = stream = trace_stream_create("gallium", "trace");
+ if(!tr_scr->stream)
+ return NULL;
+
+ trace_dump_trace_begin(stream, 0);
+
+ winsys = trace_winsys_create(stream, screen->winsys);
+ if(!winsys)
+ return NULL;
+
+ tr_scr->base.winsys = winsys;
tr_scr->base.destroy = trace_screen_destroy;
tr_scr->base.get_name = trace_screen_get_name;
tr_scr->base.get_vendor = trace_screen_get_vendor;
@@ -372,10 +387,7 @@ trace_screen_create(struct pipe_screen *screen)
tr_scr->base.surface_unmap = trace_screen_surface_unmap;
tr_scr->screen = screen;
- tr_scr->stream = stream = trace_winsys(screen->winsys)->stream;
-
- /* We don't want to trace the internal pipe calls */
- screen->winsys = trace_winsys(screen->winsys)->winsys;
+ tr_scr->stream = stream = trace_winsys(winsys)->stream;
trace_dump_call_begin(stream, "", "pipe_screen_create");
trace_dump_arg_begin(stream, "winsys");
diff --git a/src/gallium/drivers/trace/tr_winsys.c b/src/gallium/drivers/trace/tr_winsys.c
index eec84a19816..524049148d0 100644
--- a/src/gallium/drivers/trace/tr_winsys.c
+++ b/src/gallium/drivers/trace/tr_winsys.c
@@ -393,28 +393,24 @@ trace_winsys_destroy(struct pipe_winsys *_winsys)
trace_dump_arg(stream, ptr, winsys);
- winsys->destroy(winsys);
+ /*
+ winsys->destroy(winsys);
+ */
trace_dump_call_end(stream);
- trace_dump_trace_end(stream);
-
hash_table_destroy(tr_ws->buffer_maps);
- trace_stream_close(tr_ws->stream);
-
FREE(tr_ws);
}
struct pipe_winsys *
-trace_winsys_create(struct pipe_winsys *winsys)
+trace_winsys_create(struct trace_stream *stream,
+ struct pipe_winsys *winsys)
{
- struct trace_stream *stream;
- struct trace_winsys *tr_ws;
- if(!debug_get_bool_option("GALLIUM_TRACE", FALSE))
- return winsys;
+ struct trace_winsys *tr_ws;
tr_ws = CALLOC_STRUCT(trace_winsys);
if(!tr_ws)
@@ -436,18 +432,13 @@ trace_winsys_create(struct pipe_winsys *winsys)
tr_ws->base.fence_finish = trace_winsys_fence_finish;
tr_ws->winsys = winsys;
-
- tr_ws->stream = stream = trace_stream_create("gallium", "trace");
- if(!tr_ws->stream)
- return NULL;
+ tr_ws->stream = stream;
tr_ws->buffer_maps = hash_table_create(trace_buffer_hash,
trace_buffer_compare);
if(!tr_ws->buffer_maps)
return NULL;
- trace_dump_trace_begin(tr_ws->stream, 0);
-
trace_dump_call_begin(stream, "", "pipe_winsys_create");
trace_dump_ret(stream, ptr, winsys);
trace_dump_call_end(stream);
diff --git a/src/gallium/drivers/trace/tr_winsys.h b/src/gallium/drivers/trace/tr_winsys.h
index a3576da867e..704d2c57c86 100644
--- a/src/gallium/drivers/trace/tr_winsys.h
+++ b/src/gallium/drivers/trace/tr_winsys.h
@@ -60,7 +60,8 @@ trace_winsys(struct pipe_winsys *winsys)
struct pipe_winsys *
-trace_winsys_create(struct pipe_winsys *winsys);
+trace_winsys_create(struct trace_stream *stream,
+ struct pipe_winsys *winsys);
#endif /* TR_WINSYS_H_ */