Module: Mesa
Branch: staging/23.1
Commit: 4dcacfff6a168baa6d3f3ccc9b0a2480b5f34f93
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=4dcacfff6a168baa6d3f3ccc9b0a2480b5f34f93

Author: Mike Blumenkrantz <[email protected]>
Date:   Mon Jun 19 10:24:28 2023 -0400

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: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23728>
(cherry picked from commit 7a169254c510f51eb3fbf7f5bcd642e23520d492)

---

 .pick_status.json                        | 2 +-
 src/gallium/drivers/zink/zink_bo.h       | 2 +-
 src/gallium/drivers/zink/zink_resource.c | 4 ++--
 3 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index a3d90bdc72f..206da389451 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -220,7 +220,7 @@
         "description": "zink: add COHERENT requirement for CACHED memory",
         "nominated": true,
         "nomination_type": 0,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": null
     },
diff --git a/src/gallium/drivers/zink/zink_bo.h 
b/src/gallium/drivers/zink/zink_bo.h
index d48bea52cc1..ffe933ccca6 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 c91ac048736..c093e9a100f 100644
--- a/src/gallium/drivers/zink/zink_resource.c
+++ b/src/gallium/drivers/zink/zink_resource.c
@@ -707,7 +707,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)
@@ -995,7 +995,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;

Reply via email to