From 72ab7bb76552c27266bc8615b692969bb6277644 Mon Sep 17 00:00:00 2001 From: Timothy Arceri Date: Wed, 15 Mar 2017 13:07:40 +1100 Subject: [PATCH] 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 --- src/amd/vulkan/radv_pipeline.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/amd/vulkan/radv_pipeline.c b/src/amd/vulkan/radv_pipeline.c index 73a3776..0eeb535 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( -- 2.7.4