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 <mary.guillemard@collabora.com>
Reviewed-by: Benjamin Lee <benjamin.lee@collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33910>
This commit is contained in:
Mary Guillemard
2025-01-30 11:56:16 +00:00
parent 8fcc52b8d7
commit e0be93d881
3 changed files with 6 additions and 0 deletions
@@ -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:
+4
View File
@@ -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
+1
View File
@@ -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;