Mesa (master): nir: gather which images are MSAA

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Tue Jun 2 21:11:21 UTC 2020


Module: Mesa
Branch: master
Commit: cac24bee6202d5bf1c16caa8174494747fa2d56c
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=cac24bee6202d5bf1c16caa8174494747fa2d56c

Author: Marek Olšák <marek.olsak at amd.com>
Date:   Sun May 24 15:52:26 2020 -0400

nir: gather which images are MSAA

Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
Reviewed-by: Eric Anholt <eric at anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/5209>

---

 src/compiler/nir/nir_gather_info.c           | 11 +++++------
 src/compiler/shader_info.h                   |  4 ++--
 src/gallium/auxiliary/nir/tgsi_to_nir.c      |  1 -
 src/gallium/drivers/radeonsi/si_shader_nir.c |  2 +-
 4 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/src/compiler/nir/nir_gather_info.c b/src/compiler/nir/nir_gather_info.c
index 5a2f8cfc06a..3a65c27b02e 100644
--- a/src/compiler/nir/nir_gather_info.c
+++ b/src/compiler/nir/nir_gather_info.c
@@ -598,7 +598,7 @@ nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint)
    shader->info.num_textures = 0;
    shader->info.num_images = 0;
    shader->info.image_buffers = 0;
-   shader->info.last_msaa_image = -1;
+   shader->info.msaa_images = 0;
 
    nir_foreach_variable(var, &shader->uniforms) {
       /* Bindless textures and images don't use non-bindless slots.
@@ -618,13 +618,12 @@ nir_shader_gather_info(nir_shader *shader, nir_function_impl *entrypoint)
             shader->info.image_buffers |=
                BITFIELD_RANGE(shader->info.num_images, num_image_slots);
          }
+         if (glsl_get_sampler_dim(image_type) == GLSL_SAMPLER_DIM_MS) {
+            shader->info.msaa_images |=
+               BITFIELD_RANGE(shader->info.num_images, num_image_slots);
+         }
          shader->info.num_images += num_image_slots;
       }
-
-      /* Assuming image slots don't have holes (e.g. OpenGL) */
-      if (glsl_type_is_image(var->type) &&
-          glsl_get_sampler_dim(var->type) == GLSL_SAMPLER_DIM_MS)
-         shader->info.last_msaa_image = shader->info.num_images - 1;
    }
 
    shader->info.inputs_read = 0;
diff --git a/src/compiler/shader_info.h b/src/compiler/shader_info.h
index 6537008af93..57b0eabd79a 100644
--- a/src/compiler/shader_info.h
+++ b/src/compiler/shader_info.h
@@ -116,8 +116,6 @@ typedef struct shader_info {
    uint8_t num_ssbos;
    /* Number of images used by this shader */
    uint8_t num_images;
-   /* Index of the last MSAA image. */
-   int8_t last_msaa_image;
 
    /* Which inputs are actually read */
    uint64_t inputs_read;
@@ -154,6 +152,8 @@ typedef struct shader_info {
    uint32_t images_used;
    /** Bitfield of which images are buffers. */
    uint32_t image_buffers;
+   /** Bitfield of which images are MSAA. */
+   uint32_t msaa_images;
 
    /* SPV_KHR_float_controls: execution mode for floating point ops */
    uint16_t float_controls_execution_mode;
diff --git a/src/gallium/auxiliary/nir/tgsi_to_nir.c b/src/gallium/auxiliary/nir/tgsi_to_nir.c
index 07f3f6fe47a..e6c94a81aed 100644
--- a/src/gallium/auxiliary/nir/tgsi_to_nir.c
+++ b/src/gallium/auxiliary/nir/tgsi_to_nir.c
@@ -2579,7 +2579,6 @@ ttn_finalize_nir(struct ttn_compile *c, struct pipe_screen *screen)
 
    nir->info.num_images = c->num_images;
    nir->info.num_textures = c->num_samplers;
-   nir->info.last_msaa_image = c->num_msaa_images - 1;
 
    nir_validate_shader(nir, "TTN: after all optimizations");
 }
diff --git a/src/gallium/drivers/radeonsi/si_shader_nir.c b/src/gallium/drivers/radeonsi/si_shader_nir.c
index 07be19f4206..03b04ba0293 100644
--- a/src/gallium/drivers/radeonsi/si_shader_nir.c
+++ b/src/gallium/drivers/radeonsi/si_shader_nir.c
@@ -718,7 +718,7 @@ void si_nir_scan_shader(const struct nir_shader *nir, struct si_shader_info *inf
    if (nir->num_uniforms > 0)
       info->const_buffers_declared |= 1;
    info->images_declared = u_bit_consecutive(0, nir->info.num_images);
-   info->msaa_images_declared = u_bit_consecutive(0, nir->info.last_msaa_image + 1);
+   info->msaa_images_declared = nir->info.msaa_images;
    info->samplers_declared = nir->info.textures_used;
 
    info->num_written_clipdistance = nir->info.clip_distance_array_size;



More information about the mesa-commit mailing list