From: Marek Olšák Date: Thu, 9 Nov 2017 19:12:07 +0000 (+0100) Subject: st/dri: fix android fence regression X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=e456d4def5cb0cff3c243c267dd08ac17042e9e4;p=mesa.git st/dri: fix android fence regression Fixes piglit - egl_khr_fence_sync/android_native tests. Broken by 884a0b2a9e55d4c1ca39475b50d9af598d7d7280. Introduce state-tracker flush flags, analogous to the pipe ones. Use the former when with stapi->flush(). Fixes: 884a0b2a9e5 ("st/dri: use stapi flush instead of pipe flush when creating fences") Reviewed-by: Emil Velikov Reviewed-by: Nicolai Hähnle --- diff --git a/src/gallium/include/state_tracker/st_api.h b/src/gallium/include/state_tracker/st_api.h index 11a9878cf64..6cdaefc902f 100644 --- a/src/gallium/include/state_tracker/st_api.h +++ b/src/gallium/include/state_tracker/st_api.h @@ -147,6 +147,8 @@ 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) /** * Value to st_manager->get_param function. diff --git a/src/gallium/state_trackers/dri/dri_helpers.c b/src/gallium/state_trackers/dri/dri_helpers.c index a9213eca19a..4a61455b1f9 100644 --- a/src/gallium/state_trackers/dri/dri_helpers.c +++ b/src/gallium/state_trackers/dri/dri_helpers.c @@ -116,7 +116,7 @@ dri2_create_fence_fd(__DRIcontext *_ctx, int fd) if (fd == -1) { /* exporting driver created fence, flush: */ - stapi->flush(stapi, PIPE_FLUSH_DEFERRED | PIPE_FLUSH_FENCE_FD, + stapi->flush(stapi, ST_FLUSH_DEFERRED | ST_FLUSH_FENCE_FD, &fence->pipe_fence); } else { /* importing a foreign fence fd: */ diff --git a/src/mesa/state_tracker/st_manager.c b/src/mesa/state_tracker/st_manager.c index aedbc13f7d7..43d5dfdced2 100644 --- a/src/mesa/state_tracker/st_manager.c +++ b/src/mesa/state_tracker/st_manager.c @@ -632,9 +632,12 @@ st_context_flush(struct st_context_iface *stctxi, unsigned flags, struct st_context *st = (struct st_context *) stctxi; unsigned pipe_flags = 0; - if (flags & ST_FLUSH_END_OF_FRAME) { + 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; FLUSH_VERTICES(st->ctx, 0); FLUSH_CURRENT(st->ctx, 0);