summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2017-11-09 20:12:07 +0100
committerMarek Olšák <[email protected]>2017-11-10 17:17:13 +0100
commite456d4def5cb0cff3c243c267dd08ac17042e9e4 (patch)
tree14a0e7ee911fec8fe18621bf4bc5478ae9d9934d
parente7972b89432600ebe38e6eb67b9b65c1f34dfdc1 (diff)
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 <[email protected]> Reviewed-by: Nicolai Hähnle <[email protected]>
-rw-r--r--src/gallium/include/state_tracker/st_api.h2
-rw-r--r--src/gallium/state_trackers/dri/dri_helpers.c2
-rw-r--r--src/mesa/state_tracker/st_manager.c7
3 files changed, 8 insertions, 3 deletions
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);