vulkan/pipeline_cache: add cache parameter to deserialize() function

This allows for secondary cache lookups during deserialization.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/21967>
This commit is contained in:
Daniel Schürmann
2023-03-19 23:56:07 +01:00
committed by Marge Bot
parent a6360a3203
commit 53eb3ad375
6 changed files with 33 additions and 28 deletions

View 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);

View 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);

View 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);

View 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 = {

View 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),

View 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);