From 40e8328ce5fe7445749e461dbd070a7e9d72322c Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 12 Jan 2021 12:28:22 -0500 Subject: [PATCH] zink: remove atomic usage from batch tracking comparisons race conditions here have no impact because it cannot change the evaluation of this condition also no need to check zs stuff if there's no update happening Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_batch.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/gallium/drivers/zink/zink_batch.c b/src/gallium/drivers/zink/zink_batch.c index 2f7dd462cb7..842cc9ed9a0 100644 --- a/src/gallium/drivers/zink/zink_batch.c +++ b/src/gallium/drivers/zink/zink_batch.c @@ -431,8 +431,8 @@ zink_batch_reference_resource_rw(struct zink_batch *batch, struct zink_resource zink_get_depth_stencil_resources((struct pipe_resource*)res, NULL, &stencil); /* if the resource already has usage of any sort set for this batch, we can skip hashing */ - if (!zink_batch_usage_matches(&res->obj->reads, batch->state->fence.batch_id) && - !zink_batch_usage_matches(&res->obj->writes, batch->state->fence.batch_id)) { + if (res->obj->reads.usage != batch->state->fence.batch_id && + res->obj->writes.usage != batch->state->fence.batch_id) { bool found = false; _mesa_set_search_and_add(batch->state->fence.resources, res->obj, &found); if (!found) { @@ -450,13 +450,17 @@ zink_batch_reference_resource_rw(struct zink_batch *batch, struct zink_resource } } if (write) { - if (stencil) - zink_batch_usage_set(&stencil->obj->writes, batch->state->fence.batch_id); - zink_batch_usage_set(&res->obj->writes, batch->state->fence.batch_id); + if (res->obj->writes.usage != batch->state->fence.batch_id) { + if (stencil) + zink_batch_usage_set(&stencil->obj->writes, batch->state->fence.batch_id); + zink_batch_usage_set(&res->obj->writes, batch->state->fence.batch_id); + } } else { - if (stencil) - zink_batch_usage_set(&stencil->obj->reads, batch->state->fence.batch_id); - zink_batch_usage_set(&res->obj->reads, batch->state->fence.batch_id); + if (res->obj->reads.usage != batch->state->fence.batch_id) { + if (stencil) + zink_batch_usage_set(&stencil->obj->reads, batch->state->fence.batch_id); + zink_batch_usage_set(&res->obj->reads, batch->state->fence.batch_id); + } } /* multiple array entries are fine */ if (res->obj->persistent_maps) @@ -469,7 +473,7 @@ static bool ptr_add_usage(struct zink_batch *batch, struct set *s, void *ptr, struct zink_batch_usage *u) { bool found = false; - if (zink_batch_usage_matches(u, batch->state->fence.batch_id)) + if (u->usage == batch->state->fence.batch_id) return false; _mesa_set_search_and_add(s, ptr, &found); assert(!found);