glsl: pass shader source keys to the disk cache
We don't actually write them to disk here. That will happen in the following commit. Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
@@ -1406,23 +1406,37 @@ shader_cache_write_program_metadata(struct gl_context *ctx,
|
||||
|
||||
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
|
||||
|
@@ -268,7 +268,7 @@ test_put_and_get(void)
|
||||
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.
|
||||
@@ -283,7 +283,7 @@ test_put_and_get(void)
|
||||
|
||||
/* 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.
|
||||
@@ -324,7 +324,7 @@ test_put_and_get(void)
|
||||
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);
|
||||
|
||||
@@ -367,8 +367,8 @@ test_put_and_get(void)
|
||||
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.
|
||||
@@ -394,7 +394,7 @@ test_put_and_get(void)
|
||||
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);
|
||||
|
||||
|
@@ -213,7 +213,7 @@ static bool si_shader_cache_insert_shader(struct si_screen *sscreen,
|
||||
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;
|
||||
|
@@ -47,7 +47,7 @@ write_tgsi_to_cache(struct blob *blob, struct pipe_shader_state *tgsi,
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -768,7 +768,8 @@ deflate_and_write_to_disk(const void *in_data, size_t in_data_size, int dest,
|
||||
|
||||
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);
|
||||
@@ -931,10 +932,11 @@ cache_put(void *job, int thread_index)
|
||||
|
||||
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);
|
||||
|
@@ -141,7 +141,8 @@ disk_cache_remove(struct disk_cache *cache, const cache_key key);
|
||||
*/
|
||||
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>.
|
||||
@@ -207,7 +208,8 @@ disk_cache_destroy(struct disk_cache *cache) {
|
||||
|
||||
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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user