zink: store shader key to shader module
authorMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Wed, 1 Sep 2021 20:12:54 +0000 (16:12 -0400)
committerMike Blumenkrantz <michael.blumenkrantz@gmail.com>
Thu, 16 Sep 2021 03:52:32 +0000 (23:52 -0400)
Reviewed-by: Dave Airlie <airlied@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12842>

src/gallium/drivers/zink/zink_program.c
src/gallium/drivers/zink/zink_program.h

index 7db2b50..ec2d5e1 100644 (file)
@@ -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);
index 3ccbaa2..bd390a1 100644 (file)
@@ -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 {