nir: add new intrinsics for SPV_KHR_abort

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41651>
This commit is contained in:
Samuel Pitoiset 2026-05-19 12:31:08 +02:00 committed by Marge Bot
parent 691371a176
commit f431d6bc87
4 changed files with 16 additions and 0 deletions

View file

@ -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:

View file

@ -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))

View file

@ -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])

View file

@ -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;