diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index c9cd8fa1cf9..89af52ffd43 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -620,6 +620,7 @@ visit_intrinsic(nir_intrinsic_instr *instr, struct divergence_state *state) } case nir_intrinsic_get_ssbo_size: + case nir_intrinsic_ssbo_descriptor_amd: case nir_intrinsic_deref_buffer_array_length: is_divergent = src_divergent(instr->src[0], state) && (nir_intrinsic_access(instr) & ACCESS_NON_UNIFORM); diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c index 799a1235590..eb88ac91409 100644 --- a/src/compiler/nir/nir_gather_info.c +++ b/src/compiler/nir/nir_gather_info.c @@ -893,7 +893,8 @@ gather_intrinsic_info(nir_intrinsic_instr *instr, nir_shader *shader) instr->intrinsic == nir_intrinsic_image_deref_samples || instr->intrinsic == nir_intrinsic_bindless_image_levels || instr->intrinsic == nir_intrinsic_bindless_image_size || - instr->intrinsic == nir_intrinsic_bindless_image_samples) + instr->intrinsic == nir_intrinsic_bindless_image_samples || + instr->intrinsic == nir_intrinsic_get_ssbo_size) shader->info.uses_resource_info_query = true; break; } diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 29e57eae15d..83a4c7285e4 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -446,6 +446,9 @@ intrinsic("get_ssbo_size", src_comp=[-1], dest_comp=1, bit_sizes=[32], intrinsic("get_ubo_size", src_comp=[-1], dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER]) +intrinsic("ssbo_descriptor_amd", src_comp=[-1], dest_comp=4, bit_sizes=[32], + indices=[ACCESS], flags=[CAN_ELIMINATE, CAN_REORDER]) + # Intrinsics which provide a run-time mode-check. Unlike the compile-time # mode checks, a pointer can only have exactly one mode at runtime. intrinsic("deref_mode_is", src_comp=[-1], dest_comp=1,