diff options
author | Mike Blumenkrantz <michael.blumenkrantz@gmail.com> | 2021-03-03 13:00:55 -0500 |
---|---|---|
committer | Marge Bot <eric+marge@anholt.net> | 2021-06-04 13:52:33 +0000 |
commit | ef2e29f3b51c9ad3fb566c5907e153791b6762f7 (patch) | |
tree | 41bd7214827a6c12c4189b586983caa52c28e302 | |
parent | cbaba3f1b9854c5995fb1c3b6e23cce0b1a6e206 (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.c | 7 |
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 |