xref: /aosp_15_r20/external/mesa3d/src/panfrost/vulkan/panvk_descriptor_set.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright © 2024 Collabora Ltd.
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #ifndef PANVK_DESCRIPTOR_SET_H
7 #define PANVK_DESCRIPTOR_SET_H
8 
9 #ifndef PAN_ARCH
10 #error "PAN_ARCH must be defined"
11 #endif
12 
13 #include <stdint.h>
14 
15 #include "util/bitset.h"
16 #include "util/vma.h"
17 
18 #include "panvk_macros.h"
19 
20 #include "vk_descriptor_update_template.h"
21 #include "vk_object.h"
22 
23 #include "panvk_descriptor_set_layout.h"
24 
25 struct panvk_priv_bo;
26 struct panvk_sysvals;
27 struct panvk_descriptor_set_layout;
28 
29 struct panvk_opaque_desc {
30    uint32_t data[PANVK_DESCRIPTOR_SIZE / sizeof(uint32_t)];
31 };
32 
33 #if PAN_ARCH < 9
34 struct panvk_ssbo_addr {
35    uint64_t base_addr;
36    uint32_t size;
37    uint32_t zero[5]; /* Must be zero! */
38 };
39 #endif
40 
41 struct panvk_descriptor_set {
42    struct vk_object_base base;
43    const struct panvk_descriptor_set_layout *layout;
44    struct {
45       uint64_t dev;
46       void *host;
47    } descs;
48 
49    struct {
50       uint64_t dev_addr;
51       uint64_t size;
52    } dyn_bufs[MAX_DYNAMIC_BUFFERS];
53 
54    /* Includes adjustment for variable-sized descriptors */
55    unsigned desc_count;
56 };
57 
58 VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_set, base, VkDescriptorSet,
59                                VK_OBJECT_TYPE_DESCRIPTOR_SET)
60 
61 struct panvk_descriptor_pool {
62    struct vk_object_base base;
63    struct panvk_priv_bo *desc_bo;
64    struct util_vma_heap desc_heap;
65 
66    /* Initialize to ones */
67    BITSET_WORD *free_sets;
68 
69    uint32_t max_sets;
70    struct panvk_descriptor_set *sets;
71 };
72 
73 VK_DEFINE_NONDISP_HANDLE_CASTS(panvk_descriptor_pool, base, VkDescriptorPool,
74                                VK_OBJECT_TYPE_DESCRIPTOR_POOL)
75 
76 VkResult panvk_per_arch(descriptor_set_write)(struct panvk_descriptor_set *set,
77                                               const VkWriteDescriptorSet *write,
78                                               bool write_immutable_samplers);
79 
80 void panvk_per_arch(descriptor_set_write_template)(
81    struct panvk_descriptor_set *set,
82    const struct vk_descriptor_update_template *template, const void *data,
83    bool write_immutable_samplers);
84 
85 #endif /* PANVK_VX_DESCRIPTOR_SET_H */
86