Commit 71b58b12 by Chris Forbes

Make shadow compare available in high precision path always

Previously this would only be applied if the format were directly handled in this path. However, we have to support D16_UNORM, which takes the other branch here. Bug: b/129523279 Test: dEQP-VK.texture.shadow.* Change-Id: I96e71c5b13391c0c6829c8c28a5bbd81e52ca79a Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/30648Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com> Tested-by: 's avatarChris Forbes <chrisforbes@google.com> Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
parent e1f51b9e
...@@ -1957,36 +1957,6 @@ namespace sw ...@@ -1957,36 +1957,6 @@ namespace sw
default: default:
UNIMPLEMENTED("Format %d", VkFormat(state.textureFormat)); UNIMPLEMENTED("Format %d", VkFormat(state.textureFormat));
} }
if(state.compare != COMPARE_BYPASS)
{
Float4 ref = z;
if(!hasFloatTexture())
{
ref = Min(Max(ref, Float4(0.0f)), Float4(1.0f));
}
Int4 boolean;
switch(state.compare)
{
case COMPARE_LESSEQUAL: boolean = CmpLE(ref, c.x); break;
case COMPARE_GREATEREQUAL: boolean = CmpNLT(ref, c.x); break;
case COMPARE_LESS: boolean = CmpLT(ref, c.x); break;
case COMPARE_GREATER: boolean = CmpNLE(ref, c.x); break;
case COMPARE_EQUAL: boolean = CmpEQ(ref, c.x); break;
case COMPARE_NOTEQUAL: boolean = CmpNEQ(ref, c.x); break;
case COMPARE_ALWAYS: boolean = Int4(-1); break;
case COMPARE_NEVER: boolean = Int4(0); break;
default: ASSERT(false);
}
c.x = As<Float4>(boolean & As<Int4>(Float4(1.0f)));
c.y = Float4(0.0f);
c.z = Float4(0.0f);
c.w = Float4(1.0f);
}
} }
else else
{ {
...@@ -2023,6 +1993,36 @@ namespace sw ...@@ -2023,6 +1993,36 @@ namespace sw
} }
} }
if(state.compare != COMPARE_BYPASS)
{
Float4 ref = z;
if(!hasFloatTexture())
{
ref = Min(Max(ref, Float4(0.0f)), Float4(1.0f));
}
Int4 boolean;
switch(state.compare)
{
case COMPARE_LESSEQUAL: boolean = CmpLE(ref, c.x); break;
case COMPARE_GREATEREQUAL: boolean = CmpNLT(ref, c.x); break;
case COMPARE_LESS: boolean = CmpLT(ref, c.x); break;
case COMPARE_GREATER: boolean = CmpNLE(ref, c.x); break;
case COMPARE_EQUAL: boolean = CmpEQ(ref, c.x); break;
case COMPARE_NOTEQUAL: boolean = CmpNEQ(ref, c.x); break;
case COMPARE_ALWAYS: boolean = Int4(-1); break;
case COMPARE_NEVER: boolean = Int4(0); break;
default: ASSERT(false);
}
c.x = As<Float4>(boolean & As<Int4>(Float4(1.0f)));
c.y = Float4(0.0f);
c.z = Float4(0.0f);
c.w = Float4(1.0f);
}
return c; return c;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment