xref: /aosp_15_r20/external/mesa3d/src/nouveau/vulkan/nvk_descriptor_set.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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