summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>2021-03-03 13:00:55 -0500
committerMarge Bot <eric+marge@anholt.net>2021-06-04 13:52:33 +0000
commitef2e29f3b51c9ad3fb566c5907e153791b6762f7 (patch)
tree41bd7214827a6c12c4189b586983caa52c28e302
parentcbaba3f1b9854c5995fb1c3b6e23cce0b1a6e206 (diff)
zink: no-op read access buffer barriers if existing access exists for earlier stage
only the earliest stage should be applied for these barriers, so we can skip ones where the existing access is earlier Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11131>
-rw-r--r--src/gallium/drivers/zink/zink_context.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c
index 1f1cfa8d569..c9406e85db7 100644
--- a/src/gallium/drivers/zink/zink_context.c
+++ b/src/gallium/drivers/zink/zink_context.c
@@ -2202,9 +2202,10 @@ zink_resource_buffer_needs_barrier(struct zink_resource *res, VkAccessFlags flag
return true;
if (!pipeline)
pipeline = pipeline_access_stage(flags);
- return (res->access_stage & pipeline) != pipeline || (res->access & flags) != flags ||
- zink_resource_access_is_write(res->access) ||
- zink_resource_access_is_write(flags);
+ return zink_resource_access_is_write(res->access) ||
+ zink_resource_access_is_write(flags) ||
+ ((res->access_stage & pipeline) != pipeline && !(res->access_stage & (pipeline - 1))) ||
+ (res->access & flags) != flags;
}
ALWAYS_INLINE static bool