From 19e99e46dbc90980efc9a3bd8e8bfd93017dfaa9 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 1 Sep 2021 16:12:54 -0400 Subject: [PATCH] zink: store shader key to shader module Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_program.c | 7 ++++++- src/gallium/drivers/zink/zink_program.h | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 7db2b50..ec2d5e1 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -160,12 +160,17 @@ get_shader_module_for_stage(struct zink_context *ctx, struct zink_screen *screen ralloc_free(keybox); zm = entry->data; } else { - zm = CALLOC_STRUCT(zink_shader_module); + zm = malloc(sizeof(struct zink_shader_module) + key->size); if (!zm) { ralloc_free(keybox); return NULL; } zm->hash = hash; + zm->num_uniforms = base_size; + zm->key_size = key->size; + if (base_size) + memcpy(zm->uniforms, &key->base, base_size * sizeof(uint32_t)); + memcpy(zm->key, key, key->size); mod = zink_shader_compile(screen, zs, prog->nir[stage], key); if (!mod) { ralloc_free(keybox); diff --git a/src/gallium/drivers/zink/zink_program.h b/src/gallium/drivers/zink/zink_program.h index 3ccbaa2..bd390a1 100644 --- a/src/gallium/drivers/zink/zink_program.h +++ b/src/gallium/drivers/zink/zink_program.h @@ -67,6 +67,10 @@ struct zink_shader_module { VkShaderModule shader; uint32_t hash; bool default_variant; + uint8_t num_uniforms; + uint8_t key_size; + uint32_t uniforms[MAX_INLINABLE_UNIFORMS]; + uint8_t key[0]; }; struct zink_program { -- 2.7.4