[Mesa-dev] [PATCH] gallivm: some minor cube map cleanup

sroland at vmware.com sroland at vmware.com
Thu Apr 4 12:37:30 PDT 2013


From: Roland Scheidegger <sroland at vmware.com>

The ar_ge_as_at variable was just very very confusing since the condition
was actually the other way around (as_at_ge_ar). So change the condition
(and the selects depending on it) to match the variable name.
Also, while here, change the chosen major axis in case the coord values
are the same. OpenGL doesn't care one bit which one is chosen in this
case but it looks like dx10 would require z chosen over y, and y chosen
over x (previously did x chosen over y, y chosen over z). Since it's all
the same effort just honor dx10's wishes.
---
 src/gallium/auxiliary/gallivm/lp_bld_sample.c |   21 +++++++++++----------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.c b/src/gallium/auxiliary/gallivm/lp_bld_sample.c
index fe29d25..734cfe0 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_sample.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.c
@@ -1403,12 +1403,13 @@ lp_build_cube_lookup(struct lp_build_sample_context *bld,
       signr = LLVMBuildAnd(builder, ri, signmask, "");
 
       /*
-       * major face determination: select x if x >= y else select y
-       * select previous result if y >= max(x,y) else select z
+       * major face determination: select x if x > y else select y
+       * select z if z >= max(x,y) else select previous result
+       * if some axis are the same we chose z over y, y over x.
        */
-      as_ge_at = lp_build_cmp(coord_bld, PIPE_FUNC_GEQUAL, as, at);
+      as_ge_at = lp_build_cmp(coord_bld, PIPE_FUNC_GREATER, as, at);
       maxasat = lp_build_max(coord_bld, as, at);
-      ar_ge_as_at = lp_build_cmp(coord_bld, PIPE_FUNC_GEQUAL, maxasat, ar);
+      ar_ge_as_at = lp_build_cmp(coord_bld, PIPE_FUNC_GEQUAL, ar, maxasat);
 
       /*
        * compute all possible new s/t coords
@@ -1449,13 +1450,13 @@ lp_build_cube_lookup(struct lp_build_sample_context *bld,
          dmaxtnew = lp_build_select(coord_bld, as_ge_at, dmax[1], dmax[2]);
       }
 
-      *face_s = lp_build_select(cint_bld, ar_ge_as_at, *face_s, snewz);
-      *face_t = lp_build_select(cint_bld, ar_ge_as_at, *face_t, tnewz);
-      ma = lp_build_select(coord_bld, ar_ge_as_at, ma, r);
-      *face = lp_build_select(cint_bld, ar_ge_as_at, *face, facez);
+      *face_s = lp_build_select(cint_bld, ar_ge_as_at, snewz, *face_s);
+      *face_t = lp_build_select(cint_bld, ar_ge_as_at, tnewz, *face_t);
+      ma = lp_build_select(coord_bld, ar_ge_as_at, r, ma);
+      *face = lp_build_select(cint_bld, ar_ge_as_at, facez, *face);
       if (need_derivs) {
-         dmaxsnew = lp_build_select(coord_bld, ar_ge_as_at, dmaxsnew, dmax[0]);
-         dmaxtnew = lp_build_select(coord_bld, ar_ge_as_at, dmaxtnew, dmax[1]);
+         dmaxsnew = lp_build_select(coord_bld, ar_ge_as_at, dmax[0], dmaxsnew);
+         dmaxtnew = lp_build_select(coord_bld, ar_ge_as_at, dmax[1], dmaxtnew);
       }
 
       *face_s = LLVMBuildBitCast(builder, *face_s,
-- 
1.7.9.5



More information about the mesa-dev mailing list