diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index d25ec934b3f..f8b2bd03948 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -281,6 +281,7 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state) case nir_intrinsic_load_ring_attr_offset_amd: case nir_intrinsic_load_provoking_vtx_amd: case nir_intrinsic_load_sample_positions_pan: + case nir_intrinsic_load_shader_output_pan: case nir_intrinsic_load_workgroup_num_input_vertices_amd: case nir_intrinsic_load_workgroup_num_input_primitives_amd: case nir_intrinsic_load_pipeline_stat_query_enabled_amd: diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index a5655f8ff74..47cde3be456 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -1505,6 +1505,10 @@ intrinsic("prefetch_ubo_ir3", [1], flags=[CAN_REORDER]) # src[] = { vertex_id, instance_id, offset } load("attribute_pan", [1, 1, 1], [BASE, COMPONENT, DEST_TYPE, IO_SEMANTICS], [CAN_ELIMINATE, CAN_REORDER]) +# Panfrost-specific intrinsic to load the shader_output special-FAU value on Avalon. +intrinsic("load_shader_output_pan", dest_comp=1, src_comp=[], bit_sizes=[32], + indices=[], flags=[CAN_REORDER, CAN_ELIMINATE]) + # Panfrost-specific intrinsics for accessing the raw vertex ID and the # associated offset such that # vertex_id = raw_vertex_id_pan + raw_vertex_offset_pan diff --git a/src/compiler/nir/nir_opt_sink.c b/src/compiler/nir/nir_opt_sink.c index 8d5d6d61c78..2c16bc33a2c 100644 --- a/src/compiler/nir/nir_opt_sink.c +++ b/src/compiler/nir/nir_opt_sink.c @@ -125,6 +125,7 @@ can_sink_instr(nir_instr *instr, nir_move_options options, bool *can_mov_out_of_ return options & nir_move_copies; case nir_intrinsic_load_constant_agx: case nir_intrinsic_load_local_pixel_agx: + case nir_intrinsic_load_shader_output_pan: return true; default: return false;