From a084d012a9ee71049749a6209b0a1cd637e113e1 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 18 Dec 2020 12:06:12 -0500 Subject: zink: handle PIPE_MAP_DONTBLOCK for buffer read maps this is mostly used by queries Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_resource.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index a660eee55e4..c7f19ca8449 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -849,8 +849,14 @@ buffer_transfer_map(struct zink_context *ctx, struct zink_resource *res, unsigne } else if ((usage & PIPE_MAP_READ) && !(usage & PIPE_MAP_PERSISTENT)) { assert(!(usage & (TC_TRANSFER_MAP_THREADED_UNSYNC | PIPE_MAP_THREAD_SAFE))); uint32_t latest_write = get_most_recent_access(res, ZINK_RESOURCE_ACCESS_WRITE); - if (latest_write) - zink_wait_on_batch(ctx, latest_write); + if (latest_write) { + if (usage & PIPE_MAP_DONTBLOCK) { + if (latest_write == ctx->curr_batch || + !zink_check_batch_completion(ctx, latest_write)) + return NULL; + } else + zink_wait_on_batch(ctx, latest_write); + } } if (!ptr) { -- cgit v1.2.3