Fix interpolating z when using FragCoord builtin Z was only being interpolated when the Position builtin is used (which isn't valid for fragment shaders) and/or when there's a depth buffer present. Instead interpolate it when FragCoord is being used. Bug: b/133325267 Tests: dEQP-VK.draw.inverted_depth_ranges.* Change-Id: I0567084b6f7bb054bd864545fa34acc52c8ac3d6 Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/31848 Presubmit-Ready: Nicolas Capens <nicolascapens@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com> Tested-by: Nicolas Capens <nicolascapens@google.com> Reviewed-by: Chris Forbes <chrisforbes@google.com>
diff --git a/src/Device/QuadRasterizer.cpp b/src/Device/QuadRasterizer.cpp index b56a393..9e0d5da 100644 --- a/src/Device/QuadRasterizer.cpp +++ b/src/Device/QuadRasterizer.cpp
@@ -256,7 +256,7 @@ bool QuadRasterizer::interpolateZ() const { - return state.depthTestActive || (spirvShader && spirvShader->hasBuiltinInput(spv::BuiltInPosition)); + return state.depthTestActive || (spirvShader && spirvShader->hasBuiltinInput(spv::BuiltInFragCoord)); } bool QuadRasterizer::interpolateW() const
diff --git a/src/Device/SetupProcessor.cpp b/src/Device/SetupProcessor.cpp index f0c370e..c285905f 100644 --- a/src/Device/SetupProcessor.cpp +++ b/src/Device/SetupProcessor.cpp
@@ -73,7 +73,7 @@ { State state; - bool vPosZW = (context->pixelShader && context->pixelShader->hasBuiltinInput(spv::BuiltInPosition)); + bool vPosZW = (context->pixelShader && context->pixelShader->hasBuiltinInput(spv::BuiltInFragCoord)); state.isDrawPoint = context->isDrawPoint(); state.isDrawLine = context->isDrawLine();
diff --git a/src/Vulkan/libVulkan.cpp b/src/Vulkan/libVulkan.cpp index e21d85d..b07f68a 100644 --- a/src/Vulkan/libVulkan.cpp +++ b/src/Vulkan/libVulkan.cpp
@@ -1990,7 +1990,7 @@ { TRACE("(VkDevice device = %p, uint32_t bindInfoCount = %d, const VkBindImageMemoryInfo* pBindInfos = %p)", device, bindInfoCount, pBindInfos); - + for(uint32_t i = 0; i < bindInfoCount; i++) { if(pBindInfos[i].pNext)