summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>2020-12-18 12:06:12 -0500
committerMarge Bot <eric+marge@anholt.net>2021-04-01 12:57:51 +0000
commita084d012a9ee71049749a6209b0a1cd637e113e1 (patch)
tree17e67cb1acb7616acd9a439afd083a17d67c3faa
parentcc7a18741127157e5da60beb0f1b2b7a8465d84c (diff)
zink: handle PIPE_MAP_DONTBLOCK for buffer read maps
this is mostly used by queries Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/9962>
-rw-r--r--src/gallium/drivers/zink/zink_resource.c10
1 files 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) {