Fix RobustnessVertexAccessInstance bounds check
The bounds check preformed by
VertexAccessInstance::isValueWithinVertexBufferOrZero() needs to round
the value rather than truncating it when encoding it. When
`value * 0x3FFu` is casted to a deUint32 it's possible for the result to
be truncated instead of rounded causing unintended test failures.
Affects: dEQP-VK.robustness.vertex_access.a2b10g10r10_unorm_pack32.draw.vertex_incomplete
Components: Vulkan
VK-GL-CTS issue: 1351
Change-Id: Ib034b3e29fdbbbd4670e2bbdedad07492abf5cd4
(cherry picked from commit fed61233a802b5a8e7f6e634d0ef698e9155a94c)
diff --git a/external/vulkancts/modules/vulkan/robustness/vktRobustnessVertexAccessTests.cpp b/external/vulkancts/modules/vulkan/robustness/vktRobustnessVertexAccessTests.cpp
index 8a445dc..cc64ba1 100644
--- a/external/vulkancts/modules/vulkan/robustness/vktRobustnessVertexAccessTests.cpp
+++ b/external/vulkancts/modules/vulkan/robustness/vktRobustnessVertexAccessTests.cpp
@@ -899,9 +899,9 @@
deUint32 encodedValue;
if (isAlpha)
- encodedValue = deMin32(deUint32(normValue * 0x3u), 0x3u);
+ encodedValue = deMin32(deUint32(deFloatRound(normValue * 0x3u)), 0x3u);
else
- encodedValue = deMin32(deUint32(normValue * 0x3FFu), 0x3FFu);
+ encodedValue = deMin32(deUint32(deFloatRound(normValue * 0x3FFu)), 0x3FFu);
if (encodedValue == 0)
return true;