diff options
author | Gurchetan Singh <gurchetansingh@google.com> | 2024-01-10 15:09:02 -0800 |
---|---|---|
committer | Gurchetan Singh <gurchetansingh@google.com> | 2024-03-05 18:20:46 -0800 |
commit | cc438923afa5112befb1178114150c67a532f2f1 (patch) | |
tree | 6f61ab0df0c31a599744c2e4e7f244a1e5880e76 | |
parent | b394b814823c40b343ddcc6cb8671a4680bbecaf (diff) | |
download | mesa3d-cc438923afa5112befb1178114150c67a532f2f1.tar.gz |
ANDROID: vulkan/runtime: introduce vk_meta_object_list
Code movement: Move the object list + destroy_object
function to separate files.
This allows vk_command_buffer.{h, c} to not depend on all
of vk_meta, which depends on vk_pipeline, which depends on
NIR.
Bug: 327408955
Test: compile
Change-Id: Ie9618ceca772629f46dab8f36835f11d0df16f46
-rw-r--r-- | src/vulkan/runtime/meson.build | 2 | ||||
-rw-r--r-- | src/vulkan/runtime/vk_command_buffer.h | 2 | ||||
-rw-r--r-- | src/vulkan/runtime/vk_meta.c | 59 | ||||
-rw-r--r-- | src/vulkan/runtime/vk_meta.h | 27 | ||||
-rw-r--r-- | src/vulkan/runtime/vk_meta_object_list.c | 62 | ||||
-rw-r--r-- | src/vulkan/runtime/vk_meta_object_list.h | 44 |
6 files changed, 112 insertions, 84 deletions
diff --git a/src/vulkan/runtime/meson.build b/src/vulkan/runtime/meson.build index 29b17f7737f..f706ba3ea25 100644 --- a/src/vulkan/runtime/meson.build +++ b/src/vulkan/runtime/meson.build @@ -70,6 +70,8 @@ vulkan_runtime_files = files( 'vk_log.h', 'vk_meta.c', 'vk_meta.h', + 'vk_meta_object_list.c', + 'vk_meta_object_list.h', 'vk_meta_blit_resolve.c', 'vk_meta_draw_rects.c', 'vk_meta_clear.c', diff --git a/src/vulkan/runtime/vk_command_buffer.h b/src/vulkan/runtime/vk_command_buffer.h index 6ae637ca5ab..84b3c83d818 100644 --- a/src/vulkan/runtime/vk_command_buffer.h +++ b/src/vulkan/runtime/vk_command_buffer.h @@ -27,7 +27,7 @@ #include "vk_cmd_queue.h" #include "vk_graphics_state.h" #include "vk_log.h" -#include "vk_meta.h" +#include "vk_meta_object_list.h" #include "vk_object.h" #include "util/list.h" #include "util/u_dynarray.h" diff --git a/src/vulkan/runtime/vk_meta.c b/src/vulkan/runtime/vk_meta.c index f1570908fb9..974bee42e71 100644 --- a/src/vulkan/runtime/vk_meta.c +++ b/src/vulkan/runtime/vk_meta.c @@ -22,6 +22,7 @@ */ #include "vk_meta_private.h" +#include "vk_meta_object_list.h" #include "vk_command_buffer.h" #include "vk_device.h" @@ -74,36 +75,6 @@ cache_key_equal(const void *_a, const void *_b) return memcmp(a->key_data, b->key_data, a->key_size) == 0; } -static void -destroy_object(struct vk_device *device, struct vk_object_base *obj) -{ - const struct vk_device_dispatch_table *disp = &device->dispatch_table; - VkDevice _device = vk_device_to_handle(device); - - switch (obj->type) { - case VK_OBJECT_TYPE_BUFFER: - disp->DestroyBuffer(_device, (VkBuffer)(uintptr_t)obj, NULL); - break; - case VK_OBJECT_TYPE_IMAGE_VIEW: - disp->DestroyImageView(_device, (VkImageView)(uintptr_t)obj, NULL); - break; - case VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT: - disp->DestroyDescriptorSetLayout(_device, (VkDescriptorSetLayout)(uintptr_t)obj, NULL); - break; - case VK_OBJECT_TYPE_PIPELINE_LAYOUT: - disp->DestroyPipelineLayout(_device, (VkPipelineLayout)(uintptr_t)obj, NULL); - break; - case VK_OBJECT_TYPE_PIPELINE: - disp->DestroyPipeline(_device, (VkPipeline)(uintptr_t)obj, NULL); - break; - case VK_OBJECT_TYPE_SAMPLER: - disp->DestroySampler(_device, (VkSampler)(uintptr_t)obj, NULL); - break; - default: - unreachable("Unsupported object type"); - } -} - VkResult vk_meta_device_init(struct vk_device *device, struct vk_meta_device *meta) @@ -126,7 +97,7 @@ vk_meta_device_finish(struct vk_device *device, { hash_table_foreach(meta->cache, entry) { free((void *)entry->key); - destroy_object(device, entry->data); + vk_meta_destroy_object(device, entry->data); } _mesa_hash_table_destroy(meta->cache, NULL); simple_mtx_destroy(&meta->cache_mtx); @@ -190,7 +161,7 @@ vk_meta_cache_object(struct vk_device *device, if (entry != NULL) { /* We raced and found that object already in the cache */ free(key); - destroy_object(device, obj); + vk_meta_destroy_object(device, obj); return (uint64_t)(uintptr_t)entry->data; } else { /* Return the newly inserted object */ @@ -527,30 +498,6 @@ vk_meta_create_compute_pipeline(struct vk_device *device, return VK_SUCCESS; } -void -vk_meta_object_list_init(struct vk_meta_object_list *mol) -{ - util_dynarray_init(&mol->arr, NULL); -} - -void -vk_meta_object_list_reset(struct vk_device *device, - struct vk_meta_object_list *mol) -{ - util_dynarray_foreach(&mol->arr, struct vk_object_base *, obj) - destroy_object(device, *obj); - - util_dynarray_clear(&mol->arr); -} - -void -vk_meta_object_list_finish(struct vk_device *device, - struct vk_meta_object_list *mol) -{ - vk_meta_object_list_reset(device, mol); - util_dynarray_fini(&mol->arr); -} - VkResult vk_meta_create_buffer(struct vk_command_buffer *cmd, struct vk_meta_device *meta, diff --git a/src/vulkan/runtime/vk_meta.h b/src/vulkan/runtime/vk_meta.h index 28379b0948d..48e3c391d30 100644 --- a/src/vulkan/runtime/vk_meta.h +++ b/src/vulkan/runtime/vk_meta.h @@ -27,7 +27,6 @@ #include "vk_object.h" #include "util/simple_mtx.h" -#include "util/u_dynarray.h" #ifdef __cplusplus extern "C" { @@ -181,32 +180,6 @@ vk_meta_create_sampler(struct vk_device *device, const void *key_data, size_t key_size, VkSampler *sampler_out); -struct vk_meta_object_list { - struct util_dynarray arr; -}; - -void vk_meta_object_list_init(struct vk_meta_object_list *mol); -void vk_meta_object_list_reset(struct vk_device *device, - struct vk_meta_object_list *mol); -void vk_meta_object_list_finish(struct vk_device *device, - struct vk_meta_object_list *mol); - -static inline void -vk_meta_object_list_add_obj(struct vk_meta_object_list *mol, - struct vk_object_base *obj) -{ - util_dynarray_append(&mol->arr, struct vk_object_base *, obj); -} - -static inline void -vk_meta_object_list_add_handle(struct vk_meta_object_list *mol, - VkObjectType obj_type, - uint64_t handle) -{ - vk_meta_object_list_add_obj(mol, - vk_object_base_from_u64_handle(handle, obj_type)); -} - VkResult vk_meta_create_buffer(struct vk_command_buffer *cmd, struct vk_meta_device *meta, const VkBufferCreateInfo *info, diff --git a/src/vulkan/runtime/vk_meta_object_list.c b/src/vulkan/runtime/vk_meta_object_list.c new file mode 100644 index 00000000000..c6dba80acff --- /dev/null +++ b/src/vulkan/runtime/vk_meta_object_list.c @@ -0,0 +1,62 @@ +/* + * Copyright 2024 Google LLC + * SPDX-License-Identifier: MIT + */ + +#include "vk_meta_object_list.h" +#include "vk_device.h" + +void +vk_meta_destroy_object(struct vk_device *device, struct vk_object_base *obj) +{ + const struct vk_device_dispatch_table *disp = &device->dispatch_table; + VkDevice _device = vk_device_to_handle(device); + + switch (obj->type) { + case VK_OBJECT_TYPE_BUFFER: + disp->DestroyBuffer(_device, (VkBuffer)(uintptr_t)obj, NULL); + break; + case VK_OBJECT_TYPE_IMAGE_VIEW: + disp->DestroyImageView(_device, (VkImageView)(uintptr_t)obj, NULL); + break; + case VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT: + disp->DestroyDescriptorSetLayout(_device, (VkDescriptorSetLayout)(uintptr_t)obj, NULL); + break; + case VK_OBJECT_TYPE_PIPELINE_LAYOUT: + disp->DestroyPipelineLayout(_device, (VkPipelineLayout)(uintptr_t)obj, NULL); + break; + case VK_OBJECT_TYPE_PIPELINE: + disp->DestroyPipeline(_device, (VkPipeline)(uintptr_t)obj, NULL); + break; + case VK_OBJECT_TYPE_SAMPLER: + disp->DestroySampler(_device, (VkSampler)(uintptr_t)obj, NULL); + break; + default: + unreachable("Unsupported object type"); + } +} + + +void +vk_meta_object_list_init(struct vk_meta_object_list *mol) +{ + util_dynarray_init(&mol->arr, NULL); +} + +void +vk_meta_object_list_reset(struct vk_device *device, + struct vk_meta_object_list *mol) +{ + util_dynarray_foreach(&mol->arr, struct vk_object_base *, obj) + vk_meta_destroy_object(device, *obj); + + util_dynarray_clear(&mol->arr); +} + +void +vk_meta_object_list_finish(struct vk_device *device, + struct vk_meta_object_list *mol) +{ + vk_meta_object_list_reset(device, mol); + util_dynarray_fini(&mol->arr); +} diff --git a/src/vulkan/runtime/vk_meta_object_list.h b/src/vulkan/runtime/vk_meta_object_list.h new file mode 100644 index 00000000000..1438e6ab8f6 --- /dev/null +++ b/src/vulkan/runtime/vk_meta_object_list.h @@ -0,0 +1,44 @@ +/* + * Copyright 2024 Google LLC + * SPDX-License-Identifier: MIT + */ + +#ifndef VK_META_OBJECT_LIST_H +#define VK_META_OBJECT_LIST_H + +#include "vk_object.h" + +#include "util/u_dynarray.h" + +struct vk_device; + +struct vk_meta_object_list { + struct util_dynarray arr; +}; + +void vk_meta_object_list_init(struct vk_meta_object_list *mol); +void vk_meta_object_list_reset(struct vk_device *device, + struct vk_meta_object_list *mol); +void vk_meta_object_list_finish(struct vk_device *device, + struct vk_meta_object_list *mol); + +static inline void +vk_meta_object_list_add_obj(struct vk_meta_object_list *mol, + struct vk_object_base *obj) +{ + util_dynarray_append(&mol->arr, struct vk_object_base *, obj); +} + +static inline void +vk_meta_object_list_add_handle(struct vk_meta_object_list *mol, + VkObjectType obj_type, + uint64_t handle) +{ + vk_meta_object_list_add_obj(mol, + vk_object_base_from_u64_handle(handle, obj_type)); +} + +void vk_meta_destroy_object(struct vk_device *device, + struct vk_object_base *obj); + +#endif |