vkGetImageMemoryRequirements2 dedicated allocation
Allow vkGetImageMemoryRequirements2 to set data in the
VkMemoryDedicatedRequirements pNext structure, the same
way vkGetBufferMemoryRequirements2 already does.
Bug b/119620767
Change-Id: I4fb6bc29862eb01188ec1d2a05b4f6cc34629d8a
Tests: dEQP-VK.memory.mapping.dedicated_alloc.image.*
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/28488
Tested-by: Alexis Hétu <sugoi@google.com>
Presubmit-Ready: Alexis Hétu <sugoi@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp
index 39a9c68..10d0048 100644
--- a/src/Vulkan/libVulkan.cpp
+++ b/src/Vulkan/libVulkan.cpp
@@ -1884,9 +1884,29 @@
TRACE("(VkDevice device = 0x%X, const VkImageMemoryRequirementsInfo2* pInfo = 0x%X, VkMemoryRequirements2* pMemoryRequirements = 0x%X)",
device, pInfo, pMemoryRequirements);
- if(pInfo->pNext || pMemoryRequirements->pNext)
+ if(pInfo->pNext)
{
- UNIMPLEMENTED("pInfo->pNext || pMemoryRequirements->pNext");
+ UNIMPLEMENTED("pInfo->pNext");
+ }
+
+ VkBaseOutStructure* extensionRequirements = reinterpret_cast<VkBaseOutStructure*>(pMemoryRequirements->pNext);
+ while(extensionRequirements)
+ {
+ switch(extensionRequirements->sType)
+ {
+ case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
+ {
+ auto& requirements = *reinterpret_cast<VkMemoryDedicatedRequirements*>(extensionRequirements);
+ requirements.prefersDedicatedAllocation = VK_FALSE;
+ requirements.requiresDedicatedAllocation = VK_FALSE;
+ }
+ break;
+ default:
+ UNIMPLEMENTED("extensionRequirements->sType");
+ break;
+ }
+
+ extensionRequirements = extensionRequirements->pNext;
}
vkGetImageMemoryRequirements(device, pInfo->image, &(pMemoryRequirements->memoryRequirements));