Add missing barrier to fix multi-core issue
authorEmmanuel Tanguy <emmanuel.tanguy@broadcom.com>
Fri, 7 Jan 2022 10:21:00 +0000 (10:21 +0000)
committerMatthew Netsch <quic_mnetsch@quicinc.com>
Fri, 14 Jan 2022 17:22:48 +0000 (17:22 +0000)
Adding missing barrier between clear and the first compute job

Components: Vulkan

VK-GL-CTS Issue: 3430

Affects:
dEQP-VK.subgroups.multiple_dispatches.uniform_subgroup_size

Change-Id: I1ee309e84d249132c1bf7c04207fdf00907391f1

external/vulkancts/modules/vulkan/subgroups/vktSubgroupsMultipleDispatchesUniformSubgroupSizeTests.cpp

index 32d2643..28cef8a 100644 (file)
@@ -191,6 +191,10 @@ tcu::TestStatus MultipleDispatchesUniformSubgroupSizeInstance::iterate (void)
                        // Clears the values written on the previous iteration.
                        vk.cmdFillBuffer(*cmdBuffer, *resultBuffer, 0u, VK_WHOLE_SIZE, 0);
 
+                       const auto                                                              fillBarrier                             = makeBufferMemoryBarrier(VK_ACCESS_TRANSFER_WRITE_BIT, VK_ACCESS_SHADER_WRITE_BIT, *resultBuffer, 0ull, bufferSize);
+                       vk.cmdPipelineBarrier(*cmdBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT, (VkDependencyFlags) 0,
+                                                                 0, (const VkMemoryBarrier *) DE_NULL, 1, &fillBarrier, 0, (const VkImageMemoryBarrier *) DE_NULL);
+
                        const deUint32                                                  zero                                    = 0u;
                        vk.cmdBindDescriptorSets(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *computePipelineLayout, 0u, 1u, &descriptorSet.get(), 1, &zero);
                        vk.cmdBindPipeline(*cmdBuffer, VK_PIPELINE_BIND_POINT_COMPUTE, *computePipeline);