[Mesa-dev] [PATCH] anv: Fix backwards shadow comparisons

Kenneth Graunke kenneth at whitecape.org
Fri Mar 4 06:22:01 UTC 2016


sample_c is backwards from what GL and Vulkan expect.

See intel_state.c in i965.
---
 src/intel/vulkan/genX_state.c | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/src/intel/vulkan/genX_state.c b/src/intel/vulkan/genX_state.c
index 63ea269..e2bd95d 100644
--- a/src/intel/vulkan/genX_state.c
+++ b/src/intel/vulkan/genX_state.c
@@ -184,6 +184,28 @@ static const uint32_t vk_to_gen_compare_op[] = {
    [VK_COMPARE_OP_ALWAYS]                    = PREFILTEROPALWAYS,
 };
 
+/* Vulkan specifies the result of shadow comparisons as:
+ *     1     if   ref <op> texel,
+ *     0     otherwise.
+ *
+ * The hardware does:
+ *     0     if texel <op> ref,
+ *     1     otherwise.
+ *
+ * So, these look a bit strange because there's both a negation
+ * and swapping of the arguments involved.
+ */
+static const uint32_t vk_to_gen_shadow_compare_op[] = {
+   [VK_COMPARE_OP_NEVER]                        = PREFILTEROPALWAYS,
+   [VK_COMPARE_OP_LESS]                         = PREFILTEROPLEQUAL,
+   [VK_COMPARE_OP_EQUAL]                        = PREFILTEROPNOTEQUAL,
+   [VK_COMPARE_OP_LESS_OR_EQUAL]                = PREFILTEROPLESS,
+   [VK_COMPARE_OP_GREATER]                      = PREFILTEROPGEQUAL,
+   [VK_COMPARE_OP_NOT_EQUAL]                    = PREFILTEROPEQUAL,
+   [VK_COMPARE_OP_GREATER_OR_EQUAL]             = PREFILTEROPGREATER,
+   [VK_COMPARE_OP_ALWAYS]                       = PREFILTEROPNEVER,
+};
+
 VkResult genX(CreateSampler)(
     VkDevice                                    _device,
     const VkSamplerCreateInfo*                  pCreateInfo,
@@ -228,7 +250,7 @@ VkResult genX(CreateSampler)(
       .ChromaKeyEnable = 0,
       .ChromaKeyIndex = 0,
       .ChromaKeyMode = 0,
-      .ShadowFunction = vk_to_gen_compare_op[pCreateInfo->compareOp],
+      .ShadowFunction = vk_to_gen_shadow_compare_op[pCreateInfo->compareOp],
       .CubeSurfaceControlMode = OVERRIDE,
 
       .BorderColorPointer = border_color_offset,
-- 
2.7.2



More information about the mesa-dev mailing list