• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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       uint64_t dev_addr;
34    } context;
35 };
36 
37 struct panvk_subqueue {
38    struct panvk_priv_mem context;
39    uint32_t *reg_file;
40 
41    struct {
42       struct pan_kmod_bo *bo;
43       size_t size;
44       struct {
45          uint64_t dev;
46          void *host;
47       } addr;
48    } tracebuf;
49 };
50 
51 struct panvk_desc_ringbuf {
52    struct panvk_priv_mem syncobj;
53    struct pan_kmod_bo *bo;
54    size_t size;
55    struct {
56       uint64_t dev;
57       void *host;
58    } addr;
59 };
60 
61 struct panvk_queue {
62    struct vk_queue vk;
63 
64    uint32_t group_handle;
65    uint32_t syncobj_handle;
66 
67    struct panvk_tiler_heap tiler_heap;
68    struct panvk_desc_ringbuf render_desc_ringbuf;
69    struct panvk_priv_mem syncobjs;
70    struct panvk_priv_mem debug_syncobjs;
71    struct panvk_priv_mem tiler_oom_regs_save;
72 
73    struct {
74       struct vk_sync *sync;
75       uint64_t next_value;
76    } utrace;
77 
78    struct panvk_subqueue subqueues[PANVK_SUBQUEUE_COUNT];
79 };
80 
81 VK_DEFINE_HANDLE_CASTS(panvk_queue, vk.base, VkQueue, VK_OBJECT_TYPE_QUEUE)
82 
83 void panvk_per_arch(queue_finish)(struct panvk_queue *queue);
84 
85 VkResult panvk_per_arch(queue_init)(struct panvk_device *device,
86                                     struct panvk_queue *queue, int idx,
87                                     const VkDeviceQueueCreateInfo *create_info);
88 
89 VkResult panvk_per_arch(queue_check_status)(struct panvk_queue *queue);
90 
91 #endif
92