xref: /aosp_15_r20/external/mesa3d/src/gallium/drivers/panfrost/pan_csf.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright (C) 2023 Collabora Ltd.
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a
5  * copy of this software and associated documentation files (the "Software"),
6  * to deal in the Software without restriction, including without limitation
7  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8  * and/or sell copies of the Software, and to permit persons to whom the
9  * Software is furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21  * SOFTWARE.
22  *
23  */
24 
25 #ifndef __PAN_CSF_H__
26 #define __PAN_CSF_H__
27 
28 #include "compiler/shader_enums.h"
29 
30 #include "pan_bo.h"
31 #include "pan_mempool.h"
32 
33 struct cs_builder;
34 
35 struct panfrost_csf_batch {
36    /* CS related fields. */
37    struct {
38       /* CS builder. */
39       struct cs_builder *builder;
40 
41       /* CS state, written through the CS, and checked when PAN_MESA_DEBUG=sync.
42        */
43       struct panfrost_ptr state;
44    } cs;
45 
46    /* Pool used to allocate CS chunks. */
47    struct panfrost_pool cs_chunk_pool;
48 };
49 
50 struct panfrost_csf_context {
51    bool is_init;
52    uint32_t group_handle;
53 
54    struct {
55       uint32_t handle;
56       struct panfrost_bo *desc_bo;
57    } heap;
58 
59    /* Temporary geometry buffer. Used as a FIFO by the tiler. */
60    struct panfrost_bo *tmp_geom_bo;
61 };
62 
63 #if defined(PAN_ARCH) && PAN_ARCH >= 10
64 
65 #include "genxml/gen_macros.h"
66 
67 struct panfrost_batch;
68 struct panfrost_context;
69 struct pan_fb_info;
70 struct pipe_draw_info;
71 struct pipe_grid_info;
72 struct pipe_draw_start_count_bias;
73 
74 int GENX(csf_init_context)(struct panfrost_context *ctx);
75 void GENX(csf_cleanup_context)(struct panfrost_context *ctx);
76 
77 void GENX(csf_init_batch)(struct panfrost_batch *batch);
78 void GENX(csf_cleanup_batch)(struct panfrost_batch *batch);
79 int GENX(csf_submit_batch)(struct panfrost_batch *batch);
80 
81 void GENX(csf_preload_fb)(struct panfrost_batch *batch, struct pan_fb_info *fb);
82 void GENX(csf_emit_fragment_job)(struct panfrost_batch *batch,
83                                  const struct pan_fb_info *pfb);
84 void GENX(csf_emit_batch_end)(struct panfrost_batch *batch);
85 void GENX(csf_launch_xfb)(struct panfrost_batch *batch,
86                           const struct pipe_draw_info *info, unsigned count);
87 void GENX(csf_launch_grid)(struct panfrost_batch *batch,
88                            const struct pipe_grid_info *info);
89 void GENX(csf_launch_draw)(struct panfrost_batch *batch,
90                            const struct pipe_draw_info *info,
91                            unsigned drawid_offset,
92                            const struct pipe_draw_start_count_bias *draw,
93                            unsigned vertex_count);
94 void GENX(csf_launch_draw_indirect)(struct panfrost_batch *batch,
95                                     const struct pipe_draw_info *info,
96                                     unsigned drawid_offset,
97                                     const struct pipe_draw_indirect_info *indirect);
98 
99 void GENX(csf_emit_write_timestamp)(struct panfrost_batch *batch,
100                                     struct panfrost_resource *dst,
101                                     unsigned offset);
102 
103 #endif /* PAN_ARCH >= 10 */
104 
105 #endif /* __PAN_CSF_H__ */
106