• 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 "nouveau_bo.h"
11 #include "nvk_device.h"
12 #include "vulkan/runtime/vk_object.h"
13 #include "vulkan/runtime/vk_descriptor_update_template.h"
14 
15 struct nvk_descriptor_set_layout;
16 
17 #define NVK_IMAGE_DESCRIPTOR_IMAGE_INDEX_MASK   0x000fffff
18 #define NVK_IMAGE_DESCRIPTOR_SAMPLER_INDEX_MASK 0xfff00000
19 
20 struct nvk_image_descriptor {
21    unsigned image_index:20;
22    unsigned sampler_index:12;
23 };
24 
25 /* This has to match nir_address_format_64bit_bounded_global */
26 struct nvk_buffer_address {
27    uint64_t base_addr;
28    uint32_t size;
29    uint32_t zero; /* Must be zero! */
30 };
31 
32 struct nvk_descriptor_pool_entry {
33    uint32_t offset;
34    uint32_t size;
35    struct nvk_descriptor_set *set;
36 };
37 
38 struct nvk_descriptor_pool {
39    struct vk_object_base base;
40    struct nouveau_ws_bo *bo;
41    uint8_t *mapped_ptr;
42    uint64_t current_offset;
43    uint64_t size;
44    uint32_t entry_count;
45    uint32_t max_entry_count;
46    struct nvk_descriptor_pool_entry entries[0];
47 };
48 
49 VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_descriptor_pool, base, VkDescriptorPool,
50                                VK_OBJECT_TYPE_DESCRIPTOR_POOL)
51 
52 struct nvk_descriptor_set {
53    struct vk_object_base base;
54    struct nvk_descriptor_set_layout *layout;
55    void *mapped_ptr;
56    uint64_t addr;
57    uint32_t size;
58 
59    struct nvk_buffer_address dynamic_buffers[];
60 };
61 
VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_descriptor_set,base,VkDescriptorSet,VK_OBJECT_TYPE_DESCRIPTOR_SET)62 VK_DEFINE_NONDISP_HANDLE_CASTS(nvk_descriptor_set, base, VkDescriptorSet,
63                        VK_OBJECT_TYPE_DESCRIPTOR_SET)
64 
65 static inline uint64_t
66 nvk_descriptor_set_addr(const struct nvk_descriptor_set *set)
67 {
68    return set->addr;
69 }
70 
71 struct nvk_push_descriptor_set {
72    uint8_t data[NVK_PUSH_DESCRIPTOR_SET_SIZE];
73 };
74 
75 void
76 nvk_push_descriptor_set_update(struct nvk_push_descriptor_set *push_set,
77                                struct nvk_descriptor_set_layout *layout,
78                                uint32_t write_count,
79                                const VkWriteDescriptorSet *writes);
80 
81 void
82 nvk_push_descriptor_set_update_template(
83    struct nvk_push_descriptor_set *push_set,
84    struct nvk_descriptor_set_layout *layout,
85    const struct vk_descriptor_update_template *template,
86    const void *data);
87 
88 #endif
89