From a3552048c7e7b8afebfc99caac6d555439ddf2bc Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 24 Oct 2022 11:58:13 -0400 Subject: [PATCH] zink: allow direct memory mapping for any COHERENT+CACHED buffer some drivers may provide this in heaps that get used by non-staging resources, so avoid extra copies in that case Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_bo.h | 1 + src/gallium/drivers/zink/zink_resource.c | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/zink_bo.h b/src/gallium/drivers/zink/zink_bo.h index 9248e5d9dca..a84304eea97 100644 --- a/src/gallium/drivers/zink/zink_bo.h +++ b/src/gallium/drivers/zink/zink_bo.h @@ -30,6 +30,7 @@ #include "zink_batch.h" #define VK_VIS_VRAM (VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) +#define VK_STAGING_RAM (VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT) #define VK_LAZY_VRAM (VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 3ec36915199..f1f0ce78426 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -1853,7 +1853,9 @@ zink_buffer_map(struct pipe_context *pctx, goto success; usage |= PIPE_MAP_UNSYNCHRONIZED; } else if (!(usage & PIPE_MAP_UNSYNCHRONIZED) && - (((usage & PIPE_MAP_READ) && !(usage & PIPE_MAP_PERSISTENT) && res->base.b.usage != PIPE_USAGE_STAGING) || !res->obj->host_visible)) { + (((usage & PIPE_MAP_READ) && !(usage & PIPE_MAP_PERSISTENT) && + ((res->obj->bo->base.placement & VK_STAGING_RAM) != VK_STAGING_RAM)) || + !res->obj->host_visible)) { assert(!(usage & (TC_TRANSFER_MAP_THREADED_UNSYNC | PIPE_MAP_THREAD_SAFE))); if (!res->obj->host_visible || !(usage & PIPE_MAP_ONCE)) { trans->offset = box->x % screen->info.props.limits.minMemoryMapAlignment;