diff --git a/.pick_status.json b/.pick_status.json index 09e179a4cbe..4fb1b3c62c6 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -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 diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c index 966adbbdc48..f4f6646e0a3 100644 --- a/src/broadcom/compiler/nir_to_vir.c +++ b/src/broadcom/compiler/nir_to_vir.c @@ -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; diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index 7aa49801ced..51c20baf0fb 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -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: diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 60a7fa3732b..9a73af521b9 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -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], diff --git a/src/compiler/nir/nir_opt_preamble.c b/src/compiler/nir/nir_opt_preamble.c index 29c0af232b2..3561839eb81 100644 --- a/src/compiler/nir/nir_opt_preamble.c +++ b/src/compiler/nir/nir_opt_preamble.c @@ -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: