From b067a61c07839928f3812fc90a14df80cb59efc3 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Thu, 11 Jan 2024 13:14:47 -0800 Subject: [PATCH] nir: Mark nir_intrinsic_load_global_block_intel as divergent This is divergent because it specifically loads sequential values into successive SIMD lanes. No shader-db or fossil-db changes on any Intel platform. Fixes: 9f44a264623 ("nir/divergence: handle load_global_block_intel") Reviewed-by: Lionel Landwerlin Part-of: (cherry picked from commit 75de4458a1350ac6f3843e4f8da7a69717c92687) --- .pick_status.json | 2 +- src/compiler/nir/nir_divergence_analysis.c | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 7cd88c93b22..aad39c6da1f 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -124,7 +124,7 @@ "description": "nir: Mark nir_intrinsic_load_global_block_intel as divergent", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "9f44a264623461c98368185b023d99446676e039", "notes": null diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index 4cb456bc747..7aa49801ced 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -189,7 +189,6 @@ visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr) case nir_intrinsic_load_resume_shader_address_amd: case nir_intrinsic_load_global_const_block_intel: case nir_intrinsic_load_reloc_const_intel: - case nir_intrinsic_load_global_block_intel: case nir_intrinsic_load_btd_global_arg_addr_intel: case nir_intrinsic_load_btd_local_arg_addr_intel: case nir_intrinsic_load_mesh_inline_data_intel: @@ -219,6 +218,13 @@ visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr) is_divergent = false; break; + /* This is divergent because it specifically loads sequential values into + * successive SIMD lanes. + */ + case nir_intrinsic_load_global_block_intel: + is_divergent = true; + break; + case nir_intrinsic_decl_reg: is_divergent = nir_intrinsic_divergent(instr); break;