st/dri: fix deadlock when waiting on android fences

Android fences can't be deferred, because st/dri calls fence_finish
with ctx = NULL, so the driver can't flush u_threaded_context.

Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Marek Olšák 2017-11-10 19:08:50 +01:00
parent 881f6e741f
commit 3a71eac783
3 changed files with 2 additions and 6 deletions

View file

@ -147,8 +147,7 @@ enum st_attachment_type {
#define ST_FLUSH_FRONT (1 << 0)
#define ST_FLUSH_END_OF_FRAME (1 << 1)
#define ST_FLUSH_WAIT (1 << 2)
#define ST_FLUSH_DEFERRED (1 << 3)
#define ST_FLUSH_FENCE_FD (1 << 4)
#define ST_FLUSH_FENCE_FD (1 << 3)
/**
* Value to st_manager->get_param function.

View file

@ -116,8 +116,7 @@ dri2_create_fence_fd(__DRIcontext *_ctx, int fd)
if (fd == -1) {
/* exporting driver created fence, flush: */
stapi->flush(stapi, ST_FLUSH_DEFERRED | ST_FLUSH_FENCE_FD,
&fence->pipe_fence);
stapi->flush(stapi, ST_FLUSH_FENCE_FD, &fence->pipe_fence);
} else {
/* importing a foreign fence fd: */
ctx->create_fence_fd(ctx, &fence->pipe_fence, fd);

View file

@ -634,8 +634,6 @@ st_context_flush(struct st_context_iface *stctxi, unsigned flags,
if (flags & ST_FLUSH_END_OF_FRAME)
pipe_flags |= PIPE_FLUSH_END_OF_FRAME;
if (flags & ST_FLUSH_DEFERRED)
pipe_flags |= PIPE_FLUSH_DEFERRED;
if (flags & ST_FLUSH_FENCE_FD)
pipe_flags |= PIPE_FLUSH_FENCE_FD;