From 53eb3ad375bc9147d0ff3a2e584fe7d4d8887b62 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20Sch=C3=BCrmann?= Date: Sun, 19 Mar 2023 23:56:07 +0100 Subject: [PATCH] vulkan/pipeline_cache: add cache parameter to deserialize() function This allows for secondary cache lookups during deserialization. Part-of: --- src/freedreno/vulkan/tu_pipeline.cc | 28 +++++++++++++++++----------- src/intel/vulkan/anv_pipeline_cache.c | 6 +++--- src/intel/vulkan_hasvk/anv_pipeline_cache.c | 6 +++--- src/microsoft/vulkan/dzn_pipeline.c | 12 +++++------- src/vulkan/runtime/vk_pipeline_cache.c | 7 ++++--- src/vulkan/runtime/vk_pipeline_cache.h | 2 +- 6 files changed, 33 insertions(+), 28 deletions(-) diff --git a/src/freedreno/vulkan/tu_pipeline.cc b/src/freedreno/vulkan/tu_pipeline.cc index 886d1fd..bafd17b 100644 --- a/src/freedreno/vulkan/tu_pipeline.cc +++ b/src/freedreno/vulkan/tu_pipeline.cc @@ -2869,8 +2869,9 @@ tu_shaders_serialize(struct vk_pipeline_cache_object *object, struct blob *blob); static struct vk_pipeline_cache_object * -tu_shaders_deserialize(struct vk_device *device, - const void *key_data, size_t key_size, +tu_shaders_deserialize(struct vk_pipeline_cache *cache, + const void *key_data, + size_t key_size, struct blob_reader *blob); static void @@ -2944,11 +2945,13 @@ tu_shaders_serialize(struct vk_pipeline_cache_object *object, } static struct vk_pipeline_cache_object * -tu_shaders_deserialize(struct vk_device *_device, - const void *key_data, size_t key_size, +tu_shaders_deserialize(struct vk_pipeline_cache *cache, + const void *key_data, + size_t key_size, struct blob_reader *blob) { - struct tu_device *dev = container_of(_device, struct tu_device, vk); + struct tu_device *dev = + container_of(cache->base.device, struct tu_device, vk); struct tu_compiled_shaders *shaders = tu_shaders_init(dev, key_data, key_size); @@ -2999,8 +3002,9 @@ tu_nir_shaders_serialize(struct vk_pipeline_cache_object *object, struct blob *blob); static struct vk_pipeline_cache_object * -tu_nir_shaders_deserialize(struct vk_device *device, - const void *key_data, size_t key_size, +tu_nir_shaders_deserialize(struct vk_pipeline_cache *cache, + const void *key_data, + size_t key_size, struct blob_reader *blob); static void @@ -3061,11 +3065,13 @@ tu_nir_shaders_serialize(struct vk_pipeline_cache_object *object, } static struct vk_pipeline_cache_object * -tu_nir_shaders_deserialize(struct vk_device *_device, - const void *key_data, size_t key_size, - struct blob_reader *blob) +tu_nir_shaders_deserialize(struct vk_pipeline_cache *cache, + const void *key_data, + size_t key_size, + struct blob_reader *blob) { - struct tu_device *dev = container_of(_device, struct tu_device, vk); + struct tu_device *dev = + container_of(cache->base.device, struct tu_device, vk); struct tu_nir_shaders *shaders = tu_nir_shaders_init(dev, key_data, key_size); diff --git a/src/intel/vulkan/anv_pipeline_cache.c b/src/intel/vulkan/anv_pipeline_cache.c index 921e6c2..d6fbef8 100644 --- a/src/intel/vulkan/anv_pipeline_cache.c +++ b/src/intel/vulkan/anv_pipeline_cache.c @@ -38,7 +38,7 @@ anv_shader_bin_serialize(struct vk_pipeline_cache_object *object, struct blob *blob); struct vk_pipeline_cache_object * -anv_shader_bin_deserialize(struct vk_device *device, +anv_shader_bin_deserialize(struct vk_pipeline_cache *cache, const void *key_data, size_t key_size, struct blob_reader *blob); @@ -253,12 +253,12 @@ anv_shader_bin_serialize(struct vk_pipeline_cache_object *object, } struct vk_pipeline_cache_object * -anv_shader_bin_deserialize(struct vk_device *vk_device, +anv_shader_bin_deserialize(struct vk_pipeline_cache *cache, const void *key_data, size_t key_size, struct blob_reader *blob) { struct anv_device *device = - container_of(vk_device, struct anv_device, vk); + container_of(cache->base.device, struct anv_device, vk); gl_shader_stage stage = blob_read_uint32(blob); diff --git a/src/intel/vulkan_hasvk/anv_pipeline_cache.c b/src/intel/vulkan_hasvk/anv_pipeline_cache.c index 49fb331..bac8e2d 100644 --- a/src/intel/vulkan_hasvk/anv_pipeline_cache.c +++ b/src/intel/vulkan_hasvk/anv_pipeline_cache.c @@ -36,7 +36,7 @@ anv_shader_bin_serialize(struct vk_pipeline_cache_object *object, struct blob *blob); struct vk_pipeline_cache_object * -anv_shader_bin_deserialize(struct vk_device *device, +anv_shader_bin_deserialize(struct vk_pipeline_cache *cache, const void *key_data, size_t key_size, struct blob_reader *blob); @@ -217,12 +217,12 @@ anv_shader_bin_serialize(struct vk_pipeline_cache_object *object, } struct vk_pipeline_cache_object * -anv_shader_bin_deserialize(struct vk_device *vk_device, +anv_shader_bin_deserialize(struct vk_pipeline_cache *cache, const void *key_data, size_t key_size, struct blob_reader *blob) { struct anv_device *device = - container_of(vk_device, struct anv_device, vk); + container_of(cache->base.device, struct anv_device, vk); gl_shader_stage stage = blob_read_uint32(blob); diff --git a/src/microsoft/vulkan/dzn_pipeline.c b/src/microsoft/vulkan/dzn_pipeline.c index a8c6f2a..0033e11 100644 --- a/src/microsoft/vulkan/dzn_pipeline.c +++ b/src/microsoft/vulkan/dzn_pipeline.c @@ -109,17 +109,15 @@ dzn_cached_blob_create(struct vk_device *device, size_t data_size); static struct vk_pipeline_cache_object * -dzn_cached_blob_deserialize(struct vk_device *device, - const void *key_data, - size_t key_size, - struct blob_reader *blob) +dzn_cached_blob_deserialize(struct vk_pipeline_cache *cache, + const void *key_data, size_t key_size, + struct blob_reader *blob) { size_t data_size = blob->end - blob->current; assert(key_size == SHA1_DIGEST_LENGTH); - return dzn_cached_blob_create(device, key_data, - blob_read_bytes(blob, data_size), - data_size); + return dzn_cached_blob_create(cache->base.device, key_data, + blob_read_bytes(blob, data_size), data_size); } const struct vk_pipeline_cache_object_ops dzn_cached_blob_ops = { diff --git a/src/vulkan/runtime/vk_pipeline_cache.c b/src/vulkan/runtime/vk_pipeline_cache.c index 11398b5..0eb36c0 100644 --- a/src/vulkan/runtime/vk_pipeline_cache.c +++ b/src/vulkan/runtime/vk_pipeline_cache.c @@ -62,7 +62,7 @@ raw_data_object_serialize(struct vk_pipeline_cache_object *object, } static struct vk_pipeline_cache_object * -raw_data_object_deserialize(struct vk_device *device, +raw_data_object_deserialize(struct vk_pipeline_cache *cache, const void *key_data, size_t key_size, struct blob_reader *blob) @@ -77,7 +77,8 @@ raw_data_object_deserialize(struct vk_device *device, const void *data = blob_read_bytes(blob, data_size); struct raw_data_object *data_obj = - raw_data_object_create(device, key_data, key_size, data, data_size); + raw_data_object_create(cache->base.device, key_data, key_size, data, + data_size); return data_obj ? &data_obj->base : NULL; } @@ -285,7 +286,7 @@ vk_pipeline_cache_object_deserialize(struct vk_pipeline_cache *cache, blob_reader_init(&reader, data, data_size); struct vk_pipeline_cache_object *object = - ops->deserialize(cache->base.device, key_data, key_size, &reader); + ops->deserialize(cache, key_data, key_size, &reader); if (object == NULL) { vk_logw(VK_LOG_OBJS(cache), diff --git a/src/vulkan/runtime/vk_pipeline_cache.h b/src/vulkan/runtime/vk_pipeline_cache.h index 99e2b1d..81734de 100644 --- a/src/vulkan/runtime/vk_pipeline_cache.h +++ b/src/vulkan/runtime/vk_pipeline_cache.h @@ -77,7 +77,7 @@ struct vk_pipeline_cache_object_ops { * * This function is optional. */ - struct vk_pipeline_cache_object *(*deserialize)(struct vk_device *device, + struct vk_pipeline_cache_object *(*deserialize)(struct vk_pipeline_cache *cache, const void *key_data, size_t key_size, struct blob_reader *blob); -- 2.7.4