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 {