From e0be93d88179c90272fc560bd7015df0725874e1 Mon Sep 17 00:00:00 2001 From: Mary Guillemard Date: Thu, 30 Jan 2025 11:56:16 +0000 Subject: [PATCH] nir: Add Panfrost specific shader_output intrinsic On Avalon, this is a bitfield that holds information on what values a vertex shader should output. Signed-off-by: Mary Guillemard Reviewed-by: Benjamin Lee Part-of: --- src/compiler/nir/nir_divergence_analysis.c | 1 + src/compiler/nir/nir_intrinsics.py | 4 ++++ src/compiler/nir/nir_opt_sink.c | 1 + 3 files changed, 6 insertions(+) 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;