Merge vk-gl-cts/vulkan-cts-1.1.5 into vk-gl-cts/vulkan-cts-1.1.6
authorAlexander Galazin <alexander.galazin@arm.com>
Wed, 16 Oct 2019 13:00:14 +0000 (15:00 +0200)
committerAlexander Galazin <alexander.galazin@arm.com>
Wed, 16 Oct 2019 13:00:14 +0000 (15:00 +0200)
Change-Id: I3b96cb8cde6cbfc585d717a94f2164739887726f

external/vulkancts/framework/vulkan/vkPrograms.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationSignalOrderTests.cpp

index a77e403..242cacb 100644 (file)
@@ -251,7 +251,7 @@ vk::ProgramBinary* shadercacheLoad (const std::string& shaderstring, const char*
        deUint8*                bin                     = 0;
        char*                   source          = 0;
        deBool                  ok                      = true;
-       deBool                  diff;
+       deBool                  diff            = true;
        cacheFileMutex.lock();
 
        if (cacheFileIndex.count(hash) == 0)
@@ -279,8 +279,8 @@ vk::ProgramBinary* shadercacheLoad (const std::string& shaderstring, const char*
                        source = new char[sourcelength + 1];
                        ok = fread(source, 1, sourcelength, file)                               == (size_t)sourcelength;
                        source[sourcelength] = 0;
+                       diff = shaderstring != std::string(source);
                }
-               diff = shaderstring != std::string(source);
                if (!ok || diff)
                {
                        // Mismatch, but may still exist in cache if there were hash collisions
index 99b488f..c20bbb3 100644 (file)
@@ -704,12 +704,17 @@ public:
                DE_ASSERT(stageBits.size() == iterations.size());
                DE_ASSERT(semaphoreHandlesA.size() == iterations.size());
 
-               // Record all read operations into a single command buffer.
+               // Record all read operations into a single command buffer and record the union of their stage masks.
+               VkPipelineStageFlags readStages = 0;
                ptrCmdBufferB = makeVkSharedPtr(makeCommandBuffer(vkB, *deviceB, *cmdPoolB));
                cmdBufferB = **(ptrCmdBufferB);
                beginCommandBuffer(vkB, cmdBufferB);
                for (deUint32 iterIdx = 0; iterIdx < iterations.size(); iterIdx++)
-                       iterations[iterIdx].readOp->recordCommands(cmdBufferB);
+               {
+                       QueueSubmitOrderSharedIteration& iter = iterations[iterIdx];
+                       readStages |= iter.readOp->getInSyncInfo().stageMask;
+                       iter.readOp->recordCommands(cmdBufferB);
+               }
                endCommandBuffer(vkB, cmdBufferB);
 
                // Export the last semaphore for use on deviceB and create another semaphore to signal on deviceB.
@@ -787,7 +792,7 @@ public:
                                &timelineSubmitInfo : DE_NULL,                                                  // const void*                                  pNext;
                                1u,                                                                                                             // deUint32                                             waitSemaphoreCount;
                                &semaphoreHandlesB.front(),                                                             // const VkSemaphore*                   pWaitSemaphores;
-                               &stageBits[0],                                                                                  // const VkPipelineStageFlags*  pWaitDstStageMask;
+                               &readStages,                                                                                    // const VkPipelineStageFlags*  pWaitDstStageMask;
                                1u,                                                                                                             // deUint32                                             commandBufferCount;
                                &cmdBufferB,                                                                                    // const VkCommandBuffer*               pCommandBuffers;
                                1u,                                                                                                             // deUint32                                             signalSemaphoreCount;
@@ -1340,12 +1345,17 @@ public:
                DE_ASSERT(stageBits.size() == iterations.size());
                DE_ASSERT(semaphoreHandlesA.size() == iterations.size());
 
-               // Record all read operations into a single command buffer.
+               // Record all read operations into a single command buffer and track the union of their execution stages.
+               VkPipelineStageFlags readStages = 0;
                ptrCmdBufferB = makeVkSharedPtr(makeCommandBuffer(vk, device, *cmdPoolB));
                cmdBufferB = **(ptrCmdBufferB);
                beginCommandBuffer(vk, cmdBufferB);
                for (deUint32 iterIdx = 0; iterIdx < iterations.size(); iterIdx++)
-                       iterations[iterIdx].readOp->recordCommands(cmdBufferB);
+               {
+                       QueueSubmitOrderIteration& iter = iterations[iterIdx];
+                       readStages |= iter.readOp->getInSyncInfo().stageMask;
+                       iter.readOp->recordCommands(cmdBufferB);
+               }
                endCommandBuffer(vk, cmdBufferB);
 
                addSemaphore(vk, device, semaphoresB, semaphoreHandlesB, timelineValuesB, timelineValuesA.back());
@@ -1412,7 +1422,7 @@ public:
                                &timelineSubmitInfo : DE_NULL,                                                  // const void*                                  pNext;
                                1u,                                                                                                             // deUint32                                             waitSemaphoreCount;
                                &semaphoreHandlesA.back(),                                                              // const VkSemaphore*                   pWaitSemaphores;
-                               &stageBits[0],                                                                                  // const VkPipelineStageFlags*  pWaitDstStageMask;
+                               &readStages,                                                                                    // const VkPipelineStageFlags*  pWaitDstStageMask;
                                1u,                                                                                                             // deUint32                                             commandBufferCount;
                                &cmdBufferB,                                                                                    // const VkCommandBuffer*               pCommandBuffers;
                                1u,                                                                                                             // deUint32                                             signalSemaphoreCount;