From 5489b1a8ffaef8412bd116983554eb574d8c515b Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 12 Aug 2022 13:28:32 -0400 Subject: [PATCH] zink: generate sha1 for compute programs this got broken in the move to u_live_shader_cache, which does not handle compute programs and thus does not populate the shader's sha1 cc: mesa-stable Reviewed-by: Dave Airlie Part-of: --- src/gallium/drivers/zink/zink_program.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/gallium/drivers/zink/zink_program.c b/src/gallium/drivers/zink/zink_program.c index 39e51998d80..d615c329424 100644 --- a/src/gallium/drivers/zink/zink_program.c +++ b/src/gallium/drivers/zink/zink_program.c @@ -37,6 +37,7 @@ #include "util/u_debug.h" #include "util/u_memory.h" #include "util/u_prim.h" +#include "nir_serialize.h" /* for pipeline cache */ #define XXH_INLINE_ALL @@ -769,7 +770,15 @@ create_compute_program(struct zink_context *ctx, nir_shader *nir) equals_compute_pipeline_state_local_size : equals_compute_pipeline_state); - memcpy(comp->base.sha1, comp->shader->base.sha1, sizeof(comp->shader->base.sha1)); + struct blob blob = {0}; + blob_init(&blob); + nir_serialize(&blob, nir, true); + + struct mesa_sha1 sha1_ctx; + _mesa_sha1_init(&sha1_ctx); + _mesa_sha1_update(&sha1_ctx, blob.data, blob.size); + _mesa_sha1_final(&sha1_ctx, comp->base.sha1); + blob_finish(&blob); if (!zink_descriptor_program_init(ctx, &comp->base)) goto fail;