Fix dedicated allocations in split frame rendering tests
The image bound to dedicated memory must match the image from
VkMemoryDedicatedAllocateInfo
Components: Vulkan
VK-GL-CTS issue: 3971
Affected tests:
dEQP-VK.device_group.sfr_*
Change-Id: I23684ae6777d575da5eb244dfd856946ba67aa4a
diff --git a/external/vulkancts/modules/vulkan/device_group/vktDeviceGroupRendering.cpp b/external/vulkancts/modules/vulkan/device_group/vktDeviceGroupRendering.cpp
index 3f0940a..c52ae22 100644
--- a/external/vulkancts/modules/vulkan/device_group/vktDeviceGroupRendering.cpp
+++ b/external/vulkancts/modules/vulkan/device_group/vktDeviceGroupRendering.cpp
@@ -402,7 +402,8 @@
vk::Move<vk::VkDeviceMemory> indexBufferMemory;
vk::Move<vk::VkDeviceMemory> uniformBufferMemory;
vk::Move<vk::VkDeviceMemory> sboBufferMemory;
- vk::Move<vk::VkDeviceMemory> imageMemory;
+ vk::Move<vk::VkDeviceMemory> renderImageMemory;
+ vk::Move<vk::VkDeviceMemory> readImageMemory;
Move<VkRenderPass> renderPass;
Move<VkImage> renderImage;
@@ -791,11 +792,19 @@
memoryTypeNdx = getMemoryIndex(memReqs.memoryTypeBits, m_useHostMemory ? 0 : VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
allocInfo.allocationSize = memReqs.size;
allocInfo.memoryTypeIndex = memoryTypeNdx;
- imageMemory = allocateMemory(vk, *m_deviceGroup, &allocInfo);
+ renderImageMemory = allocateMemory(vk, *m_deviceGroup, &allocInfo);
+
+ dedicatedAllocInfo.image = *readImage;
+ dedicatedAllocInfo.buffer = DE_NULL;
+ memReqs = getImageMemoryRequirements(vk, *m_deviceGroup, readImage.get());
+ memoryTypeNdx = getMemoryIndex(memReqs.memoryTypeBits, m_useHostMemory ? 0 : VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
+ allocInfo.allocationSize = memReqs.size;
+ allocInfo.memoryTypeIndex = memoryTypeNdx;
+ readImageMemory = allocateMemory(vk, *m_deviceGroup, &allocInfo);
}
- VK_CHECK(vk.bindImageMemory(*m_deviceGroup, *renderImage, imageMemory.get(), 0));
- VK_CHECK(vk.bindImageMemory(*m_deviceGroup, *readImage, imageMemory.get(), 0));
+ VK_CHECK(vk.bindImageMemory(*m_deviceGroup, *renderImage, renderImageMemory.get(), 0));
+ VK_CHECK(vk.bindImageMemory(*m_deviceGroup, *readImage, readImageMemory.get(), 0));
// Create renderpass
{
@@ -1186,7 +1195,7 @@
VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO, // sType
&devGroupBindInfo, // pNext
*renderImage, // image
- imageMemory.get(), // memory
+ renderImageMemory.get(), // memory
0u, // memoryOffset
};
VK_CHECK(vk.bindImageMemory2(*m_deviceGroup, 1, &bindInfo));
@@ -1475,7 +1484,7 @@
VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO, // sType
&devGroupBindInfo, // pNext
peerImage.get(), // image
- imageMemory.get(), // memory
+ renderImageMemory.get(), // memory
0u, // memoryOffset
};
VK_CHECK(vk.bindImageMemory2(*m_deviceGroup, 1, &bindInfo));