• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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