From f431d6bc8748cd95d472e3260adc863b2d009480 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 19 May 2026 12:31:08 +0200 Subject: [PATCH] nir: add new intrinsics for SPV_KHR_abort Signed-off-by: Samuel Pitoiset Part-of: --- src/compiler/nir/nir_divergence_analysis.c | 3 +++ src/compiler/nir/nir_gather_info.c | 4 ++++ src/compiler/nir/nir_intrinsics.py | 6 ++++++ src/compiler/shader_info.h | 3 +++ 4 files changed, 16 insertions(+) diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index 49979136dda..c386b901e5a 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -355,6 +355,8 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state) case nir_intrinsic_load_tcs_mem_attrib_stride: case nir_intrinsic_load_printf_buffer_address: case nir_intrinsic_load_printf_buffer_size: + case nir_intrinsic_load_abort_buffer_address: + case nir_intrinsic_load_abort_buffer_size: case nir_intrinsic_load_samples_log2_agx: case nir_intrinsic_load_active_subgroup_count_agx: case nir_intrinsic_load_root_agx: @@ -1042,6 +1044,7 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state) case nir_intrinsic_ldtram_nv: case nir_intrinsic_cmat_muladd_nv: case nir_intrinsic_printf: + case nir_intrinsic_abort: case nir_intrinsic_load_gs_header_ir3: case nir_intrinsic_load_tcs_header_ir3: case nir_intrinsic_load_rel_patch_id_ir3: diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c index c29bf089b03..4a3c7720397 100644 --- a/src/compiler/nir/nir_gather_info.c +++ b/src/compiler/nir/nir_gather_info.c @@ -906,6 +906,10 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader) break; } + case nir_intrinsic_abort: + shader->info.uses_abort = true; + break; + default: shader->info.uses_bindless |= intrinsic_is_bindless(instr); if (nir_intrinsic_writes_external_memory(instr)) diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 19443980525..b1c9a23e702 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -1414,6 +1414,12 @@ system_value("printf_buffer_size", 1, bit_sizes=[32]) # buffer. This avoids a separate abort buffer. intrinsic("printf_abort") +# SPV_KHR_abort +# The source is a deref to the message type. +intrinsic("abort", src_comp=[1]) +system_value("abort_buffer_address", 1, bit_sizes=[32,64]) +system_value("abort_buffer_size", 1, bit_sizes=[32]) + # Mesh shading MultiView intrinsics system_value("mesh_view_count", 1) load("mesh_view_indices", [1], [BASE, RANGE], [CAN_ELIMINATE, CAN_REORDER]) diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h index e082d7adf27..8dcbf15169e 100644 --- a/src/compiler/shader_info.h +++ b/src/compiler/shader_info.h @@ -226,6 +226,9 @@ typedef struct shader_info { /* Whether texture size, levels, or samples is queried. */ bool uses_resource_info_query:1; + /* Whether a shader abort instruction is used. */ + bool uses_abort:1; + /* Bitmask of bit-sizes used with ALU instructions. */ uint8_t bit_sizes_float; uint8_t bit_sizes_int;