Module: Mesa
Branch: main
Commit: 6483fd394e4e7227f95104ac8d5782c2be46c642
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6483fd394e4e7227f95104ac8d5782c2be46c642

Author: Marek Olšák <[email protected]>
Date:   Wed Jul 20 07:55:04 2022 -0400

nir: add nir_intrinsic_image_descriptor_amd

This returns the AMD shader resource descriptor.

Reviewed-by: Jason Ekstrand <[email protected]>
Reviewed-by: Pierre-Eric Pelloux-Prayer <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17693>

---

 src/compiler/glsl/gl_nir_lower_images.c            | 1 +
 src/compiler/glsl/gl_nir_lower_samplers_as_deref.c | 1 +
 src/compiler/nir/nir_divergence_analysis.c         | 3 +++
 src/compiler/nir/nir_intrinsics.py                 | 3 +++
 4 files changed, 8 insertions(+)

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

Reply via email to