vulkan/pipeline_cache: add cache parameter to deserialize() function
authorDaniel Schürmann <daniel@schuermann.dev>
Sun, 19 Mar 2023 22:56:07 +0000 (23:56 +0100)
committerMarge Bot <emma+marge@anholt.net>
Mon, 10 Apr 2023 09:14:30 +0000 (09:14 +0000)
This allows for secondary cache lookups during deserialization.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21967>

src/freedreno/vulkan/tu_pipeline.cc
src/intel/vulkan/anv_pipeline_cache.c
src/intel/vulkan_hasvk/anv_pipeline_cache.c
src/microsoft/vulkan/dzn_pipeline.c
src/vulkan/runtime/vk_pipeline_cache.c
src/vulkan/runtime/vk_pipeline_cache.h

index 886d1fd..bafd17b 100644 (file)
@@ -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);
 
index 921e6c2..d6fbef8 100644 (file)
@@ -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);
 
index 49fb331..bac8e2d 100644 (file)
@@ -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);
 
index a8c6f2a..0033e11 100644 (file)
@@ -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 = {
index 11398b5..0eb36c0 100644 (file)
@@ -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),
index 99e2b1d..81734de 100644 (file)
@@ -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);