Module: Mesa Branch: master Commit: ed9218f1541ff35fb34b5e7dd60a509b5a4144a4 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ed9218f1541ff35fb34b5e7dd60a509b5a4144a4
Author: Bas Nieuwenhuizen <b...@basnieuwenhuizen.nl> Date: Sat Oct 14 12:42:40 2017 +1100 radv: add radv_hash_shaders() helper This will be used to create a hash of the combined shaders in the pipeline. Signed-off-by: Timothy Arceri <tarc...@itsqueeze.com> Acked-by: Dave Airlie <airl...@redhat.com> --- src/amd/vulkan/radv_pipeline_cache.c | 33 +++++++++++++++++++++++++++++++++ src/amd/vulkan/radv_private.h | 7 +++++++ 2 files changed, 40 insertions(+) diff --git a/src/amd/vulkan/radv_pipeline_cache.c b/src/amd/vulkan/radv_pipeline_cache.c index d721f8b9f9..7924be0c90 100644 --- a/src/amd/vulkan/radv_pipeline_cache.c +++ b/src/amd/vulkan/radv_pipeline_cache.c @@ -122,6 +122,39 @@ radv_hash_shader(unsigned char *hash, struct radv_shader_module *module, _mesa_sha1_final(&ctx, hash); } +void +radv_hash_shaders(unsigned char *hash, + const VkPipelineShaderStageCreateInfo **stages, + const struct radv_pipeline_layout *layout, + const struct ac_shader_variant_key *keys, + uint32_t flags) +{ + struct mesa_sha1 ctx; + + _mesa_sha1_init(&ctx); + if (keys) + _mesa_sha1_update(&ctx, keys, sizeof(*keys) * MESA_SHADER_STAGES); + if (layout) + _mesa_sha1_update(&ctx, layout->sha1, sizeof(layout->sha1)); + + for (int i = 0; i < MESA_SHADER_STAGES; ++i) { + if (stages[i]) { + RADV_FROM_HANDLE(radv_shader_module, module, stages[i]->module); + const VkSpecializationInfo *spec_info = stages[i]->pSpecializationInfo; + + _mesa_sha1_update(&ctx, module->sha1, sizeof(module->sha1)); + _mesa_sha1_update(&ctx, stages[i]->pName, strlen(stages[i]->pName)); + if (spec_info) { + _mesa_sha1_update(&ctx, spec_info->pMapEntries, + spec_info->mapEntryCount * sizeof spec_info->pMapEntries[0]); + _mesa_sha1_update(&ctx, spec_info->pData, spec_info->dataSize); + } + } + } + _mesa_sha1_update(&ctx, &flags, 4); + _mesa_sha1_final(&ctx, hash); +} + static struct cache_entry * radv_pipeline_cache_search_unlocked(struct radv_pipeline_cache *cache, diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 5be0706340..3fb182b4e3 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -986,6 +986,13 @@ radv_hash_shader(unsigned char *hash, struct radv_shader_module *module, const struct ac_shader_variant_key *key, uint32_t flags); +void +radv_hash_shaders(unsigned char *hash, + const VkPipelineShaderStageCreateInfo **stages, + const struct radv_pipeline_layout *layout, + const struct ac_shader_variant_key *keys, + uint32_t flags); + static inline gl_shader_stage vk_to_mesa_shader_stage(VkShaderStageFlagBits vk_stage) { _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit