summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRoland Scheidegger <[email protected]>2013-08-20 04:14:24 +0200
committerRoland Scheidegger <[email protected]>2013-08-20 23:00:24 +0200
commit9299128bf297263144654abd0fc596f64dc13436 (patch)
tree3ab8fb7c8965269ac6f795132e7895d9686826da /src
parentfe92d7fab4ee8293fc93ea97680db52342b3b464 (diff)
gallivm: fix bogus aos path detection
Need to check the wrap mode of the actually used coords not a fixed 2. While checking more than necessary would only potentially disable aos and not cause any harm I'm pretty sure for 3d textures it could have caused assertion failures (if s,t coords have simple filter and r not). Reviewed-by: Jose Fonseca <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
index 9f781c55bc5..6d125872844 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
@@ -2034,21 +2034,27 @@ lp_build_sample_soa(struct gallivm_state *gallivm,
LLVMValueRef lod_ipart = NULL, lod_fpart = NULL;
LLVMValueRef ilevel0 = NULL, ilevel1 = NULL;
boolean use_aos = util_format_fits_8unorm(bld.format_desc) &&
- lp_is_simple_wrap_mode(static_sampler_state->wrap_s) &&
- lp_is_simple_wrap_mode(static_sampler_state->wrap_t) &&
/* not sure this is strictly needed or simply impossible */
- static_sampler_state->compare_mode == PIPE_TEX_COMPARE_NONE;
+ static_sampler_state->compare_mode == PIPE_TEX_COMPARE_NONE &&
+ lp_is_simple_wrap_mode(static_sampler_state->wrap_s);
+ if (dims > 1) {
+ use_aos &= lp_is_simple_wrap_mode(static_sampler_state->wrap_t);
+ if (dims > 2) {
+ use_aos &= lp_is_simple_wrap_mode(static_sampler_state->wrap_r);
+ }
+ }
if ((gallivm_debug & GALLIVM_DEBUG_PERF) &&
!use_aos && util_format_fits_8unorm(bld.format_desc)) {
debug_printf("%s: using floating point linear filtering for %s\n",
__FUNCTION__, bld.format_desc->short_name);
- debug_printf(" min_img %d mag_img %d mip %d wraps %d wrapt %d\n",
+ debug_printf(" min_img %d mag_img %d mip %d wraps %d wrapt %d wrapr %d\n",
static_sampler_state->min_img_filter,
static_sampler_state->mag_img_filter,
static_sampler_state->min_mip_filter,
static_sampler_state->wrap_s,
- static_sampler_state->wrap_t);
+ static_sampler_state->wrap_t,
+ static_sampler_state->wrap_r);
}
lp_build_sample_common(&bld, texture_index, sampler_index,