Mesa (master): gallivm: fix up out-of-bounds level when using conformant out-of-bound behavior

Roland Scheidegger sroland at kemper.freedesktop.org
Wed Jul 30 23:34:53 UTC 2014


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

Author: Roland Scheidegger <sroland at vmware.com>
Date:   Wed Jul 30 05:07:20 2014 +0200

gallivm: fix up out-of-bounds level when using conformant out-of-bound behavior

When using (d3d10) conformant out-of-bound behavior for texel fetching
(currently always enabled) the level still needs to be set to a safe value
even though the offset in the end won't get used because the level is used
to look up the mip offset itself and the actual strides, which might otherwise
crash.
For simplicity, we'll use level 0 in this case (this ought to be safe, llvmpipe
does not actually fill in level 0 information if first_level is larger, but
some random strides / offsets shouldn't hurt as ultimately we always use
offset 0 in this case).
Fixes a crash in some in-house test where random huge levels appear in
lp_build_fetch_texel() (the test actually uses level 0 always but if the
fetching happens in a block with a execution mask random values may appear).

CC: <mesa-stable at lists.freedesktop.org>

Reviewed-by: Jose Fonseca <jfonseca at vmware.com>

---

 src/gallium/auxiliary/gallivm/lp_bld_sample.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.c b/src/gallium/auxiliary/gallivm/lp_bld_sample.c
index aeecba8..f1bf285 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_sample.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.c
@@ -927,6 +927,7 @@ lp_build_nearest_mip_level(struct lp_build_sample_context *bld,
                                                                 bld->int_coord_bld.type,
                                                                 out);
       }
+      level = lp_build_andnot(&bld->int_coord_bld, level, *out_of_bounds);
       *level_out = level;
    }
    else {




More information about the mesa-commit mailing list