freedreno: fence fix

A fence can outlive the ctx, so we shouldn't deref the ctx to get at the
screen.  We need some updates in libdrm_freedreno API to completely
handle fences properly, but this is at least an improvement.

Signed-off-by: Rob Clark <robclark@freedesktop.org>
This commit is contained in:
Rob Clark 2015-05-08 15:56:23 -04:00
parent 8427ad9125
commit e6f912f07e

View file

@ -35,6 +35,7 @@
struct pipe_fence_handle {
struct pipe_reference reference;
struct fd_context *ctx;
struct fd_screen *screen;
uint32_t timestamp;
};
@ -68,7 +69,7 @@ boolean fd_screen_fence_finish(struct pipe_screen *screen,
struct pipe_fence_handle *fence,
uint64_t timeout)
{
if (fd_pipe_wait(fence->ctx->screen->pipe, fence->timestamp))
if (fd_pipe_wait(fence->screen->pipe, fence->timestamp))
return false;
return true;
@ -86,6 +87,7 @@ struct pipe_fence_handle * fd_fence_create(struct pipe_context *pctx)
pipe_reference_init(&fence->reference, 1);
fence->ctx = ctx;
fence->screen = ctx->screen;
fence->timestamp = fd_ringbuffer_timestamp(ctx->ring);
return fence;