Mesa (main): zink: add a #define for descriptor compaction

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jun 1 02:33:39 UTC 2022


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

Author: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Date:   Fri May 27 15:57:25 2022 -0400

zink: add a #define for descriptor compaction

make those 2s a little less random

fixes #6556

Reviewed-by: Dave Airlie <airlied at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16755>

---

 src/gallium/drivers/zink/zink_descriptors.c      | 22 +++++++++++-----------
 src/gallium/drivers/zink/zink_descriptors.h      |  2 ++
 src/gallium/drivers/zink/zink_descriptors_lazy.c |  2 +-
 3 files changed, 14 insertions(+), 12 deletions(-)

diff --git a/src/gallium/drivers/zink/zink_descriptors.c b/src/gallium/drivers/zink/zink_descriptors.c
index c7a1b495291..d422d33e703 100644
--- a/src/gallium/drivers/zink/zink_descriptors.c
+++ b/src/gallium/drivers/zink/zink_descriptors.c
@@ -803,7 +803,7 @@ zink_descriptor_set_get(struct zink_context *ctx,
     */
    if (last_set && ((push_set && !ctx->dd->changed[is_compute][ZINK_DESCRIPTOR_TYPES]) ||
                     (!push_set && (screen->compact_descriptors ?
-                                   !ctx->dd->changed[is_compute][type] && !ctx->dd->changed[is_compute][type+2] :
+                                   !ctx->dd->changed[is_compute][type] && !ctx->dd->changed[is_compute][type+ZINK_DESCRIPTOR_COMPACT] :
                                    !ctx->dd->changed[is_compute][type])))) {
       *cache_hit = true;
       return last_set;
@@ -913,8 +913,8 @@ quick_out:
          if (zink_desc_type_from_vktype(pool->key->sizes[0].type) == type)
             zds->compacted |= BITFIELD_BIT(type);
          for (unsigned i = 0; i < pool->key->num_type_sizes; i++) {
-            if (zink_desc_type_from_vktype(pool->key->sizes[0].type) == type + 2) {
-               zds->compacted |= BITFIELD_BIT(type + 2);
+            if (zink_desc_type_from_vktype(pool->key->sizes[0].type) == type + ZINK_DESCRIPTOR_COMPACT) {
+               zds->compacted |= BITFIELD_BIT(type + ZINK_DESCRIPTOR_COMPACT);
                break;
             }
          }
@@ -1340,9 +1340,9 @@ static void
 set_descriptor_set_refs(struct zink_context *ctx, struct zink_descriptor_set *zds, struct zink_program *pg, bool cache_hit)
 {
    const bool compact_descriptors = zink_screen(ctx->base.screen)->compact_descriptors;
-   STATIC_ASSERT(ZINK_DESCRIPTOR_TYPE_UBO + 2 == ZINK_DESCRIPTOR_TYPE_SSBO);
-   STATIC_ASSERT(ZINK_DESCRIPTOR_TYPE_SAMPLER_VIEW + 2 == ZINK_DESCRIPTOR_TYPE_IMAGE);
-   const enum zink_descriptor_type types[] = {zds->pool->type, zds->pool->type + 2};
+   STATIC_ASSERT(ZINK_DESCRIPTOR_TYPE_UBO + ZINK_DESCRIPTOR_COMPACT == ZINK_DESCRIPTOR_TYPE_SSBO);
+   STATIC_ASSERT(ZINK_DESCRIPTOR_TYPE_SAMPLER_VIEW + ZINK_DESCRIPTOR_COMPACT == ZINK_DESCRIPTOR_TYPE_IMAGE);
+   const enum zink_descriptor_type types[] = {zds->pool->type, zds->pool->type + ZINK_DESCRIPTOR_COMPACT};
    unsigned num_types = compact_descriptors ? 2 : 1;
    for (unsigned n = 0; n < num_types; n++) {
       const enum zink_descriptor_type type = types[n];
@@ -1390,7 +1390,7 @@ update_descriptors_internal(struct zink_context *ctx, enum zink_descriptor_type
    VkWriteDescriptorSet wds[ZINK_MAX_DESCRIPTORS_PER_TYPE];
    unsigned num_wds = 0;
 
-   const enum zink_descriptor_type types[2] = {type, type + 2};
+   const enum zink_descriptor_type types[2] = {type, type + ZINK_DESCRIPTOR_COMPACT};
    for (unsigned n = 0; n < ARRAY_SIZE(types); n++) {
       if (!(zds->compacted & BITFIELD_BIT(types[n])))
          continue;
@@ -1793,20 +1793,20 @@ zink_context_update_descriptor_states(struct zink_context *ctx, struct zink_prog
 
    for (unsigned n = 0; n < 2; n++) {
       ctx->dd->compact_descriptor_states[pg->is_compute].valid[n] = ctx->dd->descriptor_states[pg->is_compute].valid[n] |
-                                                                    ctx->dd->descriptor_states[pg->is_compute].valid[n + 2];
+                                                                    ctx->dd->descriptor_states[pg->is_compute].valid[n + ZINK_DESCRIPTOR_COMPACT];
       if (ctx->dd->compact_descriptor_states[pg->is_compute].valid[n]) {
          if (pg->is_compute) {
             ctx->dd->compact_descriptor_states[pg->is_compute].state[n] = ctx->dd->descriptor_states[pg->is_compute].state[n] ^
-                                                                          ctx->dd->descriptor_states[pg->is_compute].state[n + 2];
+                                                                          ctx->dd->descriptor_states[pg->is_compute].state[n + ZINK_DESCRIPTOR_COMPACT];
          } else {
             uint32_t hash = 0;
             bool first = true;
             for (unsigned i = 0; i < ZINK_SHADER_COUNT; i++) {
                ctx->dd->compact_gfx_descriptor_states[i].valid[n] = ctx->dd->gfx_descriptor_states[i].valid[n] |
-                                                                    ctx->dd->gfx_descriptor_states[i].valid[n + 2];
+                                                                    ctx->dd->gfx_descriptor_states[i].valid[n + ZINK_DESCRIPTOR_COMPACT];
                if (ctx->dd->compact_gfx_descriptor_states[i].valid[n]) {
                   ctx->dd->compact_gfx_descriptor_states[i].state[n] = ctx->dd->gfx_descriptor_states[i].state[n] ^
-                                                                       ctx->dd->gfx_descriptor_states[i].state[n + 2];
+                                                                       ctx->dd->gfx_descriptor_states[i].state[n + ZINK_DESCRIPTOR_COMPACT];
                   if (first)
                      hash = ctx->dd->compact_gfx_descriptor_states[i].state[n];
                   else
diff --git a/src/gallium/drivers/zink/zink_descriptors.h b/src/gallium/drivers/zink/zink_descriptors.h
index 38651d10e0b..b15e29aa5a5 100644
--- a/src/gallium/drivers/zink/zink_descriptors.h
+++ b/src/gallium/drivers/zink/zink_descriptors.h
@@ -40,6 +40,8 @@ extern "C" {
 #define ZINK_SHADER_COUNT (PIPE_SHADER_TYPES - 1)
 #endif
 
+#define ZINK_DESCRIPTOR_COMPACT 2
+
 enum zink_descriptor_type {
    ZINK_DESCRIPTOR_TYPE_UBO,
    ZINK_DESCRIPTOR_TYPE_SAMPLER_VIEW,
diff --git a/src/gallium/drivers/zink/zink_descriptors_lazy.c b/src/gallium/drivers/zink/zink_descriptors_lazy.c
index b8f12368a79..9517431feec 100644
--- a/src/gallium/drivers/zink/zink_descriptors_lazy.c
+++ b/src/gallium/drivers/zink/zink_descriptors_lazy.c
@@ -654,7 +654,7 @@ zink_context_invalidate_descriptor_state_lazy(struct zink_context *ctx, enum pip
       dd_lazy(ctx)->push_state_changed[shader == PIPE_SHADER_COMPUTE] = true;
    else {
       if (zink_screen(ctx->base.screen)->compact_descriptors && type > ZINK_DESCRIPTOR_TYPE_SAMPLER_VIEW)
-         type -= 2;
+         type -= ZINK_DESCRIPTOR_COMPACT;
       dd_lazy(ctx)->state_changed[shader == PIPE_SHADER_COMPUTE] |= BITFIELD_BIT(type);
    }
 }



More information about the mesa-commit mailing list