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 uint64_t mem_size_B;
28 struct nvkmd_mem *mem;
29 void *host_mem;
30 struct util_vma_heap heap;
31 };
32
33 VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_descriptor_pool, base, VkDescriptorPool,
34 VK_OBJECT_TYPE_DESCRIPTOR_POOL)
35
36 struct nvk_descriptor_set {
37 struct vk_object_base base;
38
39 /* Link in nvk_descriptor_pool::sets */
40 struct list_head link;
41
42 struct nvk_descriptor_set_layout *layout;
43 void *map;
44 uint64_t addr;
45 uint32_t size;
46
47 union nvk_buffer_descriptor dynamic_buffers[];
48 };
49
VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_descriptor_set,base,VkDescriptorSet,VK_OBJECT_TYPE_DESCRIPTOR_SET)50 VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_descriptor_set, base, VkDescriptorSet,
51 VK_OBJECT_TYPE_DESCRIPTOR_SET)
52
53 static inline struct nvk_buffer_address
54 nvk_descriptor_set_addr(const struct nvk_descriptor_set *set)
55 {
56 return (struct nvk_buffer_address) {
57 .base_addr = set->addr,
58 .size = set->size,
59 };
60 }
61
62 struct nvk_push_descriptor_set {
63 uint8_t data[NVK_PUSH_DESCRIPTOR_SET_SIZE];
64 };
65
66 void
67 nvk_push_descriptor_set_update(struct nvk_device *dev,
68 struct nvk_push_descriptor_set *push_set,
69 struct nvk_descriptor_set_layout *layout,
70 uint32_t write_count,
71 const VkWriteDescriptorSet *writes);
72
73 void
74 nvk_push_descriptor_set_update_template(
75 struct nvk_device *dev,
76 struct nvk_push_descriptor_set *push_set,
77 struct nvk_descriptor_set_layout *layout,
78 const struct vk_descriptor_update_template *template,
79 const void *data);
80
81 #endif
82