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)