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]; } } {
