mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-23 07:30:30 +01:00
spirv,nir: emit saturating float8 cmat convert
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35434>
This commit is contained in:
parent
d0ac1cfb0d
commit
30ec9ed1cf
2 changed files with 4 additions and 2 deletions
|
|
@ -1358,7 +1358,7 @@ intrinsic("cmat_load", src_comp=[-1, -1, 1], indices=[MATRIX_LAYOUT])
|
|||
intrinsic("cmat_store", src_comp=[-1, -1, 1], indices=[MATRIX_LAYOUT])
|
||||
intrinsic("cmat_length", src_comp=[], dest_comp=1, indices=[CMAT_DESC], bit_sizes=[32])
|
||||
intrinsic("cmat_muladd", src_comp=[-1, -1, -1, -1], indices=[SATURATE, CMAT_SIGNED_MASK])
|
||||
intrinsic("cmat_convert", src_comp=[-1, -1], indices=[CMAT_SIGNED_MASK])
|
||||
intrinsic("cmat_convert", src_comp=[-1, -1], indices=[SATURATE, CMAT_SIGNED_MASK])
|
||||
intrinsic("cmat_unary_op", src_comp=[-1, -1], indices=[ALU_OP])
|
||||
intrinsic("cmat_binary_op", src_comp=[-1, -1, -1], indices=[ALU_OP])
|
||||
intrinsic("cmat_scalar_op", src_comp=[-1, -1, -1], indices=[ALU_OP])
|
||||
|
|
|
|||
|
|
@ -201,6 +201,7 @@ vtn_handle_cooperative_alu(struct vtn_builder *b, struct vtn_value *dest_val,
|
|||
case SpvOpFConvert: {
|
||||
struct vtn_type *dst_type = vtn_get_type(b, w[1]);
|
||||
nir_deref_instr *src = vtn_get_cmat_deref(b, w[3]);
|
||||
struct vtn_value *dest_val = vtn_untyped_value(b, w[2]);
|
||||
|
||||
/* The Convert operations define whether integers are interpreted
|
||||
* as signed or unsigned regardless of their original type. So take
|
||||
|
|
@ -210,9 +211,10 @@ vtn_handle_cooperative_alu(struct vtn_builder *b, struct vtn_value *dest_val,
|
|||
(vtn_convert_op_src_type(opcode) == nir_type_int ? NIR_CMAT_A_SIGNED : 0) |
|
||||
(vtn_convert_op_dst_type(opcode) == nir_type_int ? NIR_CMAT_RESULT_SIGNED : 0);
|
||||
|
||||
const bool saturate = vtn_has_decoration(b, dest_val, SpvDecorationSaturatedToLargestFloat8NormalConversionEXT);
|
||||
|
||||
nir_deref_instr *dst = vtn_create_cmat_temporary(b, dst_type->type, "cmat_convert");
|
||||
nir_cmat_convert(&b->nb, &dst->def, &src->def, .cmat_signed_mask = signed_mask);
|
||||
nir_cmat_convert(&b->nb, &dst->def, &src->def, .saturate = saturate, .cmat_signed_mask = signed_mask);
|
||||
vtn_push_var_ssa(b, w[2], dst->var);
|
||||
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue