Merge vk-gl-cts/vulkan-cts-1.0.2 into vk-gl-cts/master
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / modules / vulkan / shaderexecutor / vktShaderBuiltinPrecisionTests.cpp
index 8b7c543..f55166c 100644 (file)
 // set this to true to dump even passing results
 #define GLS_LOG_ALL_RESULTS false
 
+enum
+{
+       // Computing reference intervals can take a non-trivial amount of time, especially on
+       // platforms where toggling floating-point rounding mode is slow (emulated arm on x86).
+       // As a workaround watchdog is kept happy by touching it periodically during reference
+       // interval computation.
+       TOUCH_WATCHDOG_VALUE_FREQUENCY  = 4096
+};
+
 namespace vkt
 {
 namespace shaderexecutor
@@ -4489,6 +4498,9 @@ tcu::TestStatus BuiltinPrecisionCaseTestInstance<In, Out>::iterate (void)
                typename Traits<Out0>::IVal     reference0;
                typename Traits<Out1>::IVal     reference1;
 
+               if (valueNdx % (size_t)TOUCH_WATCHDOG_VALUE_FREQUENCY == 0)
+                       m_context.getTestContext().touchWatchdog();
+
                env.lookup(*m_variables.in0) = convert<In0>(fmt, round(fmt, inputs.in0[valueNdx]));
                env.lookup(*m_variables.in1) = convert<In1>(fmt, round(fmt, inputs.in1[valueNdx]));
                env.lookup(*m_variables.in2) = convert<In2>(fmt, round(fmt, inputs.in2[valueNdx]));