Add VK_ACCESS_SHADER_READ_BIT barrier access bit
authorPiers Daniell <pdaniell@nvidia.com>
Fri, 5 Jan 2018 21:04:29 +0000 (14:04 -0700)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 18 Jan 2018 09:48:26 +0000 (04:48 -0500)
The dEQP-VK.query_pool.statistics_query.compute_shader_invocations.secondary*
tests were missing a VK_ACCESS_SHADER_READ_BIT bit in the
pipeline barrier between compute dispatch calls. Each dispatch
was doing a read-modify-write of the same SSBO locations, but
the test only used the VK_ACCESS_SHADER_WRITE_BIT access bit.
This may cause the compute shader to read stale cache data
since the dependency between each dispatch was not expressed
correctly.

This fix simple adds the missing VK_ACCESS_SHADER_READ_BIT
access bit.

Affects:
dEQP-VK.query_pool.statistics_query.compute_shader_invocations.secondary*

Components: Vulkan

VK-GL-CTS issue: 927

Change-Id: I946d6113c897a03116db7a93a182e27497adfe6f

external/vulkancts/modules/vulkan/query_pool/vktQueryPoolStatisticsTests.cpp

index 7802f74..8db6e06 100644 (file)
@@ -325,15 +325,15 @@ tcu::TestStatus ComputeInvocationsTestInstance::executeTest (const VkCommandPool
        const VkQueue                                           queue                                   = m_context.getUniversalQueue();
        const VkBufferMemoryBarrier                     computeFinishBarrier    =
        {
-               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,        // VkStructureType      sType;
-               DE_NULL,                                                                        // const void*          pNext;
-               VK_ACCESS_SHADER_WRITE_BIT,                                     // VkAccessFlags        srcAccessMask;
-               VK_ACCESS_HOST_READ_BIT,                                        // VkAccessFlags        dstAccessMask;
-               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     srcQueueFamilyIndex;
-               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     destQueueFamilyIndex;
-               buffer->object(),                                                       // VkBuffer                     buffer;
-               0ull,                                                                           // VkDeviceSize         offset;
-               bufferSizeBytes,                                                        // VkDeviceSize         size;
+               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,                                        // VkStructureType      sType;
+               DE_NULL,                                                                                                        // const void*          pNext;
+               VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,         // VkAccessFlags        srcAccessMask;
+               VK_ACCESS_HOST_READ_BIT,                                                                        // VkAccessFlags        dstAccessMask;
+               VK_QUEUE_FAMILY_IGNORED,                                                                        // deUint32                     srcQueueFamilyIndex;
+               VK_QUEUE_FAMILY_IGNORED,                                                                        // deUint32                     destQueueFamilyIndex;
+               buffer->object(),                                                                                       // VkBuffer                     buffer;
+               0ull,                                                                                                           // VkDeviceSize         offset;
+               bufferSizeBytes,                                                                                        // VkDeviceSize         size;
        };
 
        for(size_t parametersNdx = 0u; parametersNdx < m_parameters.size(); ++parametersNdx)
@@ -443,28 +443,28 @@ tcu::TestStatus ComputeInvocationsSecondaryTestInstance::executeTest (const VkCo
 
        const VkBufferMemoryBarrier                             computeShaderWriteBarrier       =
        {
-               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,        // VkStructureType      sType;
-               DE_NULL,                                                                        // const void*          pNext;
-               VK_ACCESS_SHADER_WRITE_BIT,                                     // VkAccessFlags        srcAccessMask;
-               VK_ACCESS_SHADER_WRITE_BIT,                                     // VkAccessFlags        dstAccessMask;
-               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     srcQueueFamilyIndex;
-               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     destQueueFamilyIndex;
-               buffer->object(),                                                       // VkBuffer                     buffer;
-               0ull,                                                                           // VkDeviceSize         offset;
-               bufferSizeBytes,                                                        // VkDeviceSize         size;
+               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,                                        // VkStructureType      sType;
+               DE_NULL,                                                                                                        // const void*          pNext;
+               VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,         // VkAccessFlags        srcAccessMask;
+               VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,         // VkAccessFlags        dstAccessMask;
+               VK_QUEUE_FAMILY_IGNORED,                                                                        // deUint32                     srcQueueFamilyIndex;
+               VK_QUEUE_FAMILY_IGNORED,                                                                        // deUint32                     destQueueFamilyIndex;
+               buffer->object(),                                                                                       // VkBuffer                     buffer;
+               0ull,                                                                                                           // VkDeviceSize         offset;
+               bufferSizeBytes,                                                                                        // VkDeviceSize         size;
        };
 
        const VkBufferMemoryBarrier                             computeFinishBarrier            =
        {
-               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,        // VkStructureType      sType;
-               DE_NULL,                                                                        // const void*          pNext;
-               VK_ACCESS_SHADER_WRITE_BIT,                                     // VkAccessFlags        srcAccessMask;
-               VK_ACCESS_HOST_READ_BIT,                                        // VkAccessFlags        dstAccessMask;
-               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     srcQueueFamilyIndex;
-               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     destQueueFamilyIndex;
-               buffer->object(),                                                       // VkBuffer                     buffer;
-               0ull,                                                                           // VkDeviceSize         offset;
-               bufferSizeBytes,                                                        // VkDeviceSize         size;
+               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,                                        // VkStructureType      sType;
+               DE_NULL,                                                                                                        // const void*          pNext;
+               VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,         // VkAccessFlags        srcAccessMask;
+               VK_ACCESS_HOST_READ_BIT,                                                                        // VkAccessFlags        dstAccessMask;
+               VK_QUEUE_FAMILY_IGNORED,                                                                        // deUint32                     srcQueueFamilyIndex;
+               VK_QUEUE_FAMILY_IGNORED,                                                                        // deUint32                     destQueueFamilyIndex;
+               buffer->object(),                                                                                       // VkBuffer                     buffer;
+               0ull,                                                                                                           // VkDeviceSize         offset;
+               bufferSizeBytes,                                                                                        // VkDeviceSize         size;
        };
 
        std::vector<VkShaderModuleSp>                   shaderModule;
@@ -601,28 +601,28 @@ tcu::TestStatus ComputeInvocationsSecondaryInheritedTestInstance::executeTest (c
 
        const VkBufferMemoryBarrier                                     computeShaderWriteBarrier               =
        {
-               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,        // VkStructureType      sType;
-               DE_NULL,                                                                        // const void*          pNext;
-               VK_ACCESS_SHADER_WRITE_BIT,                                     // VkAccessFlags        srcAccessMask;
-               VK_ACCESS_SHADER_WRITE_BIT,                                     // VkAccessFlags        dstAccessMask;
-               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     srcQueueFamilyIndex;
-               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     destQueueFamilyIndex;
-               buffer->object(),                                                       // VkBuffer                     buffer;
-               0ull,                                                                           // VkDeviceSize         offset;
-               bufferSizeBytes,                                                        // VkDeviceSize         size;
+               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,                                        // VkStructureType      sType;
+               DE_NULL,                                                                                                        // const void*          pNext;
+               VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,         // VkAccessFlags        srcAccessMask;
+               VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,         // VkAccessFlags        dstAccessMask;
+               VK_QUEUE_FAMILY_IGNORED,                                                                        // deUint32                     srcQueueFamilyIndex;
+               VK_QUEUE_FAMILY_IGNORED,                                                                        // deUint32                     destQueueFamilyIndex;
+               buffer->object(),                                                                                       // VkBuffer                     buffer;
+               0ull,                                                                                                           // VkDeviceSize         offset;
+               bufferSizeBytes,                                                                                        // VkDeviceSize         size;
        };
 
        const VkBufferMemoryBarrier                                     computeFinishBarrier                    =
        {
-               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,        // VkStructureType      sType;
-               DE_NULL,                                                                        // const void*          pNext;
-               VK_ACCESS_SHADER_WRITE_BIT,                                     // VkAccessFlags        srcAccessMask;
-               VK_ACCESS_HOST_READ_BIT,                                        // VkAccessFlags        dstAccessMask;
-               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     srcQueueFamilyIndex;
-               VK_QUEUE_FAMILY_IGNORED,                                        // deUint32                     destQueueFamilyIndex;
-               buffer->object(),                                                       // VkBuffer                     buffer;
-               0ull,                                                                           // VkDeviceSize         offset;
-               bufferSizeBytes,                                                        // VkDeviceSize         size;
+               VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER,                                        // VkStructureType      sType;
+               DE_NULL,                                                                                                        // const void*          pNext;
+               VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT,         // VkAccessFlags        srcAccessMask;
+               VK_ACCESS_HOST_READ_BIT,                                                                        // VkAccessFlags        dstAccessMask;
+               VK_QUEUE_FAMILY_IGNORED,                                                                        // deUint32                     srcQueueFamilyIndex;
+               VK_QUEUE_FAMILY_IGNORED,                                                                        // deUint32                     destQueueFamilyIndex;
+               buffer->object(),                                                                                       // VkBuffer                     buffer;
+               0ull,                                                                                                           // VkDeviceSize         offset;
+               bufferSizeBytes,                                                                                        // VkDeviceSize         size;
        };
 
        std::vector<VkShaderModuleSp>                           shaderModule;