summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Forbes <[email protected]>2014-04-12 22:32:21 +1200
committerChris Forbes <[email protected]>2014-04-13 08:51:46 +1200
commit26224d3e00cb00e45145d4fd22cd7495eecad9e1 (patch)
treec036541b0153e83d02132ace11649026c11c9e92
parent857f3a68ea7370d1db2ef5faca181a36ada7d49d (diff)
i965: Add comment to explain the weird-looking shadow compares.
This always looks crazy when I stumble across it, until I remember what the hardware is doing. Describing it ought to short-circuit that process next time :) V2: Fix indents to 6 spaces, not 7. Signed-off-by: Chris Forbes <[email protected]> Reviewed-by: Kenneth Graunke <[email protected]>
-rw-r--r--src/mesa/drivers/dri/i965/intel_state.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/mesa/drivers/dri/i965/intel_state.c b/src/mesa/drivers/dri/i965/intel_state.c
index bfc35d82f2a..99e75cb1a4d 100644
--- a/src/mesa/drivers/dri/i965/intel_state.c
+++ b/src/mesa/drivers/dri/i965/intel_state.c
@@ -40,15 +40,26 @@
int
intel_translate_shadow_compare_func(GLenum func)
{
+ /* GL 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.
+ */
switch (func) {
case GL_NEVER:
- return BRW_COMPAREFUNCTION_ALWAYS;
+ return BRW_COMPAREFUNCTION_ALWAYS;
case GL_LESS:
- return BRW_COMPAREFUNCTION_LEQUAL;
+ return BRW_COMPAREFUNCTION_LEQUAL;
case GL_LEQUAL:
- return BRW_COMPAREFUNCTION_LESS;
+ return BRW_COMPAREFUNCTION_LESS;
case GL_GREATER:
- return BRW_COMPAREFUNCTION_GEQUAL;
+ return BRW_COMPAREFUNCTION_GEQUAL;
case GL_GEQUAL:
return BRW_COMPAREFUNCTION_GREATER;
case GL_NOTEQUAL:
@@ -56,7 +67,7 @@ intel_translate_shadow_compare_func(GLenum func)
case GL_EQUAL:
return BRW_COMPAREFUNCTION_NOTEQUAL;
case GL_ALWAYS:
- return BRW_COMPAREFUNCTION_NEVER;
+ return BRW_COMPAREFUNCTION_NEVER;
}
assert(!"Invalid shadow comparison function.");