From de3931cda735dd388c8ed94fbb3fda9b54499ea8 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 15 Sep 2021 15:09:48 -0400 Subject: [PATCH] zink: add ZINK_HEAP_DEVICE_LOCAL_LAZY this is for lazily allocated resources Reviewed-by: Adam Jackson Part-of: --- 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]; } } {