Module: Mesa
Branch: main
Commit: de3931cda735dd388c8ed94fbb3fda9b54499ea8
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=de3931cda735dd388c8ed94fbb3fda9b54499ea8

Author: Mike Blumenkrantz <[email protected]>
Date:   Wed Sep 15 15:09:48 2021 -0400

zink: add ZINK_HEAP_DEVICE_LOCAL_LAZY

this is for lazily allocated resources

Reviewed-by: Adam Jackson <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12934>

---

 src/gallium/drivers/zink/zink_bo.h     | 5 +++++
 src/gallium/drivers/zink/zink_screen.c | 7 +++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_bo.h 
b/src/gallium/drivers/zink/zink_bo.h
index 0fd74cb7923..7dc4d0c341d 100644
--- a/src/gallium/drivers/zink/zink_bo.h
+++ b/src/gallium/drivers/zink/zink_bo.h
@@ -32,6 +32,7 @@
 #include "zink_batch.h"
 
 #define VK_VIS_VRAM (VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | 
VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
+#define VK_LAZY_VRAM (VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT | 
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
 enum zink_resource_access {
    ZINK_RESOURCE_ACCESS_READ = 1,
    ZINK_RESOURCE_ACCESS_WRITE = 32,
@@ -42,6 +43,7 @@ enum zink_resource_access {
 enum zink_heap {
    ZINK_HEAP_DEVICE_LOCAL,
    ZINK_HEAP_DEVICE_LOCAL_SPARSE,
+   ZINK_HEAP_DEVICE_LOCAL_LAZY,
    ZINK_HEAP_DEVICE_LOCAL_VISIBLE,
    ZINK_HEAP_HOST_VISIBLE_COHERENT,
    ZINK_HEAP_HOST_VISIBLE_CACHED,
@@ -128,6 +130,9 @@ vk_domain_from_heap(enum zink_heap heap)
    case ZINK_HEAP_DEVICE_LOCAL_SPARSE:
       domains = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
       break;
+   case ZINK_HEAP_DEVICE_LOCAL_LAZY:
+      domains = VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT | 
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+      break;
    case ZINK_HEAP_DEVICE_LOCAL_VISIBLE:
       domains = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | 
VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
       break;
diff --git a/src/gallium/drivers/zink/zink_screen.c 
b/src/gallium/drivers/zink/zink_screen.c
index 1789de3143c..8ce3ccb2897 100644
--- a/src/gallium/drivers/zink/zink_screen.c
+++ b/src/gallium/drivers/zink/zink_screen.c
@@ -1961,8 +1961,11 @@ zink_internal_create_screen(const struct 
pipe_screen_config *config)
       /* not found: use compatible heap */
       if (screen->heap_map[i] == UINT8_MAX) {
          /* only cached mem has a failure case for now */
-         assert(i == ZINK_HEAP_HOST_VISIBLE_CACHED);
-         screen->heap_map[i] = 
screen->heap_map[ZINK_HEAP_HOST_VISIBLE_COHERENT];
+         assert(i == ZINK_HEAP_HOST_VISIBLE_CACHED || i == 
ZINK_HEAP_DEVICE_LOCAL_LAZY);
+         if (i == ZINK_HEAP_HOST_VISIBLE_CACHED)
+            screen->heap_map[i] = 
screen->heap_map[ZINK_HEAP_HOST_VISIBLE_COHERENT];
+         else
+            screen->heap_map[i] = screen->heap_map[ZINK_HEAP_DEVICE_LOCAL];
       }
    }
    {

Reply via email to