vc4: Clamp the shadow comparison value.
authorEric Anholt <eric@anholt.net>
Mon, 7 Nov 2016 20:25:47 +0000 (12:25 -0800)
committerEric Anholt <eric@anholt.net>
Wed, 9 Nov 2016 23:33:56 +0000 (15:33 -0800)
Fixes piglit glsl-fs-shadow2D-clamp-z.

Cc: <mesa-stable@lists.freedesktop.org>
src/gallium/drivers/vc4/vc4_program.c

index 86f71f68d82bac473410a6cf7e894f4bbd9d2d6a..abd20a5940bbcf86ab78019c33390d4c20857a62 100644 (file)
@@ -495,6 +495,15 @@ ntq_emit_tex(struct vc4_compile *c, nir_tex_instr *instr)
                 struct qreg u0 = qir_uniform_f(c, 0.0f);
                 struct qreg u1 = qir_uniform_f(c, 1.0f);
                 if (c->key->tex[unit].compare_mode) {
+                        /* From the GL_ARB_shadow spec:
+                         *
+                         *     "Let Dt (D subscript t) be the depth texture
+                         *      value, in the range [0, 1].  Let R be the
+                         *      interpolated texture coordinate clamped to the
+                         *      range [0, 1]."
+                         */
+                        compare = qir_SAT(c, compare);
+
                         switch (c->key->tex[unit].compare_func) {
                         case PIPE_FUNC_NEVER:
                                 depth_output = qir_uniform_f(c, 0.0f);