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