From: Mohd Faisal Date: Wed, 13 Oct 2021 14:09:01 +0000 (+0100) Subject: Fix missing self-subpass dependency X-Git-Tag: upstream/1.3.5~274^2~7^2~2^2^2~1^2^2~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=58173e77144d3b875d5fc9c32c7ffc4e86ae081c;p=platform%2Fupstream%2FVK-GL-CTS.git Fix missing self-subpass dependency Self-subpass dependency required for read-after-write operation, in test cases where the attachment is written using load-op-load at the start of subpass and then the values are read inside the fragment shader. Affects: dEQP- VK.renderpass.suballocation.subpass_dependencies.separate_channels.* dEQP- VK.renderpass2.suballocation.subpass_dependencies.separate_channels.* Components: Vulkan VK-GL-CTS issue: 3216 Change-Id: I6c72b81dccfb7526ec4607b255ff4872b13c4d22 (cherry picked from commit 305ee4bd7e5b372b2c910b615a146f2aa4416527) --- diff --git a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassSubpassDependencyTests.cpp b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassSubpassDependencyTests.cpp index bbebbfb..9de3bd2 100644 --- a/external/vulkancts/modules/vulkan/renderpass/vktRenderPassSubpassDependencyTests.cpp +++ b/external/vulkancts/modules/vulkan/renderpass/vktRenderPassSubpassDependencyTests.cpp @@ -2559,8 +2559,15 @@ tcu::TestStatus SeparateChannelsTestInstance::iterateInternal (void) } const vector subpasses (1, Subpass(VK_PIPELINE_BIND_POINT_GRAPHICS, 0u, inputAttachmentReferences, colorAttachmentReferences, vector(), isDSFormat ? dsAttachmentReference : AttachmentReference(VK_ATTACHMENT_UNUSED, VK_IMAGE_LAYOUT_GENERAL), vector())); + vector subpassDependency; + if(!isDSFormat) + { + /* Self supass-dependency */ + subpassDependency.push_back(SubpassDependency(0u, 0u, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_ACCESS_INPUT_ATTACHMENT_READ_BIT, VK_DEPENDENCY_BY_REGION_BIT)); + } + renderPass = createRenderPass(vkd, device, RenderPass(attachments, subpasses, subpassDependency), m_renderPassType); - renderPass = createRenderPass(vkd, device, RenderPass(attachments, subpasses, vector()), m_renderPassType); } // Create render pipeline. @@ -2763,6 +2770,26 @@ tcu::TestStatus SeparateChannelsTestInstance::iterateInternal (void) vkd.cmdBindVertexBuffers(*commandBuffer, 0u, 1u, &vertexBuffer.get(), &bindingOffset); vkd.cmdBindPipeline(*commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *renderPipeline); + + if(!isDSFormat) + { + const VkImageMemoryBarrier imageBarrier = + { + VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; + DE_NULL, // const void* pNext; + VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags srcAccessMask; + VK_ACCESS_INPUT_ATTACHMENT_READ_BIT, // VkAccessFlags dstAccessMask; + VK_IMAGE_LAYOUT_GENERAL, // VkImageLayout oldLayout; + VK_IMAGE_LAYOUT_GENERAL, // VkImageLayout newLayout; + VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; + VK_QUEUE_FAMILY_IGNORED, // deUint32 destQueueFamilyIndex; + *colorImage, // VkImage image; + makeImageSubresourceRange(1u, 0u, 1u, 0, 1u) // VkImageSubresourceRange subresourceRange; + }; + vkd.cmdPipelineBarrier(*commandBuffer, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT, + VK_DEPENDENCY_BY_REGION_BIT, 0u, DE_NULL, 0u, DE_NULL, 1u, &imageBarrier); + } + vkd.cmdDraw(*commandBuffer, 4u, 1u, 0u, 0u); RenderpassSubpass::cmdEndRenderPass(vkd, *commandBuffer, &subpassEndInfo);