trace: fix incorrect trace_surface::base.context pointer

When a trace_surface object is created in trace_surf_create() we
weren't correctly setting the surface's context pointer.  Instead of
it being the trace context, it was the wrapped driver's context.
This caused things to blow up sometimes during surface deallocation.

Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
Brian Paul 2013-02-15 10:36:32 -07:00
parent 3b0de75c4d
commit 82d62cf04f
3 changed files with 7 additions and 4 deletions

View file

@ -897,7 +897,7 @@ trace_context_create_surface(struct pipe_context *_pipe,
trace_dump_call_end();
result = trace_surf_create(tr_res, result);
result = trace_surf_create(tr_ctx, tr_res, result);
return result;
}

View file

@ -74,7 +74,8 @@ trace_resource_destroy(struct trace_screen *tr_scr,
struct pipe_surface *
trace_surf_create(struct trace_resource *tr_res,
trace_surf_create(struct trace_context *tr_ctx,
struct trace_resource *tr_res,
struct pipe_surface *surface)
{
struct trace_surface *tr_surf;
@ -89,6 +90,7 @@ trace_surf_create(struct trace_resource *tr_res,
goto error;
memcpy(&tr_surf->base, surface, sizeof(struct pipe_surface));
tr_surf->base.context = &tr_ctx->base;
pipe_reference_init(&tr_surf->base.reference, 1);
tr_surf->base.texture = NULL;

View file

@ -133,8 +133,9 @@ trace_resource_destroy(struct trace_screen *tr_scr,
struct trace_resource *tr_res);
struct pipe_surface *
trace_surf_create(struct trace_resource *tr_res,
struct pipe_surface *surface);
trace_surf_create(struct trace_context *tr_ctx,
struct trace_resource *tr_res,
struct pipe_surface *surface);
void
trace_surf_destroy(struct trace_surface *tr_surf);