xref: /aosp_15_r20/external/mesa3d/src/panfrost/vulkan/panvk_cmd_desc_state.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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