We no longer need a string, so can just pass the timestamps as a blob to reduce amount of data that needs to be hashed into the keys. The argument is also renamed to version_blob because the cache doesn't really care if it's timestamps, build id or something else.
Signed-off-by: Grazvydas Ignotas <nota...@gmail.com> --- src/compiler/glsl/tests/cache_test.c | 21 +++++++------- src/gallium/drivers/radeon/r600_pipe_common.c | 41 ++++++++++++--------------- src/util/disk_cache.c | 7 +++-- src/util/disk_cache.h | 6 ++-- 4 files changed, 37 insertions(+), 38 deletions(-) diff --git a/src/compiler/glsl/tests/cache_test.c b/src/compiler/glsl/tests/cache_test.c index b604943..f923e8d 100644 --- a/src/compiler/glsl/tests/cache_test.c +++ b/src/compiler/glsl/tests/cache_test.c @@ -148,6 +148,7 @@ check_directories_created(char *cache_dir) } #define CACHE_TEST_TMP "./cache-test-tmp" +static const char version_blob[] = "make_check_version"; static void test_disk_cache_create(void) @@ -159,7 +160,7 @@ test_disk_cache_create(void) * MESA_GLSL_CACHE_DISABLE set, that disk_cache_create returns NULL. */ setenv("MESA_GLSL_CACHE_DISABLE", "1", 1); - cache = disk_cache_create("test", "make_check"); + cache = disk_cache_create("test", version_blob, sizeof(version_blob)); expect_null(cache, "disk_cache_create with MESA_GLSL_CACHE_DISABLE set"); unsetenv("MESA_GLSL_CACHE_DISABLE"); @@ -170,14 +171,14 @@ test_disk_cache_create(void) unsetenv("MESA_GLSL_CACHE_DIR"); unsetenv("XDG_CACHE_HOME"); - cache = disk_cache_create("test", "make_check"); + cache = disk_cache_create("test", version_blob, sizeof(version_blob)); expect_non_null(cache, "disk_cache_create with no environment variables"); disk_cache_destroy(cache); /* Test with XDG_CACHE_HOME set */ setenv("XDG_CACHE_HOME", CACHE_TEST_TMP "/xdg-cache-home", 1); - cache = disk_cache_create("test", "make_check"); + cache = disk_cache_create("test", version_blob, sizeof(version_blob)); expect_null(cache, "disk_cache_create with XDG_CACHE_HOME set with" "a non-existing parent directory"); @@ -187,7 +188,7 @@ test_disk_cache_create(void) get_arch_bitness_str(), "/test"); mkdir(CACHE_TEST_TMP, 0755); - cache = disk_cache_create("test", "make_check"); + cache = disk_cache_create("test", version_blob, sizeof(version_blob)); expect_non_null(cache, "disk_cache_create with XDG_CACHE_HOME set"); check_directories_created(expected_dir_h); @@ -199,7 +200,7 @@ test_disk_cache_create(void) expect_equal(err, 0, "Removing " CACHE_TEST_TMP); setenv("MESA_GLSL_CACHE_DIR", CACHE_TEST_TMP "/mesa-glsl-cache-dir", 1); - cache = disk_cache_create("test", "make_check"); + cache = disk_cache_create("test", version_blob, sizeof(version_blob)); expect_null(cache, "disk_cache_create with MESA_GLSL_CACHE_DIR set with" "a non-existing parent directory"); @@ -208,7 +209,7 @@ test_disk_cache_create(void) "/test"); mkdir(CACHE_TEST_TMP, 0755); - cache = disk_cache_create("test", "make_check"); + cache = disk_cache_create("test", version_blob, sizeof(version_blob)); expect_non_null(cache, "disk_cache_create with MESA_GLSL_CACHE_DIR set"); check_directories_created(expected_dir_h); @@ -265,7 +266,7 @@ test_put_and_get(void) uint8_t one_KB_key[20], one_MB_key[20]; int count; - cache = disk_cache_create("test", "make_check"); + cache = disk_cache_create("test", version_blob, sizeof(version_blob)); disk_cache_compute_key(cache, blob, sizeof(blob), blob_key); @@ -307,7 +308,7 @@ test_put_and_get(void) disk_cache_destroy(cache); setenv("MESA_GLSL_CACHE_MAX_SIZE", "1K", 1); - cache = disk_cache_create("test", "make_check"); + cache = disk_cache_create("test", version_blob, sizeof(version_blob)); one_KB = calloc(1, 1024); @@ -372,7 +373,7 @@ test_put_and_get(void) disk_cache_destroy(cache); setenv("MESA_GLSL_CACHE_MAX_SIZE", "1M", 1); - cache = disk_cache_create("test", "make_check"); + cache = disk_cache_create("test", version_blob, sizeof(version_blob)); disk_cache_put(cache, blob_key, blob, sizeof(blob)); disk_cache_put(cache, string_key, string, sizeof(string)); @@ -447,7 +448,7 @@ test_put_key_and_get_key(void) { 0, 1, 42, 43, 44, 45, 46, 47, 48, 49, 50, 55, 52, 53, 54, 55, 56, 57, 58, 59}; - cache = disk_cache_create("test", "make_check"); + cache = disk_cache_create("test", version_blob, sizeof(version_blob)); /* First test that disk_cache_has_key returns false before disk_cache_put_key */ result = disk_cache_has_key(cache, key_a); diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c index b3b925e..9e21d38 100644 --- a/src/gallium/drivers/radeon/r600_pipe_common.c +++ b/src/gallium/drivers/radeon/r600_pipe_common.c @@ -790,31 +790,26 @@ static void r600_disk_cache_create(struct r600_common_screen *rscreen) (DBG_FS | DBG_VS | DBG_TCS | DBG_TES | DBG_GS | DBG_PS | DBG_CS)) return; - uint32_t mesa_timestamp; - if (disk_cache_get_function_timestamp(r600_disk_cache_create, - &mesa_timestamp)) { - char *timestamp_str; - int res = -1; - if (rscreen->chip_class < SI) { - res = asprintf(×tamp_str, "%u",mesa_timestamp); - } + struct { + uint32_t mesa; + uint32_t llvm; + } timestamps = {}; + size_t size; + if (!disk_cache_get_function_timestamp(r600_disk_cache_create, + ×tamps.mesa)) + return; + size = sizeof(timestamps.mesa); + #if HAVE_LLVM - else { - uint32_t llvm_timestamp; - if (disk_cache_get_function_timestamp(LLVMInitializeAMDGPUTargetInfo, - &llvm_timestamp)) { - res = asprintf(×tamp_str, "%u_%u", - mesa_timestamp, llvm_timestamp); - } - } -#endif - if (res != -1) { - rscreen->disk_shader_cache = - disk_cache_create(r600_get_chip_name(rscreen), - timestamp_str); - free(timestamp_str); - } + if (rscreen->chip_class >= SI) { + if (!disk_cache_get_function_timestamp(LLVMInitializeAMDGPUTargetInfo, + ×tamps.llvm)) + return; + size = sizeof(timestamps); } +#endif + rscreen->disk_shader_cache = disk_cache_create(r600_get_chip_name(rscreen), + ×tamps, size); } static struct disk_cache *r600_get_disk_shader_cache(struct pipe_screen *pscreen) diff --git a/src/util/disk_cache.c b/src/util/disk_cache.c index 76c2df9..5b249d9 100644 --- a/src/util/disk_cache.c +++ b/src/util/disk_cache.c @@ -182,7 +182,8 @@ create_mesa_cache_dir(void *mem_ctx, const char *path, const char *gpu_name) } struct disk_cache * -disk_cache_create(const char *gpu_name, const char *timestamp) +disk_cache_create(const char *gpu_name, const void *version_blob, + size_t version_blob_size) { void *local; struct disk_cache *cache = NULL; @@ -274,11 +275,11 @@ disk_cache_create(const char *gpu_name, const char *timestamp) if (cache == NULL) goto fail; - cache->key_blob_size = strlen(timestamp); + cache->key_blob_size = version_blob_size; cache->key_blob = ralloc_size(cache, cache->key_blob_size); if (cache->key_blob == NULL) goto fail; - memcpy(cache->key_blob, timestamp, cache->key_blob_size); + memcpy(cache->key_blob, version_blob, version_blob_size); cache->path = ralloc_strdup(cache, path); if (cache->path == NULL) diff --git a/src/util/disk_cache.h b/src/util/disk_cache.h index e3663a6..98019c1 100644 --- a/src/util/disk_cache.h +++ b/src/util/disk_cache.h @@ -110,7 +110,8 @@ disk_cache_get_function_timestamp(void *ptr, uint32_t* timestamp) * assistance in computing SHA-1 signatures. */ struct disk_cache * -disk_cache_create(const char *gpu_name, const char *timestamp); +disk_cache_create(const char *gpu_name, const void *version_blob, + size_t version_blob_size); /** * Destroy a cache object, (freeing all associated resources). @@ -188,7 +189,8 @@ disk_cache_compute_key(struct disk_cache *cache, const void *data, size_t size, #else static inline struct disk_cache * -disk_cache_create(const char *gpu_name, const char *timestamp) +disk_cache_create(const char *gpu_name, const void *version_blob, + size_t version_blob_size) { return NULL; } -- 2.7.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev