[Mesa-dev] [PATCH 2/2] llvmpipe: fix txq for 1d/2d arrays.
Jose Fonseca
jfonseca at vmware.com
Sat Dec 8 00:41:48 PST 2012
Both patches look good to me
Reviewed-by: Jose Fonseca <jfonseca at vmware.com>
----- Original Message -----
> From: Dave Airlie <airlied at redhat.com>
>
> Noticed would fail, we were doing two things wrong
>
> a) 1d arrays require the layers in height
> b) minifying the layers field.
>
> Signed-off-by: Dave Airlie <airlied at redhat.com>
> ---
> src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c | 22
> +++++++++++++++++-----
> src/gallium/drivers/llvmpipe/lp_setup.c | 6 +++++-
> 2 files changed, 22 insertions(+), 6 deletions(-)
>
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> index ba265b2..c0389a8 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_soa.c
> @@ -1680,23 +1680,30 @@ lp_build_size_query_soa(struct gallivm_state
> *gallivm,
> {
> LLVMValueRef lod;
> LLVMValueRef size;
> - int dims, i;
> + int dims, i, num_min;
> struct lp_build_context bld_int_vec;
>
> switch (static_state->target) {
> case PIPE_TEXTURE_1D:
> case PIPE_BUFFER:
> - dims = 1;
> + num_min = dims = 1;
> + break;
> + case PIPE_TEXTURE_1D_ARRAY:
> + num_min = 1;
> + dims = 2;
> break;
> case PIPE_TEXTURE_2D:
> case PIPE_TEXTURE_CUBE:
> case PIPE_TEXTURE_RECT:
> - dims = 2;
> + num_min = dims = 2;
> break;
> case PIPE_TEXTURE_3D:
> + num_min = dims = 3;
> + break;
> + case PIPE_TEXTURE_2D_ARRAY:
> + num_min = 2;
> dims = 3;
> break;
> -
> default:
> assert(0);
> return;
> @@ -1723,19 +1730,24 @@ lp_build_size_query_soa(struct gallivm_state
> *gallivm,
> dynamic_state->width(dynamic_state,
> gallivm, unit),
> lp_build_const_int32(gallivm, 0),
> "");
>
> + if (num_min == 1)
> + size = lp_build_minify(&bld_int_vec, size, lod);
> if (dims >= 2) {
> size = LLVMBuildInsertElement(gallivm->builder, size,
> dynamic_state->height(dynamic_state,
> gallivm, unit),
> lp_build_const_int32(gallivm,
> 1), "");
> }
>
> + if (num_min == 2)
> + size = lp_build_minify(&bld_int_vec, size, lod);
> if (dims >= 3) {
> size = LLVMBuildInsertElement(gallivm->builder, size,
> dynamic_state->depth(dynamic_state,
> gallivm, unit),
> lp_build_const_int32(gallivm,
> 2), "");
> }
>
> - size = lp_build_minify(&bld_int_vec, size, lod);
> + if (num_min == 3)
> + size = lp_build_minify(&bld_int_vec, size, lod);
>
> for (i=0; i < dims; i++) {
> sizes_out[i] = lp_build_extract_broadcast(gallivm,
> bld_int_vec.type, int_type,
> diff --git a/src/gallium/drivers/llvmpipe/lp_setup.c
> b/src/gallium/drivers/llvmpipe/lp_setup.c
> index 7d40d8c..3dfe335 100644
> --- a/src/gallium/drivers/llvmpipe/lp_setup.c
> +++ b/src/gallium/drivers/llvmpipe/lp_setup.c
> @@ -678,7 +678,11 @@ lp_setup_set_fragment_sampler_views(struct
> lp_setup_context *setup,
> struct lp_jit_texture *jit_tex;
> jit_tex = &setup->fs.current.jit_context.textures[i];
> jit_tex->width = tex->width0;
> - jit_tex->height = tex->height0;
> + if (tex->target == PIPE_TEXTURE_1D_ARRAY) {
> + jit_tex->height = tex->array_size;
> + } else {
> + jit_tex->height = tex->height0;
> + }
> jit_tex->first_level = view->u.tex.first_level;
> jit_tex->last_level = tex->last_level;
>
> --
> 1.7.11.7
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
More information about the mesa-dev
mailing list