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