r300/compiler: fake equal/notequal for shadow samplers
authorMarek Olšák <maraeo@gmail.com>
Sat, 8 May 2010 03:26:31 +0000 (05:26 +0200)
committerMarek Olšák <maraeo@gmail.com>
Sat, 8 May 2010 21:03:45 +0000 (23:03 +0200)
This is actually better than a real implementation, which would be useless
due to inaccuracy (I know because I've tried to implement it).

src/mesa/drivers/dri/r300/compiler/radeon_program_tex.c

index f7c54d0fe8110454ad2bb01f7dfbe3f063788b41..53154f7fbb8ea23731e95c34136f1681e2638d82 100644 (file)
@@ -162,6 +162,13 @@ int radeonTransformTEX(
                        inst_mad->U.I.SrcReg[tex].Index = tmp_texsample;
                        inst_mad->U.I.SrcReg[tex].Swizzle = compiler->state.unit[inst->U.I.TexSrcUnit].depth_texture_swizzle;
 
+                       /* Fake EQUAL/NOTEQUAL, it seems to pass some tests suprisingly. */
+                       if (comparefunc == RC_COMPARE_FUNC_EQUAL) {
+                               comparefunc = RC_COMPARE_FUNC_GEQUAL;
+                       } else if (comparefunc == RC_COMPARE_FUNC_NOTEQUAL) {
+                               comparefunc = RC_COMPARE_FUNC_LESS;
+                       }
+
                        /* Recall that SrcReg[0] is r, SrcReg[tex] is tex and:
                         *   LESS:    r  < tex  <=>      -tex+r < 0
                         *   GEQUAL:  r >= tex  <=> not (-tex+r < 0)