From 566047222ebfe420aa213e20279e52d28590a108 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 23 Feb 2026 15:52:27 -0500 Subject: [PATCH] nir: add frag_coord_w_rcp intrinsic This maps directly to what Intel's thread payload gives us, allowing us to optimize out frcp's in some cases. Jay will use this. Signed-off-by: Alyssa Rosenzweig Reviewed-by: Lionel Landwerlin Reviewed-by: Kenneth Graunke Part-of: --- src/compiler/nir/nir_divergence_analysis.c | 1 + src/compiler/nir/nir_gather_info.c | 1 + src/compiler/nir/nir_intrinsics.py | 1 + 3 files changed, 3 insertions(+) diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index 3414bfa9e4b..ed546a6f782 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -868,6 +868,7 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state) case nir_intrinsic_load_frag_coord: case nir_intrinsic_load_frag_coord_z: case nir_intrinsic_load_frag_coord_w: + case nir_intrinsic_load_frag_coord_w_rcp: case nir_intrinsic_load_frag_coord_unscaled_ir3: case nir_intrinsic_load_frag_coord_gmem_ir3: case nir_intrinsic_load_pixel_coord: diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c index 1fdc6a5f254..862a4d198e0 100644 --- a/src/compiler/nir/nir_gather_info.c +++ b/src/compiler/nir/nir_gather_info.c @@ -726,6 +726,7 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader) case nir_intrinsic_load_pixel_coord: case nir_intrinsic_load_frag_coord_z: case nir_intrinsic_load_frag_coord_w: + case nir_intrinsic_load_frag_coord_w_rcp: case nir_intrinsic_load_frag_shading_rate: case nir_intrinsic_load_fully_covered: case nir_intrinsic_load_point_coord: diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 0a2b9a26f47..37e07cc1fc4 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -981,6 +981,7 @@ system_value("pixel_coord", 2, bit_sizes=[16]) # requires interpolation. system_value("frag_coord_z", 1) system_value("frag_coord_w", 1) +system_value("frag_coord_w_rcp", 1) system_value("point_coord", 2) system_value("line_coord", 1) system_value("front_face", 1, bit_sizes=[1, 32])