diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/intel/vulkan/anv_pipeline.c | 58 | ||||
-rw-r--r-- | src/intel/vulkan/anv_pipeline_cache.c | 27 | ||||
-rw-r--r-- | src/intel/vulkan/anv_private.h | 6 |
3 files changed, 46 insertions, 45 deletions
diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c index 9d0dc69fa84..4bd4b4856cf 100644 --- a/src/intel/vulkan/anv_pipeline.c +++ b/src/intel/vulkan/anv_pipeline.c @@ -331,6 +331,34 @@ populate_cs_prog_key(const struct gen_device_info *devinfo, populate_sampler_prog_key(devinfo, &key->tex); } +static void +anv_pipeline_hash_shader(struct anv_pipeline *pipeline, + struct anv_shader_module *module, + const char *entrypoint, + gl_shader_stage stage, + const VkSpecializationInfo *spec_info, + const void *key, size_t key_size, + unsigned char *sha1_out) +{ + struct mesa_sha1 ctx; + + _mesa_sha1_init(&ctx); + if (pipeline->layout) { + _mesa_sha1_update(&ctx, pipeline->layout->sha1, + sizeof(pipeline->layout->sha1)); + } + _mesa_sha1_update(&ctx, module->sha1, sizeof(module->sha1)); + _mesa_sha1_update(&ctx, entrypoint, strlen(entrypoint)); + _mesa_sha1_update(&ctx, &stage, sizeof(stage)); + if (spec_info) { + _mesa_sha1_update(&ctx, spec_info->pMapEntries, + spec_info->mapEntryCount * sizeof(*spec_info->pMapEntries)); + _mesa_sha1_update(&ctx, spec_info->pData, spec_info->dataSize); + } + _mesa_sha1_update(&ctx, key, key_size); + _mesa_sha1_final(&ctx, sha1_out); +} + static nir_shader * anv_pipeline_compile(struct anv_pipeline *pipeline, struct anv_shader_module *module, @@ -463,8 +491,9 @@ anv_pipeline_compile_vs(struct anv_pipeline *pipeline, populate_vs_prog_key(&pipeline->device->info, &key); if (cache) { - anv_hash_shader(sha1, &key, sizeof(key), module, entrypoint, - pipeline->layout, spec_info); + anv_pipeline_hash_shader(pipeline, module, entrypoint, + MESA_SHADER_VERTEX, spec_info, + &key, sizeof(key), sha1); bin = anv_pipeline_cache_search(cache, sha1, 20); } @@ -587,10 +616,12 @@ anv_pipeline_compile_tcs_tes(struct anv_pipeline *pipeline, tcs_key.input_vertices = info->pTessellationState->patchControlPoints; if (cache) { - anv_hash_shader(tcs_sha1, &tcs_key, sizeof(tcs_key), tcs_module, - tcs_entrypoint, pipeline->layout, tcs_spec_info); - anv_hash_shader(tes_sha1, &tes_key, sizeof(tes_key), tes_module, - tes_entrypoint, pipeline->layout, tes_spec_info); + anv_pipeline_hash_shader(pipeline, tcs_module, tcs_entrypoint, + MESA_SHADER_TESS_CTRL, tcs_spec_info, + &tcs_key, sizeof(tcs_key), tcs_sha1); + anv_pipeline_hash_shader(pipeline, tes_module, tes_entrypoint, + MESA_SHADER_TESS_EVAL, tes_spec_info, + &tes_key, sizeof(tes_key), tes_sha1); memcpy(&tcs_sha1[20], tes_sha1, 20); memcpy(&tes_sha1[20], tcs_sha1, 20); tcs_bin = anv_pipeline_cache_search(cache, tcs_sha1, sizeof(tcs_sha1)); @@ -724,8 +755,9 @@ anv_pipeline_compile_gs(struct anv_pipeline *pipeline, populate_gs_prog_key(&pipeline->device->info, &key); if (cache) { - anv_hash_shader(sha1, &key, sizeof(key), module, entrypoint, - pipeline->layout, spec_info); + anv_pipeline_hash_shader(pipeline, module, entrypoint, + MESA_SHADER_GEOMETRY, spec_info, + &key, sizeof(key), sha1); bin = anv_pipeline_cache_search(cache, sha1, 20); } @@ -801,8 +833,9 @@ anv_pipeline_compile_fs(struct anv_pipeline *pipeline, populate_wm_prog_key(pipeline, info, &key); if (cache) { - anv_hash_shader(sha1, &key, sizeof(key), module, entrypoint, - pipeline->layout, spec_info); + anv_pipeline_hash_shader(pipeline, module, entrypoint, + MESA_SHADER_FRAGMENT, spec_info, + &key, sizeof(key), sha1); bin = anv_pipeline_cache_search(cache, sha1, 20); } @@ -923,8 +956,9 @@ anv_pipeline_compile_cs(struct anv_pipeline *pipeline, populate_cs_prog_key(&pipeline->device->info, &key); if (cache) { - anv_hash_shader(sha1, &key, sizeof(key), module, entrypoint, - pipeline->layout, spec_info); + anv_pipeline_hash_shader(pipeline, module, entrypoint, + MESA_SHADER_COMPUTE, spec_info, + &key, sizeof(key), sha1); bin = anv_pipeline_cache_search(cache, sha1, 20); } diff --git a/src/intel/vulkan/anv_pipeline_cache.c b/src/intel/vulkan/anv_pipeline_cache.c index 3cfe3ec187e..c3a62f538e3 100644 --- a/src/intel/vulkan/anv_pipeline_cache.c +++ b/src/intel/vulkan/anv_pipeline_cache.c @@ -21,7 +21,6 @@ * IN THE SOFTWARE. */ -#include "util/mesa-sha1.h" #include "util/hash_table.h" #include "util/debug.h" #include "anv_private.h" @@ -198,32 +197,6 @@ anv_pipeline_cache_finish(struct anv_pipeline_cache *cache) } } -void -anv_hash_shader(unsigned char *hash, const void *key, size_t key_size, - struct anv_shader_module *module, - const char *entrypoint, - const struct anv_pipeline_layout *pipeline_layout, - const VkSpecializationInfo *spec_info) -{ - struct mesa_sha1 ctx; - - _mesa_sha1_init(&ctx); - _mesa_sha1_update(&ctx, key, key_size); - _mesa_sha1_update(&ctx, module->sha1, sizeof(module->sha1)); - _mesa_sha1_update(&ctx, entrypoint, strlen(entrypoint)); - if (pipeline_layout) { - _mesa_sha1_update(&ctx, pipeline_layout->sha1, - sizeof(pipeline_layout->sha1)); - } - /* hash in shader stage, pipeline layout? */ - 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_final(&ctx, hash); -} - static struct anv_shader_bin * anv_pipeline_cache_search_locked(struct anv_pipeline_cache *cache, const void *key_data, uint32_t key_size) diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index b12d4a55cc8..4e742170da2 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1712,12 +1712,6 @@ struct anv_shader_module { char data[0]; }; -void anv_hash_shader(unsigned char *hash, const void *key, size_t key_size, - struct anv_shader_module *module, - const char *entrypoint, - const struct anv_pipeline_layout *pipeline_layout, - const VkSpecializationInfo *spec_info); - static inline gl_shader_stage vk_to_mesa_shader_stage(VkShaderStageFlagBits vk_stage) { |