Mesa (master): radv: make use of on-disk cache

Timothy Arceri tarceri at kemper.freedesktop.org
Wed Oct 11 21:53:03 UTC 2017


Module: Mesa
Branch: master
Commit: fd24be134ffda15c82d163cf9b7e9da8d65407d4
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=fd24be134ffda15c82d163cf9b7e9da8d65407d4

Author: Timothy Arceri <tarceri at itsqueeze.com>
Date:   Wed Oct 11 12:10:31 2017 +1100

radv: make use of on-disk cache

If the app provided in-memory pipeline cache doesn't yet contain
what we are looking for, or it doesn't provide one at all then we
fallback to the on-disk cache.

Reviewed-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>

---

 src/amd/vulkan/radv_pipeline_cache.c | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/amd/vulkan/radv_pipeline_cache.c b/src/amd/vulkan/radv_pipeline_cache.c
index 625c58e66c..94437e2b30 100644
--- a/src/amd/vulkan/radv_pipeline_cache.c
+++ b/src/amd/vulkan/radv_pipeline_cache.c
@@ -23,6 +23,7 @@
 
 #include "util/mesa-sha1.h"
 #include "util/debug.h"
+#include "util/disk_cache.h"
 #include "util/u_atomic.h"
 #include "radv_debug.h"
 #include "radv_private.h"
@@ -165,8 +166,16 @@ radv_create_shader_variant_from_pipeline_cache(struct radv_device *device,
 	else
 		entry = radv_pipeline_cache_search(device->mem_cache, sha1);
 
-	if (!entry)
-		return NULL;
+	if (!entry) {
+		uint8_t disk_sha1[20];
+		disk_cache_compute_key(device->physical_device->disk_cache,
+				       sha1, 20, disk_sha1);
+		entry = (struct cache_entry *)
+			disk_cache_get(device->physical_device->disk_cache,
+				       disk_sha1, NULL);
+		if (!entry)
+			return NULL;
+	}
 
 	if (!entry->variant) {
 		struct radv_shader_variant *variant;
@@ -301,6 +310,20 @@ radv_pipeline_cache_insert_shader(struct radv_device *device,
 	entry->rsrc1 = variant->rsrc1;
 	entry->rsrc2 = variant->rsrc2;
 	entry->code_size = code_size;
+
+	/* Set variant to NULL so we have reproducible cache items */
+	entry->variant = NULL;
+
+	/* Always add cache items to disk. This will allow collection of
+	 * compiled shaders by third parties such as steam, even if the app
+	 * implements its own pipeline cache.
+	 */
+	uint8_t disk_sha1[20];
+	disk_cache_compute_key(device->physical_device->disk_cache, sha1, 20,
+			       disk_sha1);
+	disk_cache_put(device->physical_device->disk_cache,
+		       disk_sha1, entry, entry_size(entry), NULL);
+
 	entry->variant = variant;
 	p_atomic_inc(&variant->ref_count);
 




More information about the mesa-commit mailing list