From 89dab665614e10cc3ab0db962b8fd7f481214fc8 Mon Sep 17 00:00:00 2001 From: Qiang Yu Date: Thu, 27 Apr 2023 17:01:56 +0800 Subject: [PATCH] aco: implement two load lds ngg intrininsic for radeonsi Reviewed-by: Rhys Perry Signed-off-by: Qiang Yu Part-of: --- src/amd/compiler/aco_instruction_selection.cpp | 12 ++++++++++++ src/amd/compiler/aco_instruction_selection_setup.cpp | 2 ++ src/amd/compiler/aco_shader_info.h | 2 ++ 3 files changed, 16 insertions(+) diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 1f55f9887c0..f4509ea8204 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -9081,6 +9081,18 @@ visit_intrinsic(isel_context* ctx, nir_intrinsic_instr* instr) bld.pseudo(aco_opcode::p_start_linear_vgpr, Definition(dst), tmp); break; } + case nir_intrinsic_load_lds_ngg_scratch_base_amd: { + Temp dst = get_ssa_temp(ctx, &instr->dest.ssa); + bld.sop1(aco_opcode::p_load_symbol, Definition(dst), + Operand::c32(aco_symbol_lds_ngg_scratch_base)); + break; + } + case nir_intrinsic_load_lds_ngg_gs_out_vertex_base_amd: { + Temp dst = get_ssa_temp(ctx, &instr->dest.ssa); + bld.sop1(aco_opcode::p_load_symbol, Definition(dst), + Operand::c32(aco_symbol_lds_ngg_gs_out_vertex_base)); + break; + } default: isel_err(&instr->instr, "Unimplemented intrinsic instr"); abort(); diff --git a/src/amd/compiler/aco_instruction_selection_setup.cpp b/src/amd/compiler/aco_instruction_selection_setup.cpp index 6fcba282fa9..4d4cf5b744a 100644 --- a/src/amd/compiler/aco_instruction_selection_setup.cpp +++ b/src/amd/compiler/aco_instruction_selection_setup.cpp @@ -492,6 +492,8 @@ init_context(isel_context* ctx, nir_shader* shader) case nir_intrinsic_bindless_image_samples: case nir_intrinsic_load_force_vrs_rates_amd: case nir_intrinsic_load_scalar_arg_amd: + case nir_intrinsic_load_lds_ngg_scratch_base_amd: + case nir_intrinsic_load_lds_ngg_gs_out_vertex_base_amd: case nir_intrinsic_load_smem_amd: type = RegType::sgpr; break; case nir_intrinsic_load_sample_id: case nir_intrinsic_load_input: diff --git a/src/amd/compiler/aco_shader_info.h b/src/amd/compiler/aco_shader_info.h index af741d1d840..b25c6819044 100644 --- a/src/amd/compiler/aco_shader_info.h +++ b/src/amd/compiler/aco_shader_info.h @@ -164,6 +164,8 @@ enum aco_symbol_id { aco_symbol_invalid, aco_symbol_scratch_addr_lo, aco_symbol_scratch_addr_hi, + aco_symbol_lds_ngg_scratch_base, + aco_symbol_lds_ngg_gs_out_vertex_base, }; struct aco_symbol {