From 813767feeabb3a3edf3437e08d6fdf4e7c6f22a6 Mon Sep 17 00:00:00 2001 From: Stephen Saunders Date: Tue, 1 Feb 2022 13:30:46 -0500 Subject: [PATCH] Generalize handling of heap avoid flags in Vulkan and VMA Allocators (cherry picked from commit 7c49b044d37ff65599470103d360b8d46045bfb5) --- neo/renderer/Vulkan/Allocator_VK.cpp | 2 ++ neo/renderer/Vulkan/vma.h | 6 ++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/neo/renderer/Vulkan/Allocator_VK.cpp b/neo/renderer/Vulkan/Allocator_VK.cpp index 67ce8e3d..f752616c 100644 --- a/neo/renderer/Vulkan/Allocator_VK.cpp +++ b/neo/renderer/Vulkan/Allocator_VK.cpp @@ -74,6 +74,8 @@ uint32 FindMemoryTypeIndex( const uint32 memoryTypeBits, const vulkanMemoryUsage break; case VULKAN_MEMORY_USAGE_CPU_ONLY: required |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; + // SRS - Make sure memory type does not have VK_MEMORY_HEAP_MULTI_INSTANCE_BIT set, otherwise get validation errors when mapping memory + avoid |= VK_MEMORY_HEAP_MULTI_INSTANCE_BIT; break; case VULKAN_MEMORY_USAGE_CPU_TO_GPU: required |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; diff --git a/neo/renderer/Vulkan/vma.h b/neo/renderer/Vulkan/vma.h index 916939c2..ed482b25 100644 --- a/neo/renderer/Vulkan/vma.h +++ b/neo/renderer/Vulkan/vma.h @@ -5253,14 +5253,10 @@ VkResult vmaFindMemoryTypeIndex( case VMA_MEMORY_USAGE_CPU_TO_GPU: requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; preferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; - // SRS - Make sure memory type does not have VK_MEMORY_HEAP_MULTI_INSTANCE_BIT set, otherwise get validation errors when mapping memory - avoidFlags |= VK_MEMORY_HEAP_MULTI_INSTANCE_BIT; break; case VMA_MEMORY_USAGE_GPU_TO_CPU: requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; preferredFlags |= VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT; - // SRS - Make sure memory type does not have VK_MEMORY_HEAP_MULTI_INSTANCE_BIT set, otherwise get validation errors when mapping memory - avoidFlags |= VK_MEMORY_HEAP_MULTI_INSTANCE_BIT; break; default: break; @@ -5269,6 +5265,8 @@ VkResult vmaFindMemoryTypeIndex( if( ( pMemoryRequirements->flags & VMA_MEMORY_REQUIREMENT_PERSISTENT_MAP_BIT ) != 0 ) { requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT; + // SRS - Make sure memory type does not have VK_MEMORY_HEAP_MULTI_INSTANCE_BIT set, otherwise get validation errors when mapping memory + avoidFlags |= VK_MEMORY_HEAP_MULTI_INSTANCE_BIT; } *pMemoryTypeIndex = UINT32_MAX;