zink: store shader key to shader module
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12842>
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 @@
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 @@
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 {