gallivm: fix texel fetch for array textures (2)
authorRoland Scheidegger <sroland@vmware.com>
Fri, 14 Dec 2012 20:17:05 +0000 (21:17 +0100)
committerRoland Scheidegger <sroland@vmware.com>
Mon, 17 Dec 2012 10:50:27 +0000 (11:50 +0100)
a460aea3f14222af46f88d1bc686f82180b8a872 wasn't entirely correct,
since all coords are already ints hence need to skip the iround.
Passes piglit texelFetch with sampler1DArray/sampler2DArray.

Reviewed-by: Dave Airlie <airlied@redhat.com>
src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c

index 6839478171df49d03b871f0d02d1db224db4dc2a..f1d2f513661003091389e3c6c1022781336fc0ea 100644 (file)
@@ -984,7 +984,6 @@ lp_build_layer_coord(struct lp_build_sample_context *bld,
 {
    LLVMValueRef maxlayer;
 
-   layer = lp_build_iround(&bld->coord_bld, layer);
    maxlayer = bld->dynamic_state->depth(bld->dynamic_state,
                                         bld->gallivm, unit);
    maxlayer = lp_build_sub(&bld->int_bld, maxlayer, bld->int_bld.one);
@@ -1041,9 +1040,11 @@ lp_build_sample_common(struct lp_build_sample_context *bld,
       derivs = &face_derivs;
    }
    else if (target == PIPE_TEXTURE_1D_ARRAY) {
-      *r = lp_build_layer_coord(bld, unit, *t);
+      *r = lp_build_iround(&bld->coord_bld, *t);
+      *r = lp_build_layer_coord(bld, unit, *r);
    }
    else if (target == PIPE_TEXTURE_2D_ARRAY) {
+      *r = lp_build_iround(&bld->coord_bld, *r);
       *r = lp_build_layer_coord(bld, unit, *r);
    }