Merge pull request #709 from cdavis5e/buffer-no-prefer-dedicated
Don't prefer dedicated allocations for buffer memory.
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm b/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm
index ee23a31..dcf566d 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKBuffer.mm
@@ -61,21 +61,15 @@
VkResult MVKBuffer::getMemoryRequirements(const void*, VkMemoryRequirements2* pMemoryRequirements) {
pMemoryRequirements->sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
getMemoryRequirements(&pMemoryRequirements->memoryRequirements);
- auto* next = (VkStructureType*)pMemoryRequirements->pNext;
- while (next) {
- switch (*next) {
+ for (auto* next = (VkBaseOutStructure*)pMemoryRequirements->pNext; next; next = next->pNext) {
+ switch (next->sType) {
case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: {
auto* dedicatedReqs = (VkMemoryDedicatedRequirements*)next;
- // TODO: Maybe someday we could do something with MTLHeaps
- // and allocate non-dedicated memory from them. For now, we
- // always prefer dedicated allocations.
- dedicatedReqs->prefersDedicatedAllocation = VK_TRUE;
+ dedicatedReqs->prefersDedicatedAllocation = VK_FALSE;
dedicatedReqs->requiresDedicatedAllocation = VK_FALSE;
- next = (VkStructureType*)dedicatedReqs->pNext;
break;
}
default:
- next = (VkStructureType*)((VkMemoryRequirements2*)next)->pNext;
break;
}
}
diff --git a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
index 972309f..9cf0cce 100644
--- a/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
+++ b/MoltenVK/MoltenVK/GPUObjects/MVKImage.mm
@@ -192,21 +192,18 @@
VkResult MVKImage::getMemoryRequirements(const void*, VkMemoryRequirements2* pMemoryRequirements) {
pMemoryRequirements->sType = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2;
getMemoryRequirements(&pMemoryRequirements->memoryRequirements);
- auto* next = (VkStructureType*)pMemoryRequirements->pNext;
- while (next) {
- switch (*next) {
+ for (auto* next = (VkBaseOutStructure*)pMemoryRequirements->pNext; next; next = next->pNext) {
+ switch (next->sType) {
case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: {
auto* dedicatedReqs = (VkMemoryDedicatedRequirements*)next;
// TODO: Maybe someday we could do something with MTLHeaps
// and allocate non-dedicated memory from them. For now, we
- // always prefer dedicated allocations.
- dedicatedReqs->prefersDedicatedAllocation = VK_TRUE;
+ // always prefer dedicated allocations for non-buffer-backed images.
+ dedicatedReqs->prefersDedicatedAllocation = !_usesTexelBuffer;
dedicatedReqs->requiresDedicatedAllocation = VK_FALSE;
- next = (VkStructureType*)dedicatedReqs->pNext;
break;
}
default:
- next = (VkStructureType*)((VkMemoryRequirements2*)next)->pNext;
break;
}
}