From 1c2bd27d812d7e012bac69134b7d061fa6d0afe9 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Tue, 19 Jul 2022 09:58:03 -0400 Subject: [PATCH] zink: move descriptor_mode to be a global this can't change once it's been set, so having it per-object is pointless Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_context.c | 2 +- src/gallium/drivers/zink/zink_descriptors.c | 17 ++++++++--------- .../drivers/zink/zink_descriptors_lazy.c | 12 ++++++------ src/gallium/drivers/zink/zink_screen.c | 8 +++++--- src/gallium/drivers/zink/zink_screen.h | 3 ++- 5 files changed, 22 insertions(+), 20 deletions(-) diff --git a/src/gallium/drivers/zink/zink_context.c b/src/gallium/drivers/zink/zink_context.c index 4b904e89843..4131a84a8f0 100644 --- a/src/gallium/drivers/zink/zink_context.c +++ b/src/gallium/drivers/zink/zink_context.c @@ -1282,7 +1282,7 @@ zink_set_constant_buffer(struct pipe_context *pctx, zink_resource_buffer_barrier(ctx, new_res, VK_ACCESS_UNIFORM_READ_BIT, zink_pipeline_flags_from_pipe_stage(shader)); } - update |= ((index || screen->descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY) && ctx->ubos[shader][index].buffer_offset != offset) || + update |= ((index || zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY) && ctx->ubos[shader][index].buffer_offset != offset) || !!res != !!buffer || (res && res->obj->buffer != new_res->obj->buffer) || ctx->ubos[shader][index].buffer_size != cb->buffer_size; diff --git a/src/gallium/drivers/zink/zink_descriptors.c b/src/gallium/drivers/zink/zink_descriptors.c index 4f2f3e1eafc..59aab2ad28c 100644 --- a/src/gallium/drivers/zink/zink_descriptors.c +++ b/src/gallium/drivers/zink/zink_descriptors.c @@ -352,7 +352,7 @@ descriptor_layout_create(struct zink_screen *screen, enum zink_descriptor_type t dcslci.pNext = NULL; VkDescriptorSetLayoutBindingFlagsCreateInfo fci = {0}; VkDescriptorBindingFlags flags[ZINK_MAX_DESCRIPTORS_PER_TYPE]; - if (screen->descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY) { + if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY) { dcslci.pNext = &fci; if (t == ZINK_DESCRIPTOR_TYPES) dcslci.flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR; @@ -524,9 +524,9 @@ init_push_binding(VkDescriptorSetLayoutBinding *binding, unsigned i, VkDescripto static VkDescriptorType get_push_types(struct zink_screen *screen, enum zink_descriptor_type *dsl_type) { - *dsl_type = screen->descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY && + *dsl_type = zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY && screen->info.have_KHR_push_descriptor ? ZINK_DESCRIPTOR_TYPES : ZINK_DESCRIPTOR_TYPE_UBO; - return screen->descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY ? + return zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY ? VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER : VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC; } @@ -1134,7 +1134,7 @@ zink_descriptor_program_init(struct zink_context *ctx, struct zink_program *pg) has_pools = true; } if (has_pools && screen->info.have_KHR_descriptor_update_template && - screen->descriptor_mode != ZINK_DESCRIPTOR_MODE_NOTEMPLATES) + zink_descriptor_mode != ZINK_DESCRIPTOR_MODE_NOTEMPLATES) create_descriptor_ref_template(ctx, pg); return true; @@ -1170,9 +1170,8 @@ zink_descriptor_pool_init(struct zink_context *ctx) if (!ctx->dd->descriptor_pools[i]) return false; } - struct zink_screen *screen = zink_screen(ctx->base.screen); VkDescriptorPoolSize sizes[2]; - sizes[0].type = screen->descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY ? VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER : VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC; + sizes[0].type = zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY ? VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER : VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC; sizes[0].descriptorCount = ZINK_SHADER_COUNT * ZINK_DEFAULT_MAX_DESCS; sizes[1].type = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT; sizes[1].descriptorCount = ZINK_DEFAULT_MAX_DESCS; @@ -1379,7 +1378,7 @@ update_descriptors_internal(struct zink_context *ctx, enum zink_descriptor_type return; if (screen->info.have_KHR_descriptor_update_template && - screen->descriptor_mode != ZINK_DESCRIPTOR_MODE_NOTEMPLATES) { + zink_descriptor_mode != ZINK_DESCRIPTOR_MODE_NOTEMPLATES) { set_descriptor_set_refs(ctx, zds, pg, cache_hit); zink_descriptor_set_update_lazy(ctx, pg, type, zds->desc_set); return; @@ -1527,7 +1526,7 @@ zink_descriptors_update(struct zink_context *ctx, bool is_compute) zds = zink_descriptor_set_get(ctx, h, is_compute, &cache_hit); if (cache_hit) { pdd_cached(pg)->cache_misses[h] = 0; - } else if (likely(zink_screen(ctx->base.screen)->descriptor_mode != ZINK_DESCRIPTOR_MODE_NOFALLBACK)) { + } else if (likely(zink_descriptor_mode != ZINK_DESCRIPTOR_MODE_NOFALLBACK)) { if (++pdd_cached(pg)->cache_misses[h] == MAX_CACHE_MISSES) { #ifdef PRINT_DEBUG const char *set_names[] = { @@ -1908,7 +1907,7 @@ zink_descriptor_util_init_fbfetch(struct zink_context *ctx) //ralloc_free(ctx->dd->push_layout_keys[0]); ctx->dd->push_dsl[0] = create_gfx_layout(ctx, &ctx->dd->push_layout_keys[0], true); ctx->dd->has_fbfetch = true; - if (screen->descriptor_mode != ZINK_DESCRIPTOR_MODE_LAZY) + if (zink_descriptor_mode != ZINK_DESCRIPTOR_MODE_LAZY) zink_descriptor_pool_init(ctx); } diff --git a/src/gallium/drivers/zink/zink_descriptors_lazy.c b/src/gallium/drivers/zink/zink_descriptors_lazy.c index 1fd05ad460b..ea642cf6f61 100644 --- a/src/gallium/drivers/zink/zink_descriptors_lazy.c +++ b/src/gallium/drivers/zink/zink_descriptors_lazy.c @@ -222,7 +222,7 @@ zink_descriptor_program_init_lazy(struct zink_context *ctx, struct zink_program zink_vktype_to_size_idx(shader->bindings[j][k].type); sizes[idx].descriptorCount += shader->bindings[j][k].size; sizes[idx].type = shader->bindings[j][k].type; - init_template_entry(shader, j, k, &entries[desc_set][entry_idx[desc_set]], &entry_idx[desc_set], screen->descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY); + init_template_entry(shader, j, k, &entries[desc_set][entry_idx[desc_set]], &entry_idx[desc_set], zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY); num_bindings[desc_set]++; has_bindings |= BITFIELD_BIT(desc_set); pg->dd->real_binding_usage |= BITFIELD_BIT(j); @@ -247,7 +247,7 @@ zink_descriptor_program_init_lazy(struct zink_context *ctx, struct zink_program pg->dsl[pg->num_dsl++] = push_count ? ctx->dd->push_dsl[pg->is_compute]->layout : ctx->dd->dummy_dsl->layout; if (has_bindings) { for (unsigned i = 0; i < ARRAY_SIZE(sizes); i++) - sizes[i].descriptorCount *= screen->descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY ? MAX_LAZY_DESCRIPTORS : ZINK_DEFAULT_MAX_DESCS; + sizes[i].descriptorCount *= zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY ? MAX_LAZY_DESCRIPTORS : ZINK_DEFAULT_MAX_DESCS; u_foreach_bit(desc_set, has_bindings) { for (unsigned i = 0; i < desc_set; i++) { /* push set is always 0 */ @@ -302,14 +302,14 @@ zink_descriptor_program_init_lazy(struct zink_context *ctx, struct zink_program pg->layout = zink_pipeline_layout_create(screen, pg, &pg->compat_id); if (!pg->layout) return false; - /* TODO: figure out uncached+notemplate and return on screen->descriptor_mode == ZINK_DESCRIPTOR_MODE_NOTEMPLATES */ + /* TODO: figure out uncached+notemplate and return on zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_NOTEMPLATES */ if (!screen->info.have_KHR_descriptor_update_template) return true; VkDescriptorUpdateTemplateCreateInfo template[ZINK_DESCRIPTOR_TYPES + 1] = {0}; /* type of template */ VkDescriptorUpdateTemplateType types[ZINK_DESCRIPTOR_TYPES + 1] = {VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET}; - if (have_push && screen->descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY) + if (have_push && zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY) types[0] = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR; /* number of descriptors in template */ @@ -756,7 +756,7 @@ zink_descriptors_init_lazy(struct zink_context *ctx) if (!ctx->dd) return false; - if (screen->descriptor_mode == ZINK_DESCRIPTOR_MODE_NOTEMPLATES) + if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_NOTEMPLATES) printf("ZINK: CACHED/NOTEMPLATES DESCRIPTORS\n"); else if (screen->info.have_KHR_descriptor_update_template) { for (unsigned i = 0; i < ZINK_SHADER_COUNT; i++) { @@ -770,7 +770,7 @@ zink_descriptors_init_lazy(struct zink_context *ctx) entry->descriptorType = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT; entry->offset = offsetof(struct zink_context, di.fbfetch); entry->stride = sizeof(VkDescriptorImageInfo); - if (screen->descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY) + if (zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY) printf("ZINK: USING LAZY DESCRIPTORS\n"); } struct zink_descriptor_layout_key *layout_key; diff --git a/src/gallium/drivers/zink/zink_screen.c b/src/gallium/drivers/zink/zink_screen.c index 9d4b6d36330..57a5651375e 100644 --- a/src/gallium/drivers/zink/zink_screen.c +++ b/src/gallium/drivers/zink/zink_screen.c @@ -98,6 +98,8 @@ zink_descriptor_options[] = { DEBUG_GET_ONCE_FLAGS_OPTION(zink_descriptor_mode, "ZINK_DESCRIPTORS", zink_descriptor_options, ZINK_DESCRIPTOR_MODE_AUTO) +enum zink_descriptor_mode zink_descriptor_mode; + static const char * zink_get_vendor(struct pipe_screen *pscreen) { @@ -1530,7 +1532,7 @@ zink_screen_init_descriptor_funcs(struct zink_screen *screen, bool fallback) { if (screen->info.have_KHR_descriptor_update_template && !fallback && - screen->descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY) { + zink_descriptor_mode == ZINK_DESCRIPTOR_MODE_LAZY) { #define LAZY(FUNC) screen->FUNC = zink_##FUNC##_lazy LAZY(descriptor_program_init); LAZY(descriptor_program_deinit); @@ -2104,8 +2106,8 @@ zink_internal_create_screen(const struct pipe_screen_config *config) screen->threaded = util_get_cpu_caps()->nr_cpus > 1 && debug_get_bool_option("GALLIUM_THREAD", util_get_cpu_caps()->nr_cpus > 1); zink_debug = debug_get_option_zink_debug(); - screen->descriptor_mode = debug_get_option_zink_descriptor_mode(); - if (screen->descriptor_mode > ZINK_DESCRIPTOR_MODE_NOTEMPLATES) { + zink_descriptor_mode = debug_get_option_zink_descriptor_mode(); + if (zink_descriptor_mode > ZINK_DESCRIPTOR_MODE_NOTEMPLATES) { printf("Specify exactly one descriptor mode.\n"); abort(); } diff --git a/src/gallium/drivers/zink/zink_screen.h b/src/gallium/drivers/zink/zink_screen.h index e5f7866da4e..3475bfd6215 100644 --- a/src/gallium/drivers/zink/zink_screen.h +++ b/src/gallium/drivers/zink/zink_screen.h @@ -82,6 +82,8 @@ enum zink_descriptor_mode { ZINK_DESCRIPTOR_MODE_COMPACT, }; +extern enum zink_descriptor_mode zink_descriptor_mode; + //keep in sync with zink_descriptor_type since headers can't be cross-included #define ZINK_MAX_DESCRIPTOR_SETS 6 @@ -184,7 +186,6 @@ struct zink_screen { void (*batch_descriptor_deinit)(struct zink_screen *screen, struct zink_batch_state *bs); bool (*descriptors_init)(struct zink_context *ctx); void (*descriptors_deinit)(struct zink_context *ctx); - enum zink_descriptor_mode descriptor_mode; struct { bool dual_color_blend_by_location;