1 /*
2 * Copyright 2024 Google LLC
3 * SPDX-License-Identifier: MIT
4 */
5
6 #include "vk_meta_object_list.h"
7 #include "vk_device.h"
8
9 void
vk_meta_destroy_object(struct vk_device * device,struct vk_object_base * obj)10 vk_meta_destroy_object(struct vk_device *device, struct vk_object_base *obj)
11 {
12 const struct vk_device_dispatch_table *disp = &device->dispatch_table;
13 VkDevice _device = vk_device_to_handle(device);
14
15 switch (obj->type) {
16 case VK_OBJECT_TYPE_BUFFER:
17 disp->DestroyBuffer(_device, (VkBuffer)(uintptr_t)obj, NULL);
18 break;
19 case VK_OBJECT_TYPE_IMAGE_VIEW:
20 disp->DestroyImageView(_device, (VkImageView)(uintptr_t)obj, NULL);
21 break;
22 case VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT:
23 disp->DestroyDescriptorSetLayout(_device, (VkDescriptorSetLayout)(uintptr_t)obj, NULL);
24 break;
25 case VK_OBJECT_TYPE_PIPELINE_LAYOUT:
26 disp->DestroyPipelineLayout(_device, (VkPipelineLayout)(uintptr_t)obj, NULL);
27 break;
28 case VK_OBJECT_TYPE_PIPELINE:
29 disp->DestroyPipeline(_device, (VkPipeline)(uintptr_t)obj, NULL);
30 break;
31 case VK_OBJECT_TYPE_SAMPLER:
32 disp->DestroySampler(_device, (VkSampler)(uintptr_t)obj, NULL);
33 break;
34 default:
35 unreachable("Unsupported object type");
36 }
37 }
38
39
40 void
vk_meta_object_list_init(struct vk_meta_object_list * mol)41 vk_meta_object_list_init(struct vk_meta_object_list *mol)
42 {
43 util_dynarray_init(&mol->arr, NULL);
44 }
45
46 void
vk_meta_object_list_reset(struct vk_device * device,struct vk_meta_object_list * mol)47 vk_meta_object_list_reset(struct vk_device *device,
48 struct vk_meta_object_list *mol)
49 {
50 util_dynarray_foreach(&mol->arr, struct vk_object_base *, obj)
51 vk_meta_destroy_object(device, *obj);
52
53 util_dynarray_clear(&mol->arr);
54 }
55
56 void
vk_meta_object_list_finish(struct vk_device * device,struct vk_meta_object_list * mol)57 vk_meta_object_list_finish(struct vk_device *device,
58 struct vk_meta_object_list *mol)
59 {
60 vk_meta_object_list_reset(device, mol);
61 util_dynarray_fini(&mol->arr);
62 }
63