Mesa (master): gallivm: fix lp_build_compare_ext

Roland Scheidegger sroland at kemper.freedesktop.org
Mon Jul 6 21:53:02 UTC 2015


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

Author: Roland Scheidegger <sroland at vmware.com>
Date:   Sat Jul  4 03:03:33 2015 +0200

gallivm: fix lp_build_compare_ext

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

Tested-by: Vinson Lee <vlee at freedesktop.org>
Reviewed-by: Jose Fonseca <jfonseca at vmware.com>

---

 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;
 }
 




More information about the mesa-commit mailing list