From f11d4f31270a385b75d658b4a25db209064ebb04 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Wed, 30 Sep 2020 15:09:54 +0200 Subject: [PATCH] ac/llvm: implement nir_op_unpack_half_2x16_split_{x,y} nir_unpack_half_2x16_split_{x,y}_flush_to_zero don't have to be implemented because RADV/LLVM doesn't allow flushing denorms for 16-bit floating point. Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/amd/llvm/ac_nir_to_llvm.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/amd/llvm/ac_nir_to_llvm.c b/src/amd/llvm/ac_nir_to_llvm.c index 60f46e7c374..382befda305 100644 --- a/src/amd/llvm/ac_nir_to_llvm.c +++ b/src/amd/llvm/ac_nir_to_llvm.c @@ -1053,6 +1053,18 @@ static void visit_alu(struct ac_nir_context *ctx, const nir_alu_instr *instr) case nir_op_unpack_half_2x16: result = emit_unpack_half_2x16(&ctx->ac, src[0]); break; + case nir_op_unpack_half_2x16_split_x: { + assert(ac_get_llvm_num_components(src[0]) == 1); + LLVMValueRef tmp = emit_unpack_half_2x16(&ctx->ac, src[0]); + result = LLVMBuildExtractElement(ctx->ac.builder, tmp, ctx->ac.i32_0, ""); + break; + } + case nir_op_unpack_half_2x16_split_y: { + assert(ac_get_llvm_num_components(src[0]) == 1); + LLVMValueRef tmp = emit_unpack_half_2x16(&ctx->ac, src[0]); + result = LLVMBuildExtractElement(ctx->ac.builder, tmp, ctx->ac.i32_1, ""); + break; + } case nir_op_fddx: case nir_op_fddy: case nir_op_fddx_fine: