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