Looks good. Reviewed-by: Zack Rusin <[email protected]>
----- Original Message ----- > From: Roland Scheidegger <[email protected]> > > My previous attempt at doing so double-failed miserably (minification of > zero still gives one, and even if it would not the value was never written > anyway). > While here also rename the confusingly named int_vec bld as we have int vecs > of different sizes, and rename need_nr_mips (as this also changes > out-of-bounds > behavior) to is_sviewinfo too. > --- > src/gallium/auxiliary/draw/draw_llvm_sample.c | 4 +-- > src/gallium/auxiliary/gallivm/lp_bld_sample.h | 2 +- > src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c | 34 > ++++++++++----------- > src/gallium/drivers/llvmpipe/lp_tex_sample.c | 4 +-- > 4 files changed, 22 insertions(+), 22 deletions(-) > > diff --git a/src/gallium/auxiliary/draw/draw_llvm_sample.c > b/src/gallium/auxiliary/draw/draw_llvm_sample.c > index f10cba3..97b0255 100644 > --- a/src/gallium/auxiliary/draw/draw_llvm_sample.c > +++ b/src/gallium/auxiliary/draw/draw_llvm_sample.c > @@ -271,7 +271,7 @@ draw_llvm_sampler_soa_emit_size_query(const struct > lp_build_sampler_soa *base, > struct lp_type type, > unsigned texture_unit, > unsigned target, > - boolean need_nr_mips, > + boolean is_sviewinfo, > boolean scalar_lod, > LLVMValueRef explicit_lod, /* optional > */ > LLVMValueRef *sizes_out) > @@ -286,7 +286,7 @@ draw_llvm_sampler_soa_emit_size_query(const struct > lp_build_sampler_soa *base, > type, > texture_unit, > target, > - need_nr_mips, > + is_sviewinfo, > scalar_lod, > explicit_lod, > sizes_out); > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample.h > b/src/gallium/auxiliary/gallivm/lp_bld_sample.h > index db3ea1d..75e8c59 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_sample.h > +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample.h > @@ -498,7 +498,7 @@ lp_build_size_query_soa(struct gallivm_state *gallivm, > struct lp_type int_type, > unsigned texture_unit, > unsigned target, > - boolean need_nr_mips, > + boolean is_viewinfo, > boolean scalar_lod, > LLVMValueRef explicit_lod, > LLVMValueRef *sizes_out); > diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c > b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c > index e403ac8..65d6e7b 100644 > --- a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c > +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c > @@ -1944,7 +1944,7 @@ lp_build_size_query_soa(struct gallivm_state *gallivm, > struct lp_type int_type, > unsigned texture_unit, > unsigned target, > - boolean need_nr_mips, > + boolean is_sviewinfo, > boolean scalar_lod, > LLVMValueRef explicit_lod, > LLVMValueRef *sizes_out) > @@ -1954,7 +1954,7 @@ lp_build_size_query_soa(struct gallivm_state *gallivm, > int dims, i; > boolean has_array; > unsigned num_lods = 1; > - struct lp_build_context bld_int_vec; > + struct lp_build_context bld_int_vec4; > > /* > * Do some sanity verification about bound texture and shader dcl target. > @@ -1997,24 +1997,19 @@ lp_build_size_query_soa(struct gallivm_state > *gallivm, > > assert(!int_type.floating); > > - lp_build_context_init(&bld_int_vec, gallivm, lp_type_int_vec(32, 128)); > + lp_build_context_init(&bld_int_vec4, gallivm, lp_type_int_vec(32, 128)); > > if (explicit_lod) { > /* FIXME: this needs to honor per-element lod */ > lod = LLVMBuildExtractElement(gallivm->builder, explicit_lod, > lp_build_const_int32(gallivm, 0), ""); > first_level = dynamic_state->first_level(dynamic_state, gallivm, > texture_unit); > level = LLVMBuildAdd(gallivm->builder, lod, first_level, "level"); > - lod = lp_build_broadcast_scalar(&bld_int_vec, level); > + lod = lp_build_broadcast_scalar(&bld_int_vec4, level); > } else { > - lod = bld_int_vec.zero; > + lod = bld_int_vec4.zero; > } > > - if (need_nr_mips) { > - size = bld_int_vec.zero; > - } > - else { > - size = bld_int_vec.undef; > - } > + size = bld_int_vec4.undef; > > size = LLVMBuildInsertElement(gallivm->builder, size, > dynamic_state->width(dynamic_state, > gallivm, texture_unit), > @@ -2032,7 +2027,7 @@ lp_build_size_query_soa(struct gallivm_state *gallivm, > lp_build_const_int32(gallivm, 2), ""); > } > > - size = lp_build_minify(&bld_int_vec, size, lod); > + size = lp_build_minify(&bld_int_vec4, size, lod); > > if (has_array) > size = LLVMBuildInsertElement(gallivm->builder, size, > @@ -2044,7 +2039,7 @@ lp_build_size_query_soa(struct gallivm_state *gallivm, > * if level is out of bounds (note this can't cover unbound texture > * here, which also requires returning zero). > */ > - if (explicit_lod && need_nr_mips) { > + if (explicit_lod && is_sviewinfo) { > LLVMValueRef last_level, out, out1; > struct lp_build_context leveli_bld; > > @@ -2056,25 +2051,30 @@ lp_build_size_query_soa(struct gallivm_state > *gallivm, > out1 = lp_build_cmp(&leveli_bld, PIPE_FUNC_GREATER, level, > last_level); > out = lp_build_or(&leveli_bld, out, out1); > if (num_lods == 1) { > - out = lp_build_broadcast_scalar(&bld_int_vec, out); > + out = lp_build_broadcast_scalar(&bld_int_vec4, out); > } > else { > /* TODO */ > assert(0); > } > - size = lp_build_andnot(&bld_int_vec, size, out); > + size = lp_build_andnot(&bld_int_vec4, size, out); > } > for (i = 0; i < dims + (has_array ? 1 : 0); i++) { > - sizes_out[i] = lp_build_extract_broadcast(gallivm, bld_int_vec.type, > int_type, > + sizes_out[i] = lp_build_extract_broadcast(gallivm, bld_int_vec4.type, > int_type, > size, > lp_build_const_int32(gallivm, > i)); > } > + if (is_sviewinfo) { > + for (; i < 4; i++) { > + sizes_out[i] = lp_build_const_vec(gallivm, int_type, 0.0); > + } > + } > > /* > * if there's no explicit_lod (buffers, rects) queries requiring nr of > * mips would be illegal. > */ > - if (need_nr_mips && explicit_lod) { > + if (is_sviewinfo && explicit_lod) { > struct lp_build_context bld_int_scalar; > LLVMValueRef num_levels; > lp_build_context_init(&bld_int_scalar, gallivm, lp_type_int(32)); > diff --git a/src/gallium/drivers/llvmpipe/lp_tex_sample.c > b/src/gallium/drivers/llvmpipe/lp_tex_sample.c > index 5402de4..68a4be9 100644 > --- a/src/gallium/drivers/llvmpipe/lp_tex_sample.c > +++ b/src/gallium/drivers/llvmpipe/lp_tex_sample.c > @@ -281,7 +281,7 @@ lp_llvm_sampler_soa_emit_size_query(const struct > lp_build_sampler_soa *base, > struct lp_type type, > unsigned texture_unit, > unsigned target, > - boolean need_nr_mips, > + boolean is_sviewinfo, > boolean scalar_lod, > LLVMValueRef explicit_lod, /* optional > */ > LLVMValueRef *sizes_out) > @@ -296,7 +296,7 @@ lp_llvm_sampler_soa_emit_size_query(const struct > lp_build_sampler_soa *base, > type, > texture_unit, > target, > - need_nr_mips, > + is_sviewinfo, > scalar_lod, > explicit_lod, > sizes_out); > -- > 1.7.9.5 > _______________________________________________ mesa-dev mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-dev
