mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-05 13:20:10 +01:00
gallivm/nir: allow 8/16-bit conversion and comparison.
This adds the convert to 8/16 and support for 8/16 comparsions Acked-by: Roland Scheidegger <sroland@vmware.com>
This commit is contained in:
parent
3adf74f2ef
commit
dac8cb981f
1 changed files with 29 additions and 3 deletions
|
|
@ -249,7 +249,9 @@ static LLVMValueRef icmp32(struct lp_build_nir_context *bld_base,
|
|||
LLVMBuilderRef builder = bld_base->base.gallivm->builder;
|
||||
struct lp_build_context *i_bld = get_int_bld(bld_base, is_unsigned, src_bit_size);
|
||||
LLVMValueRef result = lp_build_cmp(i_bld, compare, src[0], src[1]);
|
||||
if (src_bit_size == 64)
|
||||
if (src_bit_size < 32)
|
||||
result = LLVMBuildSExt(builder, result, bld_base->int_bld.vec_type, "");
|
||||
else if (src_bit_size == 64)
|
||||
result = LLVMBuildTrunc(builder, result, bld_base->int_bld.vec_type, "");
|
||||
return result;
|
||||
}
|
||||
|
|
@ -571,8 +573,20 @@ static LLVMValueRef do_alu_action(struct lp_build_nir_context *bld_base,
|
|||
case nir_op_i2f64:
|
||||
result = lp_build_int_to_float(&bld_base->dbl_bld, src[0]);
|
||||
break;
|
||||
case nir_op_i2i8:
|
||||
result = LLVMBuildTrunc(builder, src[0], bld_base->int8_bld.vec_type, "");
|
||||
break;
|
||||
case nir_op_i2i16:
|
||||
if (src_bit_size[0] < 16)
|
||||
result = LLVMBuildSExt(builder, src[0], bld_base->int16_bld.vec_type, "");
|
||||
else
|
||||
result = LLVMBuildTrunc(builder, src[0], bld_base->int16_bld.vec_type, "");
|
||||
break;
|
||||
case nir_op_i2i32:
|
||||
result = LLVMBuildTrunc(builder, src[0], bld_base->int_bld.vec_type, "");
|
||||
if (src_bit_size[0] < 32)
|
||||
result = LLVMBuildSExt(builder, src[0], bld_base->int_bld.vec_type, "");
|
||||
else
|
||||
result = LLVMBuildTrunc(builder, src[0], bld_base->int_bld.vec_type, "");
|
||||
break;
|
||||
case nir_op_i2i64:
|
||||
result = LLVMBuildSExt(builder, src[0], bld_base->int64_bld.vec_type, "");
|
||||
|
|
@ -688,8 +702,20 @@ static LLVMValueRef do_alu_action(struct lp_build_nir_context *bld_base,
|
|||
case nir_op_u2f64:
|
||||
result = LLVMBuildUIToFP(builder, src[0], bld_base->dbl_bld.vec_type, "");
|
||||
break;
|
||||
case nir_op_u2u8:
|
||||
result = LLVMBuildTrunc(builder, src[0], bld_base->uint8_bld.vec_type, "");
|
||||
break;
|
||||
case nir_op_u2u16:
|
||||
if (src_bit_size[0] < 16)
|
||||
result = LLVMBuildZExt(builder, src[0], bld_base->uint16_bld.vec_type, "");
|
||||
else
|
||||
result = LLVMBuildTrunc(builder, src[0], bld_base->uint16_bld.vec_type, "");
|
||||
break;
|
||||
case nir_op_u2u32:
|
||||
result = LLVMBuildTrunc(builder, src[0], bld_base->uint_bld.vec_type, "");
|
||||
if (src_bit_size[0] < 32)
|
||||
result = LLVMBuildZExt(builder, src[0], bld_base->uint_bld.vec_type, "");
|
||||
else
|
||||
result = LLVMBuildTrunc(builder, src[0], bld_base->uint_bld.vec_type, "");
|
||||
break;
|
||||
case nir_op_u2u64:
|
||||
result = LLVMBuildZExt(builder, src[0], bld_base->uint64_bld.vec_type, "");
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue