----- Original Message ----- > From: Roland Scheidegger <srol...@vmware.com> > > Inserting the value for the second quad in the wrong place for the > following shuffle. This meant the row or image stride was undefined which is > quite catastrophic, can lead to bogus texels fetched or just segfault. > This code is only hit for SoA path currently, still surprising it > didn't crash more or caused more visible issues (I think llvm used a > broadcast shuffle for the undefined parts of the vector, hence the undefined > value for the second quad was just the same as that from the first quad, > so as long as both quads hit the same mip level everything was fine, and > since > lower mips always have the same large stride it made it less likely to > hit out-of-bound memory in case of differing lods). > > Note: this is a candidate for release branches. > --- > src/gallium/auxiliary/gallivm/lp_bld_sample.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.c > b/src/gallium/auxiliary/gallivm/lp_bld_sample.c > index 7f44c4e..f885363 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_sample.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.c > @@ -934,7 +934,7 @@ lp_build_get_level_stride_vec(struct > lp_build_sample_context *bld, > stride = bld->int_coord_bld.undef; > for (i = 0; i < bld->num_lods; i++) { > LLVMValueRef indexi = lp_build_const_int32(bld->gallivm, i); > - LLVMValueRef indexo = lp_build_const_int32(bld->gallivm, i); > + LLVMValueRef indexo = lp_build_const_int32(bld->gallivm, 4 * i); > indexes[1] = LLVMBuildExtractElement(builder, level, indexi, ""); > stride1 = LLVMBuildGEP(builder, stride_array, indexes, 2, ""); > stride1 = LLVMBuildLoad(builder, stride1, ""); > -- > 1.7.9.5 >
Reviewed-by: Jose Fonseca <jfons...@vmware.com> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev