Mesa (master): radv: make sure gs copy shader is retrieved from the cache with the variant
Timothy Arceri
tarceri at kemper.freedesktop.org
Fri Mar 17 05:17:31 UTC 2017
Module: Mesa
Branch: master
Commit: 72ab7bb76552c27266bc8615b692969bb6277644
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=72ab7bb76552c27266bc8615b692969bb6277644
Author: Timothy Arceri <tarceri at itsqueeze.com>
Date: Wed Mar 15 13:07:40 2017 +1100
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 <bas at basnieuwenhuizen.nl>
---
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 73a377657b..0eeb53592c 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(
More information about the mesa-commit
mailing list