Fixes VS num instances assumption
authorMatthew Netsch <quic_mnetsch@quicinc.com>
Fri, 4 Oct 2019 21:09:39 +0000 (17:09 -0400)
committerAlexander Galazin <Alexander.Galazin@arm.com>
Thu, 10 Oct 2019 09:26:50 +0000 (05:26 -0400)
Components: Vulkan
VK-GL-CTS Issue: 2022

Affects:
dEQP-VK.spirv_assembly.instruction.graphics.variable_pointers.graphics.writes*

Change-Id: Ie1d784733774ae357698cf8a5672fcccdb0c1e1e

external/vulkancts/modules/vulkan/spirv_assembly/vktSpvAsmGraphicsShaderTestUtil.cpp

index 92c1edd..e11d221 100644 (file)
@@ -4069,9 +4069,25 @@ TestStatus runAndVerifyDefaultPipeline (Context& context, InstanceContext instan
                        vector<deUint8> expectedBytes;
                        expected->getBytes(expectedBytes);
 
-                       if (deMemCmp(&expectedBytes.front(), outResourceMemories[outputNdx]->getHostPtr(), expectedBytes.size()))
-                               return tcu::TestStatus::fail("Resource returned doesn't match bitwisely with expected");
+                       // Same vertex shader may be executed for multiple times, the output value should be expected value + non-negative integer N
+                       if (instance.customizedStages == VK_SHADER_STAGE_VERTEX_BIT)
+                       {
+                               const size_t numExpectedEntries = expectedBytes.size() / sizeof(float);
+                               const float* expectedFloats     = reinterpret_cast<const float*>(&expectedBytes.front());
+                               const float* outputFloats       = reinterpret_cast<const float*>(outResourceMemories[outputNdx]->getHostPtr());
 
+                               for (size_t expectedNdx = 0; expectedNdx < numExpectedEntries; ++expectedNdx)
+                               {
+                                       float diff = outputFloats[expectedNdx] - expectedFloats[expectedNdx];
+                                       if ((diff < 0) || (deFloatFloor(diff) != diff))
+                                               return tcu::TestStatus::fail("Value returned should be equal to expected value plus non-negative integer");
+                               }
+                       }
+                       else
+                       {
+                               if (deMemCmp(&expectedBytes.front(), outResourceMemories[outputNdx]->getHostPtr(), expectedBytes.size()))
+                                       return tcu::TestStatus::fail("Resource returned doesn't match bitwisely with expected");
+                       }
                }
        }