1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Copyright © 2016 Red Hat.
3*61046927SAndroid Build Coastguard Worker * Copyright © 2016 Bas Nieuwenhuizen
4*61046927SAndroid Build Coastguard Worker *
5*61046927SAndroid Build Coastguard Worker * based in part on anv driver which is:
6*61046927SAndroid Build Coastguard Worker * Copyright © 2015 Intel Corporation
7*61046927SAndroid Build Coastguard Worker *
8*61046927SAndroid Build Coastguard Worker * SPDX-License-Identifier: MIT
9*61046927SAndroid Build Coastguard Worker */
10*61046927SAndroid Build Coastguard Worker
11*61046927SAndroid Build Coastguard Worker #ifndef RADV_QUEUE_H
12*61046927SAndroid Build Coastguard Worker #define RADV_QUEUE_H
13*61046927SAndroid Build Coastguard Worker
14*61046927SAndroid Build Coastguard Worker #include "vk_queue.h"
15*61046927SAndroid Build Coastguard Worker
16*61046927SAndroid Build Coastguard Worker #include "radv_radeon_winsys.h"
17*61046927SAndroid Build Coastguard Worker
18*61046927SAndroid Build Coastguard Worker struct radv_physical_device;
19*61046927SAndroid Build Coastguard Worker struct radv_device;
20*61046927SAndroid Build Coastguard Worker
21*61046927SAndroid Build Coastguard Worker struct radv_queue_ring_info {
22*61046927SAndroid Build Coastguard Worker uint32_t scratch_size_per_wave;
23*61046927SAndroid Build Coastguard Worker uint32_t scratch_waves;
24*61046927SAndroid Build Coastguard Worker uint32_t compute_scratch_size_per_wave;
25*61046927SAndroid Build Coastguard Worker uint32_t compute_scratch_waves;
26*61046927SAndroid Build Coastguard Worker uint32_t esgs_ring_size;
27*61046927SAndroid Build Coastguard Worker uint32_t gsvs_ring_size;
28*61046927SAndroid Build Coastguard Worker uint32_t attr_ring_size;
29*61046927SAndroid Build Coastguard Worker bool tess_rings;
30*61046927SAndroid Build Coastguard Worker bool task_rings;
31*61046927SAndroid Build Coastguard Worker bool mesh_scratch_ring;
32*61046927SAndroid Build Coastguard Worker bool gds;
33*61046927SAndroid Build Coastguard Worker bool gds_oa;
34*61046927SAndroid Build Coastguard Worker bool sample_positions;
35*61046927SAndroid Build Coastguard Worker };
36*61046927SAndroid Build Coastguard Worker
37*61046927SAndroid Build Coastguard Worker enum radv_queue_family {
38*61046927SAndroid Build Coastguard Worker RADV_QUEUE_GENERAL,
39*61046927SAndroid Build Coastguard Worker RADV_QUEUE_COMPUTE,
40*61046927SAndroid Build Coastguard Worker RADV_QUEUE_TRANSFER,
41*61046927SAndroid Build Coastguard Worker RADV_QUEUE_SPARSE,
42*61046927SAndroid Build Coastguard Worker RADV_QUEUE_VIDEO_DEC,
43*61046927SAndroid Build Coastguard Worker RADV_QUEUE_VIDEO_ENC,
44*61046927SAndroid Build Coastguard Worker RADV_MAX_QUEUE_FAMILIES,
45*61046927SAndroid Build Coastguard Worker RADV_QUEUE_FOREIGN = RADV_MAX_QUEUE_FAMILIES,
46*61046927SAndroid Build Coastguard Worker RADV_QUEUE_IGNORED,
47*61046927SAndroid Build Coastguard Worker };
48*61046927SAndroid Build Coastguard Worker
49*61046927SAndroid Build Coastguard Worker struct radv_queue_state {
50*61046927SAndroid Build Coastguard Worker enum radv_queue_family qf;
51*61046927SAndroid Build Coastguard Worker struct radv_queue_ring_info ring_info;
52*61046927SAndroid Build Coastguard Worker
53*61046927SAndroid Build Coastguard Worker struct radeon_winsys_bo *scratch_bo;
54*61046927SAndroid Build Coastguard Worker struct radeon_winsys_bo *descriptor_bo;
55*61046927SAndroid Build Coastguard Worker struct radeon_winsys_bo *compute_scratch_bo;
56*61046927SAndroid Build Coastguard Worker struct radeon_winsys_bo *esgs_ring_bo;
57*61046927SAndroid Build Coastguard Worker struct radeon_winsys_bo *gsvs_ring_bo;
58*61046927SAndroid Build Coastguard Worker struct radeon_winsys_bo *tess_rings_bo;
59*61046927SAndroid Build Coastguard Worker struct radeon_winsys_bo *task_rings_bo;
60*61046927SAndroid Build Coastguard Worker struct radeon_winsys_bo *mesh_scratch_ring_bo;
61*61046927SAndroid Build Coastguard Worker struct radeon_winsys_bo *attr_ring_bo;
62*61046927SAndroid Build Coastguard Worker struct radeon_winsys_bo *gds_bo;
63*61046927SAndroid Build Coastguard Worker struct radeon_winsys_bo *gds_oa_bo;
64*61046927SAndroid Build Coastguard Worker
65*61046927SAndroid Build Coastguard Worker struct radeon_cmdbuf *initial_preamble_cs;
66*61046927SAndroid Build Coastguard Worker struct radeon_cmdbuf *initial_full_flush_preamble_cs;
67*61046927SAndroid Build Coastguard Worker struct radeon_cmdbuf *continue_preamble_cs;
68*61046927SAndroid Build Coastguard Worker struct radeon_cmdbuf *gang_wait_preamble_cs;
69*61046927SAndroid Build Coastguard Worker struct radeon_cmdbuf *gang_wait_postamble_cs;
70*61046927SAndroid Build Coastguard Worker
71*61046927SAndroid Build Coastguard Worker /* the uses_shadow_regs here will be set only for general queue */
72*61046927SAndroid Build Coastguard Worker bool uses_shadow_regs;
73*61046927SAndroid Build Coastguard Worker /* register state is saved in shadowed_regs buffer */
74*61046927SAndroid Build Coastguard Worker struct radeon_winsys_bo *shadowed_regs;
75*61046927SAndroid Build Coastguard Worker /* shadow regs preamble ib. This will be the first preamble ib.
76*61046927SAndroid Build Coastguard Worker * This ib has the packets to start register shadowing.
77*61046927SAndroid Build Coastguard Worker */
78*61046927SAndroid Build Coastguard Worker struct radeon_winsys_bo *shadow_regs_ib;
79*61046927SAndroid Build Coastguard Worker uint32_t shadow_regs_ib_size_dw;
80*61046927SAndroid Build Coastguard Worker };
81*61046927SAndroid Build Coastguard Worker
82*61046927SAndroid Build Coastguard Worker struct radv_queue {
83*61046927SAndroid Build Coastguard Worker struct vk_queue vk;
84*61046927SAndroid Build Coastguard Worker struct radeon_winsys_ctx *hw_ctx;
85*61046927SAndroid Build Coastguard Worker enum radeon_ctx_priority priority;
86*61046927SAndroid Build Coastguard Worker struct radv_queue_state state;
87*61046927SAndroid Build Coastguard Worker struct radv_queue_state *follower_state;
88*61046927SAndroid Build Coastguard Worker struct radeon_winsys_bo *gang_sem_bo;
89*61046927SAndroid Build Coastguard Worker
90*61046927SAndroid Build Coastguard Worker uint64_t last_shader_upload_seq;
91*61046927SAndroid Build Coastguard Worker bool sqtt_present;
92*61046927SAndroid Build Coastguard Worker };
93*61046927SAndroid Build Coastguard Worker
94*61046927SAndroid Build Coastguard Worker VK_DEFINE_HANDLE_CASTS(radv_queue, vk.base, VkQueue, VK_OBJECT_TYPE_QUEUE)
95*61046927SAndroid Build Coastguard Worker
96*61046927SAndroid Build Coastguard Worker static inline struct radv_device *
radv_queue_device(const struct radv_queue * queue)97*61046927SAndroid Build Coastguard Worker radv_queue_device(const struct radv_queue *queue)
98*61046927SAndroid Build Coastguard Worker {
99*61046927SAndroid Build Coastguard Worker return (struct radv_device *)queue->vk.base.device;
100*61046927SAndroid Build Coastguard Worker }
101*61046927SAndroid Build Coastguard Worker
102*61046927SAndroid Build Coastguard Worker int radv_queue_init(struct radv_device *device, struct radv_queue *queue, int idx,
103*61046927SAndroid Build Coastguard Worker const VkDeviceQueueCreateInfo *create_info,
104*61046927SAndroid Build Coastguard Worker const VkDeviceQueueGlobalPriorityCreateInfoKHR *global_priority);
105*61046927SAndroid Build Coastguard Worker
106*61046927SAndroid Build Coastguard Worker void radv_queue_finish(struct radv_queue *queue);
107*61046927SAndroid Build Coastguard Worker
108*61046927SAndroid Build Coastguard Worker enum radeon_ctx_priority radv_get_queue_global_priority(const VkDeviceQueueGlobalPriorityCreateInfoKHR *pObj);
109*61046927SAndroid Build Coastguard Worker
110*61046927SAndroid Build Coastguard Worker void radv_emit_graphics(struct radv_device *device, struct radeon_cmdbuf *cs);
111*61046927SAndroid Build Coastguard Worker
112*61046927SAndroid Build Coastguard Worker bool radv_queue_internal_submit(struct radv_queue *queue, struct radeon_cmdbuf *cs);
113*61046927SAndroid Build Coastguard Worker
114*61046927SAndroid Build Coastguard Worker enum amd_ip_type radv_queue_ring(const struct radv_queue *queue);
115*61046927SAndroid Build Coastguard Worker
116*61046927SAndroid Build Coastguard Worker enum amd_ip_type radv_queue_family_to_ring(const struct radv_physical_device *dev, enum radv_queue_family f);
117*61046927SAndroid Build Coastguard Worker
118*61046927SAndroid Build Coastguard Worker #endif /* RADV_QUEUE_H */
119