More vertex-invocation fixes for synchronisation tests
authorGraeme Leese <gleese@broadcom.com>
Fri, 20 Mar 2020 13:30:31 +0000 (13:30 +0000)
committerGraeme Leese <gleese@broadcom.com>
Fri, 20 Mar 2020 14:22:35 +0000 (14:22 +0000)
The fix for multiple vertex-shader instances was missed when the
timeline semaphore version of these tests was added. This is the fix
from https://gerrit.khronos.org/c/4451 applied to these new tests.

Components: Vulkan
VK-GL-CTS issue: 2253, 1958
Affects: dEQP-VK.synchronization.op.*.timeline_semaphore.write_indirect_buffer_draw*

Change-Id: I6013ef88a0acd362948c179416928c1d3fc064dd

external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationMultiQueueTests.cpp
external/vulkancts/modules/vulkan/synchronization/vktSynchronizationOperationSingleQueueTests.cpp

index 642d0bf..4f43c05 100644 (file)
@@ -640,8 +640,19 @@ public:
                        const Data      expected        = m_ops.front()->getData();
                        const Data      actual          = m_ops.back()->getData();
 
-                       if (0 != deMemCmp(expected.data, actual.data, expected.size))
-                               return tcu::TestStatus::fail("Memory contents don't match");
+                       if (isIndirectBuffer(m_resourceDesc.type))
+                       {
+                               const deUint32 expectedValue = reinterpret_cast<const deUint32*>(expected.data)[0];
+                               const deUint32 actualValue   = reinterpret_cast<const deUint32*>(actual.data)[0];
+
+                               if (actualValue < expectedValue)
+                                       return tcu::TestStatus::fail("Counter value is smaller than expected");
+                       }
+                       else
+                       {
+                               if (0 != deMemCmp(expected.data, actual.data, expected.size))
+                                       return tcu::TestStatus::fail("Memory contents don't match");
+                       }
                }
 
                // Make the validation layers happy.
index 64d5920..c5a92a7 100644 (file)
@@ -435,8 +435,19 @@ public:
                        const Data      expected = m_ops.front()->getData();
                        const Data      actual   = m_ops.back()->getData();
 
-                       if (0 != deMemCmp(expected.data, actual.data, expected.size))
-                               return tcu::TestStatus::fail("Memory contents don't match");
+                       if (isIndirectBuffer(m_resources[0]->getType()))
+                       {
+                               const deUint32 expectedValue = reinterpret_cast<const deUint32*>(expected.data)[0];
+                               const deUint32 actualValue   = reinterpret_cast<const deUint32*>(actual.data)[0];
+
+                               if (actualValue < expectedValue)
+                                       return tcu::TestStatus::fail("Counter value is smaller than expected");
+                       }
+                       else
+                       {
+                               if (0 != deMemCmp(expected.data, actual.data, expected.size))
+                                       return tcu::TestStatus::fail("Memory contents don't match");
+                       }
                }
 
                return tcu::TestStatus::pass("OK");