From: Timothy Arceri Date: Wed, 15 Mar 2017 02:07:40 +0000 (+1100) Subject: radv: make sure gs copy shader is retrieved from the cache with the variant X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=72ab7bb76552c27266bc8615b692969bb6277644;p=mesa.git radv: make sure gs copy shader is retrieved from the cache with the variant Apps can limit the size of the cache via VkAllocationCallbacks so we can't be sure that both are always in the cache. Reviewed-by: Bas Nieuwenhuizen --- diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 73a377657ba..0eeb53592cf 100644 --- a/src/amd/vulkan/radv_pipeline.c +++ b/src/amd/vulkan/radv_pipeline.c @@ -539,7 +539,9 @@ radv_pipeline_compile(struct radv_pipeline *pipeline, cache, gs_copy_sha1); } - if (variant) + + if (variant && + (stage != MESA_SHADER_GEOMETRY || pipeline->gs_copy_shader)) return variant; nir = radv_shader_compile_to_nir(pipeline->device, @@ -548,10 +550,13 @@ radv_pipeline_compile(struct radv_pipeline *pipeline, if (nir == NULL) return NULL; - variant = radv_shader_variant_create(pipeline->device, nir, layout, key, - &code, &code_size, dump); + if (!variant) { + variant = radv_shader_variant_create(pipeline->device, nir, + layout, key, &code, + &code_size, dump); + } - if (stage == MESA_SHADER_GEOMETRY) { + if (stage == MESA_SHADER_GEOMETRY && !pipeline->gs_copy_shader) { void *gs_copy_code = NULL; unsigned gs_copy_code_size = 0; pipeline->gs_copy_shader = radv_pipeline_create_gs_copy_shader(