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