xref: /aosp_15_r20/external/mesa3d/src/panfrost/vulkan/csf/panvk_queue.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /*
2  * Copyright © 2021 Collabora Ltd.
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #ifndef PANVK_QUEUE_H
7 #define PANVK_QUEUE_H
8 
9 #ifndef PAN_ARCH
10 #error "PAN_ARCH must be defined"
11 #endif
12 
13 #include "genxml/gen_macros.h"
14 
15 #include <stdint.h>
16 
17 #include "panvk_device.h"
18 
19 #include "vk_queue.h"
20 
21 enum panvk_subqueue_id {
22    PANVK_SUBQUEUE_VERTEX_TILER = 0,
23    PANVK_SUBQUEUE_FRAGMENT,
24    PANVK_SUBQUEUE_COMPUTE,
25    PANVK_SUBQUEUE_COUNT,
26 };
27 
28 struct panvk_tiler_heap {
29    uint32_t chunk_size;
30    struct panvk_priv_mem desc;
31    struct {
32       uint32_t handle;
33       mali_ptr dev_addr;
34    } context;
35 };
36 
37 struct panvk_subqueue {
38    struct panvk_priv_mem context;
39 };
40 
41 struct panvk_desc_ringbuf {
42    struct panvk_priv_mem syncobj;
43    struct pan_kmod_bo *bo;
44    struct {
45       uint64_t dev;
46       void *host;
47    } addr;
48 };
49 
50 struct panvk_queue {
51    struct vk_queue vk;
52 
53    uint32_t group_handle;
54    uint32_t syncobj_handle;
55 
56    struct panvk_tiler_heap tiler_heap;
57    struct panvk_desc_ringbuf render_desc_ringbuf;
58    struct panvk_priv_mem syncobjs;
59    struct panvk_priv_mem debug_syncobjs;
60 
61    struct panvk_subqueue subqueues[PANVK_SUBQUEUE_COUNT];
62 };
63 
64 VK_DEFINE_HANDLE_CASTS(panvk_queue, vk.base, VkQueue, VK_OBJECT_TYPE_QUEUE)
65 
66 void panvk_per_arch(queue_finish)(struct panvk_queue *queue);
67 
68 VkResult panvk_per_arch(queue_init)(struct panvk_device *device,
69                                     struct panvk_queue *queue, int idx,
70                                     const VkDeviceQueueCreateInfo *create_info);
71 
72 #endif
73