From 7a169254c510f51eb3fbf7f5bcd642e23520d492 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Mon, 19 Jun 2023 10:24:28 -0400 Subject: [PATCH] zink: add COHERENT requirement for CACHED memory zink doesn't handle non-coherent cached memory correctly, so ensure that scenario is never hit cc: mesa-stable Part-of: --- src/gallium/drivers/zink/zink_bo.h | 2 +- src/gallium/drivers/zink/zink_resource.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_bo.h b/src/gallium/drivers/zink/zink_bo.h index 70c6ef1e3b1..f03003985be 100644 --- a/src/gallium/drivers/zink/zink_bo.h +++ b/src/gallium/drivers/zink/zink_bo.h @@ -67,7 +67,7 @@ vk_domain_from_heap(enum zink_heap heap) domains = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; break; case ZINK_HEAP_HOST_VISIBLE_CACHED: - domains = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT; + domains = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT; break; default: break; diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 5bfa228227a..c407218e196 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -819,7 +819,7 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t VKSCR(GetBufferMemoryRequirements)(screen->dev, obj->buffer, &reqs); } if (templ->usage == PIPE_USAGE_STAGING) - flags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT; + flags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT; else if (templ->usage == PIPE_USAGE_STREAM) flags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; else if (templ->usage == PIPE_USAGE_IMMUTABLE) @@ -1106,7 +1106,7 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t flags |= VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; else if (!(flags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) && templ->usage == PIPE_USAGE_STAGING) - flags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT; + flags |= VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT; if (templ->bind & ZINK_BIND_TRANSIENT) flags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;