Fix early fragment tests validation errors
There are several issues in the tests which were found by running them
with turnip driver with sysmem mode and the validation layers enabled:
- There was a sync issue. The culprit was
srcAccessMask=VK_ACCESS_SHADER_WRITE_BIT in one image memory barrier
since per spec for the store op "For attachments with a depth/stencil
format, this uses the access type
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.". So the correct
synchronization should have src access mask
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT.
- In the same image memory buffer, the image layout was wrong when
testing stencil images.
- There were validation errors related to wrong image layout settings.
VK-GL-CTS issue: 3083
Components: Vulkan
Affects:
dEQP-VK.fragment_operations.early_fragment.*
Signed-off-by: Samuel Iglesias Gonsálvez <siglesias@igalia.com>
Change-Id: If819abd6ccbe23460c4b20b46afeeaf98c7a2953
diff --git a/external/vulkancts/modules/vulkan/fragment_ops/vktFragmentOperationsEarlyFragmentTests.cpp b/external/vulkancts/modules/vulkan/fragment_ops/vktFragmentOperationsEarlyFragmentTests.cpp
index ac154e5..79edf91 100644
--- a/external/vulkancts/modules/vulkan/fragment_ops/vktFragmentOperationsEarlyFragmentTests.cpp
+++ b/external/vulkancts/modules/vulkan/fragment_ops/vktFragmentOperationsEarlyFragmentTests.cpp
@@ -719,9 +719,10 @@
vk.cmdDraw(*cmdBuffer, numVertices, 1u, 0u, 0u);
endRenderPass(vk, *cmdBuffer);
- copyImageToBuffer(vk, *cmdBuffer, *colorImage, *colorBuffer, renderSize, VK_ACCESS_SHADER_WRITE_BIT);
- VkImageAspectFlags dsAspect = m_testMode == MODE_DEPTH ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_STENCIL_BIT;
- copyImageToBuffer(vk, *cmdBuffer, *testImage, *dsBuffer, renderSize, VK_ACCESS_SHADER_WRITE_BIT, VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL, 1u, dsAspect, dsAspect);
+ copyImageToBuffer(vk, *cmdBuffer, *colorImage, *colorBuffer, renderSize, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT);
+ VkImageAspectFlags dsAspect = m_testMode == MODE_DEPTH ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_STENCIL_BIT;
+ VkImageLayout dsImageLayout = m_testMode == MODE_DEPTH ? VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL : VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL;
+ copyImageToBuffer(vk, *cmdBuffer, *testImage, *dsBuffer, renderSize, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, dsImageLayout, 1u, dsAspect, dsAspect);
endCommandBuffer(vk, *cmdBuffer);
submitCommandsAndWait(vk, device, queue, *cmdBuffer);
@@ -1114,7 +1115,7 @@
VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, // VkStructureType sType;
DE_NULL, // const void* pNext;
hasDepthStencil ? 1u : 0u, // deUint32 attachment
- VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, // VkImageLayout layout
+ VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, // VkImageLayout layout
m_testMode == MODE_DEPTH ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_STENCIL_BIT // VkImageAspectFlags aspectMask;
};
@@ -1132,7 +1133,7 @@
VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2, // VkStructureType sType;
DE_NULL, // const void* pNext;
hasDepthStencil ? 3u : 0u, // deUint32 attachment
- VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL, // VkImageLayout layout
+ VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL, // VkImageLayout layout
m_testMode == MODE_DEPTH ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_STENCIL_BIT // VkImageAspectFlags aspectMask;
};