From ecf5c5c46d3fac254c1acc157aee868f2cb2bd74 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 30 Jan 2023 20:11:59 -0600 Subject: [PATCH] vulkan/meta: Add key types Part-of: --- src/vulkan/runtime/vk_meta.c | 8 ++++++++ src/vulkan/runtime/vk_meta.h | 7 +++++++ src/vulkan/runtime/vk_meta_clear.c | 2 ++ 3 files changed, 17 insertions(+) diff --git a/src/vulkan/runtime/vk_meta.c b/src/vulkan/runtime/vk_meta.c index 30e22ec3707..b9b66c16ce7 100644 --- a/src/vulkan/runtime/vk_meta.c +++ b/src/vulkan/runtime/vk_meta.c @@ -134,6 +134,10 @@ vk_meta_lookup_object(struct vk_meta_device *meta, VkObjectType obj_type, const void *key_data, size_t key_size) { + assert(key_size >= sizeof(enum vk_meta_object_key_type)); + assert(*(enum vk_meta_object_key_type *)key_data != + VK_META_OBJECT_KEY_TYPE_INVALD); + struct cache_key key = { .obj_type = obj_type, .key_size = key_size, @@ -163,6 +167,10 @@ vk_meta_cache_object(struct vk_device *device, VkObjectType obj_type, uint64_t handle) { + assert(key_size >= sizeof(enum vk_meta_object_key_type)); + assert(*(enum vk_meta_object_key_type *)key_data != + VK_META_OBJECT_KEY_TYPE_INVALD); + struct cache_key *key = cache_key_create(obj_type, key_data, key_size); struct vk_object_base *obj = vk_object_base_from_u64_handle(handle, obj_type); diff --git a/src/vulkan/runtime/vk_meta.h b/src/vulkan/runtime/vk_meta.h index 74f6948a9fa..14786997b71 100644 --- a/src/vulkan/runtime/vk_meta.h +++ b/src/vulkan/runtime/vk_meta.h @@ -74,6 +74,13 @@ VkResult vk_meta_device_init(struct vk_device *device, void vk_meta_device_finish(struct vk_device *device, struct vk_meta_device *meta); +/** Keys should start with one of these to ensure uniqueness */ +enum vk_meta_object_key_type { + VK_META_OBJECT_KEY_TYPE_INVALD = 0, + VK_META_OBJECT_KEY_CLEAR_PIPELINE, + VK_META_OBJECT_KEY_BLIT_PIPELINE, +}; + uint64_t vk_meta_lookup_object(struct vk_meta_device *meta, VkObjectType obj_type, const void *key_data, size_t key_size); diff --git a/src/vulkan/runtime/vk_meta_clear.c b/src/vulkan/runtime/vk_meta_clear.c index 7ba2416c5b9..b8bcfd8a806 100644 --- a/src/vulkan/runtime/vk_meta_clear.c +++ b/src/vulkan/runtime/vk_meta_clear.c @@ -33,6 +33,7 @@ #include "nir_builder.h" struct vk_meta_clear_key { + enum vk_meta_object_key_type key_type; struct vk_meta_rendering_info render; uint8_t color_attachments_cleared; bool clear_depth; @@ -208,6 +209,7 @@ vk_meta_clear_attachments(struct vk_command_buffer *cmd, struct vk_meta_clear_key key; memset(&key, 0, sizeof(key)); + key.key_type = VK_META_OBJECT_KEY_CLEAR_PIPELINE; vk_meta_rendering_info_copy(&key.render, render); struct vk_meta_clear_push_data push = {0};