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 mali_ptr tables[PANVK_BIFROST_DESC_TABLE_COUNT]; 33 mali_ptr img_attrib_table; 34 mali_ptr dyn_ssbos; 35 #else 36 struct { 37 mali_ptr dev_addr; 38 uint32_t size; 39 } driver_set; 40 mali_ptr 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 54 uint32_t dyn_buf_offsets[MAX_SETS][MAX_DYNAMIC_BUFFERS]; 55 }; 56 57 #if PAN_ARCH <= 7 58 VkResult panvk_per_arch(cmd_prepare_dyn_ssbos)( 59 struct panvk_cmd_buffer *cmdbuf, 60 const struct panvk_descriptor_state *desc_state, 61 const struct panvk_shader *shader, 62 struct panvk_shader_desc_state *shader_desc_state); 63 64 VkResult panvk_per_arch(cmd_prepare_shader_desc_tables)( 65 struct panvk_cmd_buffer *cmdbuf, 66 const struct panvk_descriptor_state *desc_state, 67 const struct panvk_shader *shader, 68 struct panvk_shader_desc_state *shader_desc_state); 69 #else 70 void panvk_per_arch(cmd_fill_dyn_bufs)( 71 const struct panvk_descriptor_state *desc_state, 72 const struct panvk_shader *shader, struct mali_buffer_packed *buffers); 73 74 VkResult panvk_per_arch(cmd_prepare_shader_res_table)( 75 struct panvk_cmd_buffer *cmdbuf, 76 const struct panvk_descriptor_state *desc_state, 77 const struct panvk_shader *shader, 78 struct panvk_shader_desc_state *shader_desc_state); 79 #endif 80 81 VkResult panvk_per_arch(cmd_prepare_push_descs)( 82 struct panvk_cmd_buffer *cmdbuf, struct panvk_descriptor_state *desc_state, 83 uint32_t used_set_mask); 84 85 #endif 86