zink: force-reset unordered flags for buffer barriers on non-matching batch access
this should allow slightly better reordering Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24886>
This commit is contained in:

committed by
Marge Bot

parent
639bdadd4a
commit
e64a47cee7
@@ -547,13 +547,18 @@ zink_resource_buffer_barrier(struct zink_context *ctx, struct zink_resource *res
|
||||
pipeline = pipeline_access_stage(flags);
|
||||
|
||||
bool is_write = zink_resource_access_is_write(flags);
|
||||
bool unordered = unordered_res_exec(ctx, res, is_write);
|
||||
if (!buffer_needs_barrier(res, flags, pipeline, unordered))
|
||||
return;
|
||||
enum zink_resource_access rw = is_write ? ZINK_RESOURCE_ACCESS_RW : ZINK_RESOURCE_ACCESS_WRITE;
|
||||
bool completed = zink_resource_usage_check_completion_fast(zink_screen(ctx->base.screen), res, rw);
|
||||
bool usage_matches = !completed && zink_resource_usage_matches(res, ctx->batch.state);
|
||||
if (!usage_matches) {
|
||||
res->obj->unordered_write = true;
|
||||
if (is_write || zink_resource_usage_check_completion_fast(zink_screen(ctx->base.screen), res, ZINK_RESOURCE_ACCESS_RW))
|
||||
res->obj->unordered_read = true;
|
||||
}
|
||||
bool unordered_usage_matches = res->obj->unordered_access && usage_matches;
|
||||
bool unordered = unordered_res_exec(ctx, res, is_write);
|
||||
if (!buffer_needs_barrier(res, flags, pipeline, unordered))
|
||||
return;
|
||||
if (completed) {
|
||||
/* reset access on complete */
|
||||
res->obj->access = VK_ACCESS_NONE;
|
||||
|
Reference in New Issue
Block a user