gallivm: fix different handling of [non]normalized coords in linear soa path
authorRoland Scheidegger <sroland@vmware.com>
Wed, 13 Oct 2010 00:34:08 +0000 (02:34 +0200)
committerRoland Scheidegger <sroland@vmware.com>
Wed, 13 Oct 2010 00:35:05 +0000 (02:35 +0200)
There seems to be no reason for it, so do same math for both
(except the scale mul, of course).

src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c

index af3f468..8c03284 100644 (file)
@@ -294,23 +294,13 @@ lp_build_sample_wrap_linear(struct lp_build_sample_context *bld,
          if (bld->static_state->normalized_coords) {
             /* mul by tex size */
             coord = lp_build_mul(coord_bld, coord, length_f);
-            /* clamp to length max */
-            coord = lp_build_min(coord_bld, coord, length_f);
-            /* subtract 0.5 */
-            coord = lp_build_sub(coord_bld, coord, half);
-            /* clamp to [0, length - 0.5] */
-            coord = lp_build_max(coord_bld, coord, coord_bld->zero);
-         }
-         /* XXX this is odd normalized ranges from 0 to length-0.5 after denorm
-            but non-normalized ranges from to 0.5 to length-0.5 after clamp.
-            Is this missing the sub 0.5? */
-         else {
-            LLVMValueRef min, max;
-            /* clamp to [0.5, length - 0.5] */
-            min = half;
-            max = lp_build_sub(coord_bld, length_f, min);
-            coord = lp_build_clamp(coord_bld, coord, min, max);
          }
+         /* clamp to length max */
+         coord = lp_build_min(coord_bld, coord, length_f);
+         /* subtract 0.5 */
+         coord = lp_build_sub(coord_bld, coord, half);
+         /* clamp to [0, length - 0.5] */
+         coord = lp_build_max(coord_bld, coord, coord_bld->zero);
          /* convert to int, compute lerp weight */
          lp_build_ifloor_fract(&abs_coord_bld, coord, &coord0, &weight);
          coord1 = lp_build_add(int_coord_bld, coord0, int_coord_bld->one);