Mesa (master): softpipe: clamp texcoords in sample_compare()

Brian Paul brianp at kemper.freedesktop.org
Tue Mar 8 02:00:31 UTC 2011


Module: Mesa
Branch: master
Commit: 0eef561a5bb10df343837d58d37d5c0d5b708243
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=0eef561a5bb10df343837d58d37d5c0d5b708243

Author: Philip Taylor <excors at gmail.com>
Date:   Mon Mar  7 18:56:51 2011 -0700

softpipe: clamp texcoords in sample_compare()

This fixes http://bugs.freedesktop.org/show_bug.cgi?id=31159 for softpipe
and fixes the piglit depth-tex-compare test.

NOTE: This is a candidate for the 7.10 branch.

Signed-off-by: Brian Paul <brianp at vmware.com>

---

 src/gallium/drivers/softpipe/sp_tex_sample.c |   54 ++++++++++++++-----------
 1 files changed, 30 insertions(+), 24 deletions(-)

diff --git a/src/gallium/drivers/softpipe/sp_tex_sample.c b/src/gallium/drivers/softpipe/sp_tex_sample.c
index 8a4ef93..c09ce19 100644
--- a/src/gallium/drivers/softpipe/sp_tex_sample.c
+++ b/src/gallium/drivers/softpipe/sp_tex_sample.c
@@ -1795,6 +1795,7 @@ sample_compare(struct tgsi_sampler *tgsi_sampler,
    const struct pipe_sampler_state *sampler = samp->sampler;
    int j, k0, k1, k2, k3;
    float val;
+   float pc0, pc1, pc2, pc3;
 
    samp->mip_filter(tgsi_sampler, s, t, p, c0, control, rgba);
 
@@ -1804,43 +1805,48 @@ sample_compare(struct tgsi_sampler *tgsi_sampler,
     * RGBA channels.  We look at the red channel here.
     */
 
+   pc0 = CLAMP(p[0], 0.0F, 1.0F);
+   pc1 = CLAMP(p[1], 0.0F, 1.0F);
+   pc2 = CLAMP(p[2], 0.0F, 1.0F);
+   pc3 = CLAMP(p[3], 0.0F, 1.0F);
+
    /* compare four texcoords vs. four texture samples */
    switch (sampler->compare_func) {
    case PIPE_FUNC_LESS:
-      k0 = p[0] < rgba[0][0];
-      k1 = p[1] < rgba[0][1];
-      k2 = p[2] < rgba[0][2];
-      k3 = p[3] < rgba[0][3];
+      k0 = pc0 < rgba[0][0];
+      k1 = pc1 < rgba[0][1];
+      k2 = pc2 < rgba[0][2];
+      k3 = pc3 < rgba[0][3];
       break;
    case PIPE_FUNC_LEQUAL:
-      k0 = p[0] <= rgba[0][0];
-      k1 = p[1] <= rgba[0][1];
-      k2 = p[2] <= rgba[0][2];
-      k3 = p[3] <= rgba[0][3];
+      k0 = pc0 <= rgba[0][0];
+      k1 = pc1 <= rgba[0][1];
+      k2 = pc2 <= rgba[0][2];
+      k3 = pc3 <= rgba[0][3];
       break;
    case PIPE_FUNC_GREATER:
-      k0 = p[0] > rgba[0][0];
-      k1 = p[1] > rgba[0][1];
-      k2 = p[2] > rgba[0][2];
-      k3 = p[3] > rgba[0][3];
+      k0 = pc0 > rgba[0][0];
+      k1 = pc1 > rgba[0][1];
+      k2 = pc2 > rgba[0][2];
+      k3 = pc3 > rgba[0][3];
       break;
    case PIPE_FUNC_GEQUAL:
-      k0 = p[0] >= rgba[0][0];
-      k1 = p[1] >= rgba[0][1];
-      k2 = p[2] >= rgba[0][2];
-      k3 = p[3] >= rgba[0][3];
+      k0 = pc0 >= rgba[0][0];
+      k1 = pc1 >= rgba[0][1];
+      k2 = pc2 >= rgba[0][2];
+      k3 = pc3 >= rgba[0][3];
       break;
    case PIPE_FUNC_EQUAL:
-      k0 = p[0] == rgba[0][0];
-      k1 = p[1] == rgba[0][1];
-      k2 = p[2] == rgba[0][2];
-      k3 = p[3] == rgba[0][3];
+      k0 = pc0 == rgba[0][0];
+      k1 = pc1 == rgba[0][1];
+      k2 = pc2 == rgba[0][2];
+      k3 = pc3 == rgba[0][3];
       break;
    case PIPE_FUNC_NOTEQUAL:
-      k0 = p[0] != rgba[0][0];
-      k1 = p[1] != rgba[0][1];
-      k2 = p[2] != rgba[0][2];
-      k3 = p[3] != rgba[0][3];
+      k0 = pc0 != rgba[0][0];
+      k1 = pc1 != rgba[0][1];
+      k2 = pc2 != rgba[0][2];
+      k3 = pc3 != rgba[0][3];
       break;
    case PIPE_FUNC_ALWAYS:
       k0 = k1 = k2 = k3 = 1;




More information about the mesa-commit mailing list