write_program_resource_list(metadata, prog);
+ struct cache_item_metadata cache_item_metadata;
+ cache_item_metadata.type = CACHE_ITEM_TYPE_GLSL;
+ cache_item_metadata.keys =
+ (cache_key *) malloc(prog->NumShaders * sizeof(cache_key));
+ cache_item_metadata.num_keys = prog->NumShaders;
+
+ if (!cache_item_metadata.keys)
+ goto fail;
+
char sha1_buf[41];
for (unsigned i = 0; i < prog->NumShaders; i++) {
disk_cache_put_key(cache, prog->Shaders[i]->sha1);
+ memcpy(cache_item_metadata.keys[i], prog->Shaders[i]->sha1,
+ sizeof(cache_key));
if (ctx->_Shader->Flags & GLSL_CACHE_INFO) {
_mesa_sha1_format(sha1_buf, prog->Shaders[i]->sha1);
fprintf(stderr, "marking shader: %s\n", sha1_buf);
}
}
- disk_cache_put(cache, prog->data->sha1, metadata->data, metadata->size);
-
- blob_destroy(metadata);
+ disk_cache_put(cache, prog->data->sha1, metadata->data, metadata->size,
+ &cache_item_metadata);
if (ctx->_Shader->Flags & GLSL_CACHE_INFO) {
_mesa_sha1_format(sha1_buf, prog->data->sha1);
fprintf(stderr, "putting program metadata in cache: %s\n", sha1_buf);
}
+
+fail:
+ free(cache_item_metadata.keys);
+ blob_destroy(metadata);
}
bool
expect_equal(size, 0, "disk_cache_get with non-existent item (size)");
/* Simple test of put and get. */
- disk_cache_put(cache, blob_key, blob, sizeof(blob));
+ disk_cache_put(cache, blob_key, blob, sizeof(blob), NULL);
/* disk_cache_put() hands things off to a thread give it some time to
* finish.
/* Test put and get of a second item. */
disk_cache_compute_key(cache, string, sizeof(string), string_key);
- disk_cache_put(cache, string_key, string, sizeof(string));
+ disk_cache_put(cache, string_key, string, sizeof(string), NULL);
/* disk_cache_put() hands things off to a thread give it some time to
* finish.
disk_cache_compute_key(cache, one_KB, 1024, one_KB_key);
one_KB_key[0] = blob_key[0];
- disk_cache_put(cache, one_KB_key, one_KB, 1024);
+ disk_cache_put(cache, one_KB_key, one_KB, 1024, NULL);
free(one_KB);
setenv("MESA_GLSL_CACHE_MAX_SIZE", "1M", 1);
cache = disk_cache_create("test", "make_check", 0);
- disk_cache_put(cache, blob_key, blob, sizeof(blob));
- disk_cache_put(cache, string_key, string, sizeof(string));
+ disk_cache_put(cache, blob_key, blob, sizeof(blob), NULL);
+ disk_cache_put(cache, string_key, string, sizeof(string), NULL);
/* disk_cache_put() hands things off to a thread give it some time to
* finish.
disk_cache_compute_key(cache, one_MB, 1024 * 1024, one_MB_key);
one_MB_key[0] = blob_key[0];
- disk_cache_put(cache, one_MB_key, one_MB, 1024 * 1024);
+ disk_cache_put(cache, one_MB_key, one_MB, 1024 * 1024, NULL);
free(one_MB);
disk_cache_compute_key(sscreen->b.disk_shader_cache, tgsi_binary,
*((uint32_t *)tgsi_binary), key);
disk_cache_put(sscreen->b.disk_shader_cache, key, hw_binary,
- *((uint32_t *) hw_binary));
+ *((uint32_t *) hw_binary), NULL);
}
return true;
blob_write_bytes(blob, tgsi->tokens,
num_tokens * sizeof(struct tgsi_token));
- disk_cache_put(st->ctx->Cache, sha1, blob->data, blob->size);
+ disk_cache_put(st->ctx->Cache, sha1, blob->data, blob->size, NULL);
}
/**
static struct disk_cache_put_job *
create_put_job(struct disk_cache *cache, const cache_key key,
- const void *data, size_t size)
+ const void *data, size_t size,
+ struct cache_item_metadata *cache_item_metadata)
{
struct disk_cache_put_job *dc_job = (struct disk_cache_put_job *)
malloc(sizeof(struct disk_cache_put_job) + size);
void
disk_cache_put(struct disk_cache *cache, const cache_key key,
- const void *data, size_t size)
+ const void *data, size_t size,
+ struct cache_item_metadata *cache_item_metadata)
{
struct disk_cache_put_job *dc_job =
- create_put_job(cache, key, data, size);
+ create_put_job(cache, key, data, size, cache_item_metadata);
if (dc_job) {
util_queue_fence_init(&dc_job->fence);
*/
void
disk_cache_put(struct disk_cache *cache, const cache_key key,
- const void *data, size_t size);
+ const void *data, size_t size,
+ struct cache_item_metadata *cache_item_metadata);
/**
* Retrieve an item previously stored in the cache with the name <key>.
static inline void
disk_cache_put(struct disk_cache *cache, const cache_key key,
- const void *data, size_t size)
+ const void *data, size_t size,
+ struct cache_item_metadata *cache_item_metadata)
{
return;
}