diff --git a/src/util/disk_cache.c b/src/util/disk_cache.c index 8298f9d7b32..034c7bae5c7 100644 --- a/src/util/disk_cache.c +++ b/src/util/disk_cache.c @@ -106,9 +106,6 @@ disk_cache_type_create(const char *gpu_name, uint8_t cache_version = CACHE_VERSION; size_t cv_size = sizeof(cache_version); - if (!disk_cache_enabled()) - return NULL; - /* A ralloc context for transient data during this invocation. */ local = ralloc_context(NULL); if (local == NULL) @@ -122,13 +119,8 @@ disk_cache_type_create(const char *gpu_name, cache->path_init_failed = true; cache->type = DISK_CACHE_NONE; -#ifdef ANDROID - /* Android needs the "disk cache" to be enabled for - * EGL_ANDROID_blob_cache's callbacks to be called, but it doesn't actually - * want any storing to disk to happen inside of the driver. - */ - goto path_fail; -#endif + if (!disk_cache_enabled()) + goto path_fail; char *path = disk_cache_generate_cache_dir(local, gpu_name, driver_id, cache_type); @@ -444,7 +436,7 @@ cache_put(void *job, void *gdata, int thread_index) disk_cache_write_item_to_disk_foz(dc_job); } else if (dc_job->cache->type == DISK_CACHE_DATABASE) { disk_cache_db_write_item_to_disk(dc_job); - } else { + } else if (dc_job->cache->type == DISK_CACHE_MULTI_FILE) { filename = disk_cache_get_cache_filename(dc_job->cache, dc_job->key); if (filename == NULL) goto done; @@ -602,7 +594,7 @@ disk_cache_get(struct disk_cache *cache, const cache_key key, size_t *size) buf = disk_cache_load_item_foz(cache, key, size); } else if (cache->type == DISK_CACHE_DATABASE) { buf = disk_cache_db_load_item(cache, key, size); - } else { + } else if (cache->type == DISK_CACHE_MULTI_FILE) { char *filename = disk_cache_get_cache_filename(cache, key); if (filename) buf = disk_cache_load_item(cache, filename, size); diff --git a/src/util/disk_cache_os.c b/src/util/disk_cache_os.c index 31586fcec39..20467785091 100644 --- a/src/util/disk_cache_os.c +++ b/src/util/disk_cache_os.c @@ -933,6 +933,12 @@ disk_cache_generate_cache_dir(void *mem_ctx, const char *gpu_name, bool disk_cache_enabled() { + /* Disk cache is not enabled for android, but android's EGL layer + * uses EGL_ANDROID_blob_cache to manage the cache itself: + */ + if (DETECT_OS_ANDROID) + return false; + /* If running as a users other than the real user disable cache */ if (geteuid() != getuid()) return false; diff --git a/src/util/tests/cache_test.cpp b/src/util/tests/cache_test.cpp index 32caca86954..97bff40e6de 100644 --- a/src/util/tests/cache_test.cpp +++ b/src/util/tests/cache_test.cpp @@ -154,15 +154,6 @@ test_disk_cache_create(void *mem_ctx, const char *cache_dir_name, struct disk_cache *cache; int err; - /* Before doing anything else, ensure that with - * MESA_SHADER_CACHE_DISABLE set to true, that disk_cache_create returns NULL. - */ - setenv("MESA_SHADER_CACHE_DISABLE", "true", 1); - cache = disk_cache_create("test", driver_id, 0); - EXPECT_EQ(cache, nullptr) << "disk_cache_create with MESA_SHADER_CACHE_DISABLE set"; - - unsetenv("MESA_SHADER_CACHE_DISABLE"); - #ifdef SHADER_CACHE_DISABLE_BY_DEFAULT /* With SHADER_CACHE_DISABLE_BY_DEFAULT, ensure that with * MESA_SHADER_CACHE_DISABLE set to nothing, disk_cache_create returns NULL.