From 9b113f1b6cee2b08ec0d93a3a34c8c38380b90d4 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 3 Mar 2022 08:53:06 +0100 Subject: [PATCH] aco: implement nir_op_pack_{uint,sint}_2x16 Signed-off-by: Samuel Pitoiset Reviewed-by: Rhys Perry Part-of: --- src/amd/compiler/aco_instruction_selection.cpp | 10 ++++++++++ src/amd/compiler/aco_instruction_selection_setup.cpp | 2 ++ 2 files changed, 12 insertions(+) diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 8928bc0f58e..f9a310896c5 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -3294,6 +3294,16 @@ visit_alu_instr(isel_context* ctx, nir_alu_instr* instr) bld.vop3(opcode, Definition(dst), src0, src1); break; } + case nir_op_pack_uint_2x16: + case nir_op_pack_sint_2x16: { + Temp src = get_alu_src(ctx, instr->src[0], 2); + Temp src0 = emit_extract_vector(ctx, src, 0, v1); + Temp src1 = emit_extract_vector(ctx, src, 1, v1); + aco_opcode opcode = instr->op == nir_op_pack_uint_2x16 ? aco_opcode::v_cvt_pk_u16_u32 + : aco_opcode::v_cvt_pk_i16_i32; + bld.vop3(opcode, Definition(dst), src0, src1); + break; + } case nir_op_unpack_half_2x16_split_x_flush_to_zero: case nir_op_unpack_half_2x16_split_x: { Temp src = get_alu_src(ctx, instr->src[0]); diff --git a/src/amd/compiler/aco_instruction_selection_setup.cpp b/src/amd/compiler/aco_instruction_selection_setup.cpp index 621189a2760..323ea96110a 100644 --- a/src/amd/compiler/aco_instruction_selection_setup.cpp +++ b/src/amd/compiler/aco_instruction_selection_setup.cpp @@ -517,6 +517,8 @@ init_context(isel_context* ctx, nir_shader* shader) case nir_op_pack_half_2x16_split: case nir_op_pack_unorm_2x16: case nir_op_pack_snorm_2x16: + case nir_op_pack_uint_2x16: + case nir_op_pack_sint_2x16: case nir_op_unpack_half_2x16_split_x: case nir_op_unpack_half_2x16_split_y: case nir_op_fddx: