From 952bf55483151f23a994f70187bfc36722f6931a Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Fri, 6 Mar 2026 15:48:21 -0800 Subject: [PATCH] nir: Fix divergence of Intel URB input/output handle intrinsics Tessellation evaluation shaders have a single convergent URB handle (for the common patch data) used by all lanes. Every other stage's IO handles have separate handles in each lane. Thanks to Alyssa Rosenzweig for catching this bug. Reviewed-by: Caio Oliveira Part-of: --- src/compiler/nir/nir_divergence_analysis.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index 1ac2cca7a17..feafb307088 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -361,8 +361,6 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state) case nir_intrinsic_load_core_max_id_arm: case nir_intrinsic_load_warp_max_id_arm: case nir_intrinsic_load_tess_config_intel: - case nir_intrinsic_load_urb_input_handle_intel: - case nir_intrinsic_load_urb_output_handle_intel: case nir_intrinsic_load_ray_query_global_intel: case nir_intrinsic_load_call_return_address_amd: case nir_intrinsic_load_indirect_address_intel: @@ -398,9 +396,14 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state) */ case nir_intrinsic_load_global_block_intel: case nir_intrinsic_load_urb_input_handle_indexed_intel: + case nir_intrinsic_load_urb_output_handle_intel: is_divergent = true; break; + case nir_intrinsic_load_urb_input_handle_intel: + is_divergent = stage != MESA_SHADER_TESS_EVAL; + break; + case nir_intrinsic_decl_reg: case nir_intrinsic_load_sysval_nv: is_divergent = nir_intrinsic_divergent(instr);