v3d: add load_fep_w_v3d intrinsic

This intrinsic helps to read the W coordinate stored in the QPU register
when initializing the input data for the fragment shaders.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28072>
(cherry picked from commit 62e1dff256)
This commit is contained in:
Juan A. Suarez Romero 2024-03-07 17:50:56 +01:00 committed by Eric Engestrom
parent ce73c8f829
commit 0aeacc0883
5 changed files with 10 additions and 1 deletions

View file

@ -64,7 +64,7 @@
"description": "v3d: add load_fep_w_v3d intrinsic",
"nominated": false,
"nomination_type": 3,
"resolution": 4,
"resolution": 1,
"main_sha": null,
"because_sha": null,
"notes": null

View file

@ -3444,6 +3444,10 @@ ntq_emit_intrinsic(struct v3d_compile *c, nir_intrinsic_instr *instr)
vir_emit_tlb_color_read(c, instr);
break;
case nir_intrinsic_load_fep_w_v3d:
ntq_store_def(c, &instr->def, 0, vir_MOV(c, c->payload_w));
break;
case nir_intrinsic_load_input:
ntq_emit_load_input(c, instr);
break;

View file

@ -143,6 +143,7 @@ visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr)
case nir_intrinsic_load_xfb_address:
case nir_intrinsic_load_num_vertices:
case nir_intrinsic_load_fb_layers_v3d:
case nir_intrinsic_load_fep_w_v3d:
case nir_intrinsic_load_tcs_num_patches_amd:
case nir_intrinsic_load_ring_tess_factors_amd:
case nir_intrinsic_load_ring_tess_offchip_amd:

View file

@ -1714,6 +1714,9 @@ store("tlb_sample_color_v3d", [1], [BASE, COMPONENT, SRC_TYPE], [])
# the target framebuffer
intrinsic("load_fb_layers_v3d", dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER])
# V3D-specific intrinsic to load W coordinate from the fragment shader payload
intrinsic("load_fep_w_v3d", dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER])
# Load a bindless sampler handle mapping a binding table sampler.
intrinsic("load_sampler_handle_agx", [1], 1, [],
flags=[CAN_ELIMINATE, CAN_REORDER],

View file

@ -173,6 +173,7 @@ can_move_intrinsic(nir_intrinsic_instr *instr, opt_preamble_ctx *ctx)
case nir_intrinsic_load_line_width:
case nir_intrinsic_load_aa_line_width:
case nir_intrinsic_load_fb_layers_v3d:
case nir_intrinsic_load_fep_w_v3d:
case nir_intrinsic_load_tcs_num_patches_amd:
case nir_intrinsic_load_sample_positions_pan:
case nir_intrinsic_load_pipeline_stat_query_enabled_amd: