[Mesa-dev] [PATCH] gallivm: fix lp_build_compare_ext

Vinson Lee vlee at freedesktop.org
Fri Jul 3 23:15:49 PDT 2015


On Fri, Jul 3, 2015 at 6:05 PM,  <sroland at vmware.com> wrote:
> From: Roland Scheidegger <sroland at vmware.com>
>
> The expansion should always be to the same width as the input arguments
> no matter what, since these functions should work with any bit width of
> the arguments (the sext is a no-op on any sane simd architecture).
> Thus, fix the caller expecting differently.
>
> This fixes https://bugs.freedesktop.org/show_bug.cgi?id=91222 (not tested
> otherwise)
> ---
>  src/gallium/auxiliary/gallivm/lp_bld_logic.c       | 2 +-
>  src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c | 3 +++
>  2 files changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_logic.c b/src/gallium/auxiliary/gallivm/lp_bld_logic.c
> index f724cfa..80b53e5 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_logic.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_logic.c
> @@ -81,7 +81,7 @@ lp_build_compare_ext(struct gallivm_state *gallivm,
>                       boolean ordered)
>  {
>     LLVMBuilderRef builder = gallivm->builder;
> -   LLVMTypeRef int_vec_type = lp_build_int_vec_type(gallivm, lp_type_int_vec(32, 32 * type.length));
> +   LLVMTypeRef int_vec_type = lp_build_int_vec_type(gallivm, type);
>     LLVMValueRef zeros = LLVMConstNull(int_vec_type);
>     LLVMValueRef ones = LLVMConstAllOnes(int_vec_type);
>     LLVMValueRef cond;
> diff --git a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c
> index 1f2af85..0ad78b0 100644
> --- a/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c
> +++ b/src/gallium/auxiliary/gallivm/lp_bld_tgsi_action.c
> @@ -1961,8 +1961,11 @@ dset_emit_cpu(
>     struct lp_build_emit_data * emit_data,
>     unsigned pipe_func)
>  {
> +   LLVMBuilderRef builder = bld_base->base.gallivm->builder;
>     LLVMValueRef cond = lp_build_cmp(&bld_base->dbl_bld, pipe_func,
>                                      emit_data->args[0], emit_data->args[1]);
> +   /* arguments were 64 bit but store as 32 bit */
> +   cond = LLVMBuildTrunc(builder, cond, bld_base->int_bld.int_vec_type, "");
>     emit_data->output[emit_data->chan] = cond;
>  }
>
> --
> 1.9.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Tested-by: Vinson Lee <vlee at freedesktop.org>


More information about the mesa-dev mailing list