#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,
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,
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;
/* 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];
}
}
{