zink: add ZINK_HEAP_DEVICE_LOCAL_LAZY
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Wed, 15 Sep 2021 19:09:48 +0000 (15:09 -0400)
committerMarge Bot <eric+marge@anholt.net>
Fri, 24 Sep 2021 21:00:21 +0000 (21:00 +0000)
this is for lazily allocated resources

Reviewed-by: Adam Jackson <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12934>

src/gallium/drivers/zink/zink_bo.h
src/gallium/drivers/zink/zink_screen.c

index 0fd74cb..7dc4d0c 100644 (file)
@@ -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;
index 1789de3..8ce3ccb 100644 (file)
@@ -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];
       }
    }
    {