diff --git a/src/compiler/glsl/gl_nir_lower_images.c b/src/compiler/glsl/gl_nir_lower_images.c index 09b00947f4a..a1d50f45a81 100644 --- a/src/compiler/glsl/gl_nir_lower_images.c +++ b/src/compiler/glsl/gl_nir_lower_images.c @@ -79,6 +79,7 @@ lower_impl(nir_builder *b, nir_instr *instr, bool bindless_only) case nir_intrinsic_image_deref_samples: case nir_intrinsic_image_deref_size: case nir_intrinsic_image_deref_samples_identical: + case nir_intrinsic_image_deref_descriptor_amd: case nir_intrinsic_image_deref_store: { deref = nir_src_as_deref(intrinsic->src[0]); var = nir_deref_instr_get_variable(deref); diff --git a/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c b/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c index d4a808749cf..99622c189ff 100644 --- a/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c +++ b/src/compiler/glsl/gl_nir_lower_samplers_as_deref.c @@ -329,6 +329,7 @@ lower_intrinsic(nir_intrinsic_instr *instr, instr->intrinsic == nir_intrinsic_image_deref_atomic_fadd || instr->intrinsic == nir_intrinsic_image_deref_size || instr->intrinsic == nir_intrinsic_image_deref_samples_identical || + instr->intrinsic == nir_intrinsic_image_deref_descriptor_amd || instr->intrinsic == nir_intrinsic_image_deref_samples) { b->cursor = nir_before_instr(&instr->instr); diff --git a/src/compiler/nir/nir_divergence_analysis.c b/src/compiler/nir/nir_divergence_analysis.c index 072a83eaf4c..c40c14c7c11 100644 --- a/src/compiler/nir/nir_divergence_analysis.c +++ b/src/compiler/nir/nir_divergence_analysis.c @@ -373,6 +373,9 @@ visit_intrinsic(nir_shader *shader, nir_intrinsic_instr *instr) case nir_intrinsic_image_size: case nir_intrinsic_image_deref_size: case nir_intrinsic_bindless_image_size: + case nir_intrinsic_image_descriptor_amd: + case nir_intrinsic_image_deref_descriptor_amd: + case nir_intrinsic_bindless_image_descriptor_amd: case nir_intrinsic_copy_deref: case nir_intrinsic_vulkan_resource_index: case nir_intrinsic_vulkan_resource_reindex: diff --git a/src/compiler/nir/nir_intrinsics.py b/src/compiler/nir/nir_intrinsics.py index 6fb7dbdb812..838adb16a23 100644 --- a/src/compiler/nir/nir_intrinsics.py +++ b/src/compiler/nir/nir_intrinsics.py @@ -651,6 +651,9 @@ image("atomic_inc_wrap", src_comp=[4, 1, 1], dest_comp=1) image("atomic_dec_wrap", src_comp=[4, 1, 1], dest_comp=1) # This returns true if all samples within the pixel have equal color values. image("samples_identical", dest_comp=1, src_comp=[4], flags=[CAN_ELIMINATE]) +# Non-uniform access is not lowered for image_descriptor_amd. +# dest_comp can be either 4 (buffer) or 8 (image). +image("descriptor_amd", dest_comp=0, src_comp=[], flags=[CAN_ELIMINATE, CAN_REORDER]) # CL-specific format queries image("format", dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER]) image("order", dest_comp=1, flags=[CAN_ELIMINATE, CAN_REORDER])