1 /* 2 * Copyright © 2024 Collabora Ltd. 3 * SPDX-License-Identifier: MIT 4 */ 5 6 #ifndef PANVK_CMD_DESC_STATE_H 7 #define PANVK_CMD_DESC_STATE_H 8 9 #ifndef PAN_ARCH 10 #error "PAN_ARCH must be defined" 11 #endif 12 13 #include <stdint.h> 14 15 #include "genxml/gen_macros.h" 16 17 #include "panvk_cmd_pool.h" 18 #include "panvk_descriptor_set.h" 19 #include "panvk_macros.h" 20 #include "panvk_shader.h" 21 22 #include "vk_alloc.h" 23 #include "vk_command_buffer.h" 24 #include "vk_command_pool.h" 25 26 #include "pan_pool.h" 27 28 struct panvk_cmd_buffer; 29 30 struct panvk_shader_desc_state { 31 #if PAN_ARCH <= 7 32 uint64_t tables[PANVK_BIFROST_DESC_TABLE_COUNT]; 33 uint64_t img_attrib_table; 34 uint64_t dyn_ssbos; 35 #else 36 struct { 37 uint64_t dev_addr; 38 uint32_t size; 39 } driver_set; 40 uint64_t res_table; 41 #endif 42 }; 43 44 struct panvk_push_set { 45 struct panvk_cmd_pool_obj base; 46 struct panvk_descriptor_set set; 47 struct panvk_opaque_desc descs[MAX_PUSH_DESCS]; 48 }; 49 50 struct panvk_descriptor_state { 51 const struct panvk_descriptor_set *sets[MAX_SETS]; 52 struct panvk_descriptor_set *push_sets[MAX_SETS]; 53 BITSET_DECLARE(dirty_push_sets, MAX_SETS); 54 55 uint32_t dyn_buf_offsets[MAX_SETS][MAX_DYNAMIC_BUFFERS]; 56 }; 57 58 #if PAN_ARCH <= 7 59 VkResult panvk_per_arch(cmd_prepare_dyn_ssbos)( 60 struct panvk_cmd_buffer *cmdbuf, 61 const struct panvk_descriptor_state *desc_state, 62 const struct panvk_shader *shader, 63 struct panvk_shader_desc_state *shader_desc_state); 64 65 VkResult panvk_per_arch(cmd_prepare_shader_desc_tables)( 66 struct panvk_cmd_buffer *cmdbuf, 67 const struct panvk_descriptor_state *desc_state, 68 const struct panvk_shader *shader, 69 struct panvk_shader_desc_state *shader_desc_state); 70 #else 71 void panvk_per_arch(cmd_fill_dyn_bufs)( 72 const struct panvk_descriptor_state *desc_state, 73 const struct panvk_shader *shader, struct mali_buffer_packed *buffers); 74 75 VkResult panvk_per_arch(cmd_prepare_shader_res_table)( 76 struct panvk_cmd_buffer *cmdbuf, 77 const struct panvk_descriptor_state *desc_state, 78 const struct panvk_shader *shader, 79 struct panvk_shader_desc_state *shader_desc_state); 80 #endif 81 82 VkResult panvk_per_arch(cmd_prepare_push_descs)( 83 struct panvk_cmd_buffer *cmdbuf, struct panvk_descriptor_state *desc_state, 84 uint32_t used_set_mask); 85 86 #endif 87