From c5390b2ef78df6b56c75d5971551549efa3688e4 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 28 Oct 2020 13:18:55 -0400 Subject: [PATCH] zink: refactor resource_sync_writes_from_batch_usage() to manage batch id internally this is always used the same way, so we can simplify the code a bit for future use Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_resource.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 4f3b379018e..c26dbed939d 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -55,8 +55,11 @@ debug_describe_zink_resource_object(char *buf, const struct zink_resource_object static void -resource_sync_writes_from_batch_usage(struct zink_context *ctx, uint32_t batch_uses) +resource_sync_writes_from_batch_usage(struct zink_context *ctx, struct zink_resource *res) { + uint32_t batch_uses = zink_get_resource_usage(res); + batch_uses &= ~(ZINK_RESOURCE_ACCESS_READ << ZINK_COMPUTE_BATCH_ID); + uint32_t write_mask = 0; for (int i = 0; i < ZINK_NUM_GFX_BATCHES + ZINK_COMPUTE_BATCH_COUNT; i++) write_mask |= ZINK_RESOURCE_ACCESS_WRITE << i; @@ -680,7 +683,7 @@ zink_transfer_map(struct pipe_context *pctx, zink_wait_on_batch(ctx, ZINK_COMPUTE_BATCH_ID); batch_uses &= ~(ZINK_RESOURCE_ACCESS_READ << ZINK_COMPUTE_BATCH_ID); if (usage & PIPE_MAP_READ && batch_uses >= ZINK_RESOURCE_ACCESS_WRITE) - resource_sync_writes_from_batch_usage(ctx, batch_uses); + resource_sync_writes_from_batch_usage(ctx, res); else if (usage & PIPE_MAP_WRITE && batch_uses) { /* need to wait for all rendering to finish * TODO: optimize/fix this to be much less obtrusive @@ -782,7 +785,7 @@ zink_transfer_map(struct pipe_context *pctx, batch_uses &= ~(ZINK_RESOURCE_ACCESS_READ << ZINK_COMPUTE_BATCH_ID); if (batch_uses >= ZINK_RESOURCE_ACCESS_WRITE) { if (usage & PIPE_MAP_READ) - resource_sync_writes_from_batch_usage(ctx, batch_uses); + resource_sync_writes_from_batch_usage(ctx, res); else zink_fence_wait(pctx); }