1 /*
2 * Copyright © 2022 Collabora Ltd. and Red Hat Inc.
3 * SPDX-License-Identifier: MIT
4 */
5 #ifndef NVK_DESCRIPTOR_SET
6 #define NVK_DESCRIPTOR_SET 1
7
8 #include "nvk_private.h"
9
10 #include "nvk_descriptor_types.h"
11 #include "nvk_device.h"
12 #include "nvk_physical_device.h"
13 #include "vk_object.h"
14 #include "vk_descriptor_update_template.h"
15
16 #include "util/vma.h"
17 #include "util/list.h"
18
19 struct nvk_descriptor_set_layout;
20 struct nvkmd_mem;
21
22 struct nvk_descriptor_pool {
23 struct vk_object_base base;
24
25 struct list_head sets;
26
27 struct nvkmd_mem *mem;
28 struct util_vma_heap heap;
29 };
30
31 VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_descriptor_pool, base, VkDescriptorPool,
32 VK_OBJECT_TYPE_DESCRIPTOR_POOL)
33
34 struct nvk_descriptor_set {
35 struct vk_object_base base;
36
37 /* Link in nvk_descriptor_pool::sets */
38 struct list_head link;
39
40 struct nvk_descriptor_set_layout *layout;
41 void *mapped_ptr;
42 uint64_t addr;
43 uint32_t size;
44
45 union nvk_buffer_descriptor dynamic_buffers[];
46 };
47
VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_descriptor_set,base,VkDescriptorSet,VK_OBJECT_TYPE_DESCRIPTOR_SET)48 VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_descriptor_set, base, VkDescriptorSet,
49 VK_OBJECT_TYPE_DESCRIPTOR_SET)
50
51 static inline struct nvk_buffer_address
52 nvk_descriptor_set_addr(const struct nvk_descriptor_set *set)
53 {
54 return (struct nvk_buffer_address) {
55 .base_addr = set->addr,
56 .size = set->size,
57 };
58 }
59
60 struct nvk_push_descriptor_set {
61 uint8_t data[NVK_PUSH_DESCRIPTOR_SET_SIZE];
62 };
63
64 void
65 nvk_push_descriptor_set_update(struct nvk_device *dev,
66 struct nvk_push_descriptor_set *push_set,
67 struct nvk_descriptor_set_layout *layout,
68 uint32_t write_count,
69 const VkWriteDescriptorSet *writes);
70
71 void
72 nvk_push_descriptor_set_update_template(
73 struct nvk_device *dev,
74 struct nvk_push_descriptor_set *push_set,
75 struct nvk_descriptor_set_layout *layout,
76 const struct vk_descriptor_update_template *template,
77 const void *data);
78
79 #endif
80