xref: /aosp_15_r20/external/mesa3d/src/amd/vulkan/radv_device.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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_DEVICE_H
12*61046927SAndroid Build Coastguard Worker #define RADV_DEVICE_H
13*61046927SAndroid Build Coastguard Worker 
14*61046927SAndroid Build Coastguard Worker #include "ac_descriptors.h"
15*61046927SAndroid Build Coastguard Worker #include "ac_spm.h"
16*61046927SAndroid Build Coastguard Worker #include "ac_sqtt.h"
17*61046927SAndroid Build Coastguard Worker 
18*61046927SAndroid Build Coastguard Worker #include "util/mesa-blake3.h"
19*61046927SAndroid Build Coastguard Worker 
20*61046927SAndroid Build Coastguard Worker #include "radv_pipeline.h"
21*61046927SAndroid Build Coastguard Worker #include "radv_printf.h"
22*61046927SAndroid Build Coastguard Worker #include "radv_queue.h"
23*61046927SAndroid Build Coastguard Worker #include "radv_radeon_winsys.h"
24*61046927SAndroid Build Coastguard Worker #include "radv_rra.h"
25*61046927SAndroid Build Coastguard Worker #include "radv_shader.h"
26*61046927SAndroid Build Coastguard Worker 
27*61046927SAndroid Build Coastguard Worker #include "vk_device.h"
28*61046927SAndroid Build Coastguard Worker #include "vk_texcompress_astc.h"
29*61046927SAndroid Build Coastguard Worker #include "vk_texcompress_etc2.h"
30*61046927SAndroid Build Coastguard Worker 
31*61046927SAndroid Build Coastguard Worker #define RADV_NUM_HW_CTX (RADEON_CTX_PRIORITY_REALTIME + 1)
32*61046927SAndroid Build Coastguard Worker 
33*61046927SAndroid Build Coastguard Worker struct radv_image_view;
34*61046927SAndroid Build Coastguard Worker 
35*61046927SAndroid Build Coastguard Worker enum radv_dispatch_table {
36*61046927SAndroid Build Coastguard Worker    RADV_DEVICE_DISPATCH_TABLE,
37*61046927SAndroid Build Coastguard Worker    RADV_ANNOTATE_DISPATCH_TABLE,
38*61046927SAndroid Build Coastguard Worker    RADV_APP_DISPATCH_TABLE,
39*61046927SAndroid Build Coastguard Worker    RADV_RGP_DISPATCH_TABLE,
40*61046927SAndroid Build Coastguard Worker    RADV_RRA_DISPATCH_TABLE,
41*61046927SAndroid Build Coastguard Worker    RADV_RMV_DISPATCH_TABLE,
42*61046927SAndroid Build Coastguard Worker    RADV_CTX_ROLL_DISPATCH_TABLE,
43*61046927SAndroid Build Coastguard Worker    RADV_DISPATCH_TABLE_COUNT,
44*61046927SAndroid Build Coastguard Worker };
45*61046927SAndroid Build Coastguard Worker 
46*61046927SAndroid Build Coastguard Worker struct radv_layer_dispatch_tables {
47*61046927SAndroid Build Coastguard Worker    struct vk_device_dispatch_table annotate;
48*61046927SAndroid Build Coastguard Worker    struct vk_device_dispatch_table app;
49*61046927SAndroid Build Coastguard Worker    struct vk_device_dispatch_table rgp;
50*61046927SAndroid Build Coastguard Worker    struct vk_device_dispatch_table rra;
51*61046927SAndroid Build Coastguard Worker    struct vk_device_dispatch_table rmv;
52*61046927SAndroid Build Coastguard Worker    struct vk_device_dispatch_table ctx_roll;
53*61046927SAndroid Build Coastguard Worker };
54*61046927SAndroid Build Coastguard Worker 
55*61046927SAndroid Build Coastguard Worker struct radv_device_cache_key {
56*61046927SAndroid Build Coastguard Worker    uint32_t disable_trunc_coord : 1;
57*61046927SAndroid Build Coastguard Worker    uint32_t image_2d_view_of_3d : 1;
58*61046927SAndroid Build Coastguard Worker    uint32_t mesh_shader_queries : 1;
59*61046927SAndroid Build Coastguard Worker    uint32_t primitives_generated_query : 1;
60*61046927SAndroid Build Coastguard Worker };
61*61046927SAndroid Build Coastguard Worker 
62*61046927SAndroid Build Coastguard Worker enum radv_force_vrs {
63*61046927SAndroid Build Coastguard Worker    RADV_FORCE_VRS_1x1 = 0,
64*61046927SAndroid Build Coastguard Worker    RADV_FORCE_VRS_2x2,
65*61046927SAndroid Build Coastguard Worker    RADV_FORCE_VRS_2x1,
66*61046927SAndroid Build Coastguard Worker    RADV_FORCE_VRS_1x2,
67*61046927SAndroid Build Coastguard Worker };
68*61046927SAndroid Build Coastguard Worker 
69*61046927SAndroid Build Coastguard Worker struct radv_notifier {
70*61046927SAndroid Build Coastguard Worker    int fd;
71*61046927SAndroid Build Coastguard Worker    int watch;
72*61046927SAndroid Build Coastguard Worker    bool quit;
73*61046927SAndroid Build Coastguard Worker    thrd_t thread;
74*61046927SAndroid Build Coastguard Worker };
75*61046927SAndroid Build Coastguard Worker 
76*61046927SAndroid Build Coastguard Worker struct radv_meta_state {
77*61046927SAndroid Build Coastguard Worker    VkAllocationCallbacks alloc;
78*61046927SAndroid Build Coastguard Worker 
79*61046927SAndroid Build Coastguard Worker    VkPipelineCache cache;
80*61046927SAndroid Build Coastguard Worker    uint32_t initial_cache_entries;
81*61046927SAndroid Build Coastguard Worker 
82*61046927SAndroid Build Coastguard Worker    /*
83*61046927SAndroid Build Coastguard Worker     * For on-demand pipeline creation, makes sure that
84*61046927SAndroid Build Coastguard Worker     * only one thread tries to build a pipeline at the same time.
85*61046927SAndroid Build Coastguard Worker     */
86*61046927SAndroid Build Coastguard Worker    mtx_t mtx;
87*61046927SAndroid Build Coastguard Worker 
88*61046927SAndroid Build Coastguard Worker    /**
89*61046927SAndroid Build Coastguard Worker     * Use array element `i` for images with `2^i` samples.
90*61046927SAndroid Build Coastguard Worker     */
91*61046927SAndroid Build Coastguard Worker    struct {
92*61046927SAndroid Build Coastguard Worker       VkPipeline color_pipelines[NUM_META_FS_KEYS];
93*61046927SAndroid Build Coastguard Worker    } color_clear[MAX_SAMPLES_LOG2][MAX_RTS];
94*61046927SAndroid Build Coastguard Worker 
95*61046927SAndroid Build Coastguard Worker    struct {
96*61046927SAndroid Build Coastguard Worker       VkPipeline depth_only_pipeline[NUM_DEPTH_CLEAR_PIPELINES];
97*61046927SAndroid Build Coastguard Worker       VkPipeline stencil_only_pipeline[NUM_DEPTH_CLEAR_PIPELINES];
98*61046927SAndroid Build Coastguard Worker       VkPipeline depthstencil_pipeline[NUM_DEPTH_CLEAR_PIPELINES];
99*61046927SAndroid Build Coastguard Worker 
100*61046927SAndroid Build Coastguard Worker       VkPipeline depth_only_unrestricted_pipeline[NUM_DEPTH_CLEAR_PIPELINES];
101*61046927SAndroid Build Coastguard Worker       VkPipeline stencil_only_unrestricted_pipeline[NUM_DEPTH_CLEAR_PIPELINES];
102*61046927SAndroid Build Coastguard Worker       VkPipeline depthstencil_unrestricted_pipeline[NUM_DEPTH_CLEAR_PIPELINES];
103*61046927SAndroid Build Coastguard Worker    } ds_clear[MAX_SAMPLES_LOG2];
104*61046927SAndroid Build Coastguard Worker 
105*61046927SAndroid Build Coastguard Worker    VkPipelineLayout clear_color_p_layout;
106*61046927SAndroid Build Coastguard Worker    VkPipelineLayout clear_depth_p_layout;
107*61046927SAndroid Build Coastguard Worker    VkPipelineLayout clear_depth_unrestricted_p_layout;
108*61046927SAndroid Build Coastguard Worker 
109*61046927SAndroid Build Coastguard Worker    /* Optimized compute fast HTILE clear for stencil or depth only. */
110*61046927SAndroid Build Coastguard Worker    VkPipeline clear_htile_mask_pipeline;
111*61046927SAndroid Build Coastguard Worker    VkPipelineLayout clear_htile_mask_p_layout;
112*61046927SAndroid Build Coastguard Worker    VkDescriptorSetLayout clear_htile_mask_ds_layout;
113*61046927SAndroid Build Coastguard Worker 
114*61046927SAndroid Build Coastguard Worker    /* Copy VRS into HTILE. */
115*61046927SAndroid Build Coastguard Worker    VkPipeline copy_vrs_htile_pipeline;
116*61046927SAndroid Build Coastguard Worker    VkPipelineLayout copy_vrs_htile_p_layout;
117*61046927SAndroid Build Coastguard Worker    VkDescriptorSetLayout copy_vrs_htile_ds_layout;
118*61046927SAndroid Build Coastguard Worker 
119*61046927SAndroid Build Coastguard Worker    /* Clear DCC with comp-to-single. */
120*61046927SAndroid Build Coastguard Worker    VkPipeline clear_dcc_comp_to_single_pipeline[2]; /* 0: 1x, 1: 2x/4x/8x */
121*61046927SAndroid Build Coastguard Worker    VkPipelineLayout clear_dcc_comp_to_single_p_layout;
122*61046927SAndroid Build Coastguard Worker    VkDescriptorSetLayout clear_dcc_comp_to_single_ds_layout;
123*61046927SAndroid Build Coastguard Worker 
124*61046927SAndroid Build Coastguard Worker    struct {
125*61046927SAndroid Build Coastguard Worker       /** Pipeline that blits from a 1D image. */
126*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline_1d_src[NUM_META_FS_KEYS];
127*61046927SAndroid Build Coastguard Worker 
128*61046927SAndroid Build Coastguard Worker       /** Pipeline that blits from a 2D image. */
129*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline_2d_src[NUM_META_FS_KEYS];
130*61046927SAndroid Build Coastguard Worker 
131*61046927SAndroid Build Coastguard Worker       /** Pipeline that blits from a 3D image. */
132*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline_3d_src[NUM_META_FS_KEYS];
133*61046927SAndroid Build Coastguard Worker 
134*61046927SAndroid Build Coastguard Worker       VkPipeline depth_only_1d_pipeline;
135*61046927SAndroid Build Coastguard Worker       VkPipeline depth_only_2d_pipeline;
136*61046927SAndroid Build Coastguard Worker       VkPipeline depth_only_3d_pipeline;
137*61046927SAndroid Build Coastguard Worker 
138*61046927SAndroid Build Coastguard Worker       VkPipeline stencil_only_1d_pipeline;
139*61046927SAndroid Build Coastguard Worker       VkPipeline stencil_only_2d_pipeline;
140*61046927SAndroid Build Coastguard Worker       VkPipeline stencil_only_3d_pipeline;
141*61046927SAndroid Build Coastguard Worker       VkPipelineLayout pipeline_layout;
142*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout ds_layout;
143*61046927SAndroid Build Coastguard Worker    } blit;
144*61046927SAndroid Build Coastguard Worker 
145*61046927SAndroid Build Coastguard Worker    struct {
146*61046927SAndroid Build Coastguard Worker       VkPipelineLayout p_layouts[5];
147*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout ds_layouts[5];
148*61046927SAndroid Build Coastguard Worker       VkPipeline pipelines[5][NUM_META_FS_KEYS];
149*61046927SAndroid Build Coastguard Worker 
150*61046927SAndroid Build Coastguard Worker       VkPipeline depth_only_pipeline[5];
151*61046927SAndroid Build Coastguard Worker 
152*61046927SAndroid Build Coastguard Worker       VkPipeline stencil_only_pipeline[5];
153*61046927SAndroid Build Coastguard Worker    } blit2d[MAX_SAMPLES_LOG2];
154*61046927SAndroid Build Coastguard Worker 
155*61046927SAndroid Build Coastguard Worker    struct {
156*61046927SAndroid Build Coastguard Worker       VkPipelineLayout img_p_layout;
157*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout img_ds_layout;
158*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline;
159*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline_3d;
160*61046927SAndroid Build Coastguard Worker    } itob;
161*61046927SAndroid Build Coastguard Worker    struct {
162*61046927SAndroid Build Coastguard Worker       VkPipelineLayout img_p_layout;
163*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout img_ds_layout;
164*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline;
165*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline_3d;
166*61046927SAndroid Build Coastguard Worker    } btoi;
167*61046927SAndroid Build Coastguard Worker    struct {
168*61046927SAndroid Build Coastguard Worker       VkPipelineLayout img_p_layout;
169*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout img_ds_layout;
170*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline;
171*61046927SAndroid Build Coastguard Worker    } btoi_r32g32b32;
172*61046927SAndroid Build Coastguard Worker    struct {
173*61046927SAndroid Build Coastguard Worker       VkPipelineLayout img_p_layout;
174*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout img_ds_layout;
175*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline[MAX_SAMPLES_LOG2];
176*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline_2d_3d;
177*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline_3d_2d;
178*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline_3d_3d;
179*61046927SAndroid Build Coastguard Worker    } itoi;
180*61046927SAndroid Build Coastguard Worker    struct {
181*61046927SAndroid Build Coastguard Worker       VkPipelineLayout img_p_layout;
182*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout img_ds_layout;
183*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline;
184*61046927SAndroid Build Coastguard Worker    } itoi_r32g32b32;
185*61046927SAndroid Build Coastguard Worker    struct {
186*61046927SAndroid Build Coastguard Worker       VkPipelineLayout img_p_layout;
187*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout img_ds_layout;
188*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline[MAX_SAMPLES_LOG2];
189*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline_3d;
190*61046927SAndroid Build Coastguard Worker    } cleari;
191*61046927SAndroid Build Coastguard Worker    struct {
192*61046927SAndroid Build Coastguard Worker       VkPipelineLayout img_p_layout;
193*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout img_ds_layout;
194*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline;
195*61046927SAndroid Build Coastguard Worker    } cleari_r32g32b32;
196*61046927SAndroid Build Coastguard Worker    struct {
197*61046927SAndroid Build Coastguard Worker       VkPipelineLayout p_layout;
198*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout ds_layout;
199*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline[MAX_SAMPLES_LOG2];
200*61046927SAndroid Build Coastguard Worker    } fmask_copy;
201*61046927SAndroid Build Coastguard Worker 
202*61046927SAndroid Build Coastguard Worker    struct {
203*61046927SAndroid Build Coastguard Worker       VkPipelineLayout p_layout;
204*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline[NUM_META_FS_KEYS];
205*61046927SAndroid Build Coastguard Worker    } resolve;
206*61046927SAndroid Build Coastguard Worker 
207*61046927SAndroid Build Coastguard Worker    struct {
208*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout ds_layout;
209*61046927SAndroid Build Coastguard Worker       VkPipelineLayout p_layout;
210*61046927SAndroid Build Coastguard Worker       struct {
211*61046927SAndroid Build Coastguard Worker          VkPipeline pipeline;
212*61046927SAndroid Build Coastguard Worker          VkPipeline i_pipeline;
213*61046927SAndroid Build Coastguard Worker          VkPipeline srgb_pipeline;
214*61046927SAndroid Build Coastguard Worker       } rc[MAX_SAMPLES_LOG2];
215*61046927SAndroid Build Coastguard Worker 
216*61046927SAndroid Build Coastguard Worker       VkPipeline depth_zero_pipeline;
217*61046927SAndroid Build Coastguard Worker       struct {
218*61046927SAndroid Build Coastguard Worker          VkPipeline average_pipeline;
219*61046927SAndroid Build Coastguard Worker          VkPipeline max_pipeline;
220*61046927SAndroid Build Coastguard Worker          VkPipeline min_pipeline;
221*61046927SAndroid Build Coastguard Worker       } depth[MAX_SAMPLES_LOG2];
222*61046927SAndroid Build Coastguard Worker 
223*61046927SAndroid Build Coastguard Worker       VkPipeline stencil_zero_pipeline;
224*61046927SAndroid Build Coastguard Worker       struct {
225*61046927SAndroid Build Coastguard Worker          VkPipeline max_pipeline;
226*61046927SAndroid Build Coastguard Worker          VkPipeline min_pipeline;
227*61046927SAndroid Build Coastguard Worker       } stencil[MAX_SAMPLES_LOG2];
228*61046927SAndroid Build Coastguard Worker    } resolve_compute;
229*61046927SAndroid Build Coastguard Worker 
230*61046927SAndroid Build Coastguard Worker    struct {
231*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout ds_layout;
232*61046927SAndroid Build Coastguard Worker       VkPipelineLayout p_layout;
233*61046927SAndroid Build Coastguard Worker 
234*61046927SAndroid Build Coastguard Worker       struct {
235*61046927SAndroid Build Coastguard Worker          VkPipeline pipeline[NUM_META_FS_KEYS];
236*61046927SAndroid Build Coastguard Worker       } rc[MAX_SAMPLES_LOG2];
237*61046927SAndroid Build Coastguard Worker 
238*61046927SAndroid Build Coastguard Worker       VkPipeline depth_zero_pipeline;
239*61046927SAndroid Build Coastguard Worker       struct {
240*61046927SAndroid Build Coastguard Worker          VkPipeline average_pipeline;
241*61046927SAndroid Build Coastguard Worker          VkPipeline max_pipeline;
242*61046927SAndroid Build Coastguard Worker          VkPipeline min_pipeline;
243*61046927SAndroid Build Coastguard Worker       } depth[MAX_SAMPLES_LOG2];
244*61046927SAndroid Build Coastguard Worker 
245*61046927SAndroid Build Coastguard Worker       VkPipeline stencil_zero_pipeline;
246*61046927SAndroid Build Coastguard Worker       struct {
247*61046927SAndroid Build Coastguard Worker          VkPipeline max_pipeline;
248*61046927SAndroid Build Coastguard Worker          VkPipeline min_pipeline;
249*61046927SAndroid Build Coastguard Worker       } stencil[MAX_SAMPLES_LOG2];
250*61046927SAndroid Build Coastguard Worker    } resolve_fragment;
251*61046927SAndroid Build Coastguard Worker 
252*61046927SAndroid Build Coastguard Worker    struct {
253*61046927SAndroid Build Coastguard Worker       VkPipelineLayout p_layout;
254*61046927SAndroid Build Coastguard Worker       VkPipeline decompress_pipeline[MAX_SAMPLES_LOG2];
255*61046927SAndroid Build Coastguard Worker    } depth_decomp;
256*61046927SAndroid Build Coastguard Worker 
257*61046927SAndroid Build Coastguard Worker    VkDescriptorSetLayout expand_depth_stencil_compute_ds_layout;
258*61046927SAndroid Build Coastguard Worker    VkPipelineLayout expand_depth_stencil_compute_p_layout;
259*61046927SAndroid Build Coastguard Worker    VkPipeline expand_depth_stencil_compute_pipeline;
260*61046927SAndroid Build Coastguard Worker 
261*61046927SAndroid Build Coastguard Worker    struct {
262*61046927SAndroid Build Coastguard Worker       VkPipelineLayout p_layout;
263*61046927SAndroid Build Coastguard Worker       VkPipeline cmask_eliminate_pipeline;
264*61046927SAndroid Build Coastguard Worker       VkPipeline fmask_decompress_pipeline;
265*61046927SAndroid Build Coastguard Worker       VkPipeline dcc_decompress_pipeline;
266*61046927SAndroid Build Coastguard Worker 
267*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout dcc_decompress_compute_ds_layout;
268*61046927SAndroid Build Coastguard Worker       VkPipelineLayout dcc_decompress_compute_p_layout;
269*61046927SAndroid Build Coastguard Worker       VkPipeline dcc_decompress_compute_pipeline;
270*61046927SAndroid Build Coastguard Worker    } fast_clear_flush;
271*61046927SAndroid Build Coastguard Worker 
272*61046927SAndroid Build Coastguard Worker    struct {
273*61046927SAndroid Build Coastguard Worker       VkPipelineLayout fill_p_layout;
274*61046927SAndroid Build Coastguard Worker       VkPipelineLayout copy_p_layout;
275*61046927SAndroid Build Coastguard Worker       VkPipeline fill_pipeline;
276*61046927SAndroid Build Coastguard Worker       VkPipeline copy_pipeline;
277*61046927SAndroid Build Coastguard Worker    } buffer;
278*61046927SAndroid Build Coastguard Worker 
279*61046927SAndroid Build Coastguard Worker    struct {
280*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout ds_layout;
281*61046927SAndroid Build Coastguard Worker       VkPipelineLayout p_layout;
282*61046927SAndroid Build Coastguard Worker       VkPipeline occlusion_query_pipeline;
283*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline_statistics_query_pipeline;
284*61046927SAndroid Build Coastguard Worker       VkPipeline tfb_query_pipeline;
285*61046927SAndroid Build Coastguard Worker       VkPipeline timestamp_query_pipeline;
286*61046927SAndroid Build Coastguard Worker       VkPipeline pg_query_pipeline;
287*61046927SAndroid Build Coastguard Worker       VkPipeline ms_prim_gen_query_pipeline;
288*61046927SAndroid Build Coastguard Worker    } query;
289*61046927SAndroid Build Coastguard Worker 
290*61046927SAndroid Build Coastguard Worker    struct {
291*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout ds_layout;
292*61046927SAndroid Build Coastguard Worker       VkPipelineLayout p_layout;
293*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline[MAX_SAMPLES_LOG2];
294*61046927SAndroid Build Coastguard Worker    } fmask_expand;
295*61046927SAndroid Build Coastguard Worker 
296*61046927SAndroid Build Coastguard Worker    struct {
297*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout ds_layout;
298*61046927SAndroid Build Coastguard Worker       VkPipelineLayout p_layout;
299*61046927SAndroid Build Coastguard Worker       VkPipeline pipeline[32];
300*61046927SAndroid Build Coastguard Worker    } dcc_retile;
301*61046927SAndroid Build Coastguard Worker 
302*61046927SAndroid Build Coastguard Worker    struct {
303*61046927SAndroid Build Coastguard Worker       VkPipelineLayout leaf_p_layout;
304*61046927SAndroid Build Coastguard Worker       VkPipeline leaf_pipeline;
305*61046927SAndroid Build Coastguard Worker       VkPipeline leaf_updateable_pipeline;
306*61046927SAndroid Build Coastguard Worker       VkPipelineLayout morton_p_layout;
307*61046927SAndroid Build Coastguard Worker       VkPipeline morton_pipeline;
308*61046927SAndroid Build Coastguard Worker       VkPipelineLayout lbvh_main_p_layout;
309*61046927SAndroid Build Coastguard Worker       VkPipeline lbvh_main_pipeline;
310*61046927SAndroid Build Coastguard Worker       VkPipelineLayout lbvh_generate_ir_p_layout;
311*61046927SAndroid Build Coastguard Worker       VkPipeline lbvh_generate_ir_pipeline;
312*61046927SAndroid Build Coastguard Worker       VkPipelineLayout ploc_p_layout;
313*61046927SAndroid Build Coastguard Worker       VkPipeline ploc_pipeline;
314*61046927SAndroid Build Coastguard Worker       VkPipelineLayout encode_p_layout;
315*61046927SAndroid Build Coastguard Worker       VkPipeline encode_pipeline;
316*61046927SAndroid Build Coastguard Worker       VkPipeline encode_compact_pipeline;
317*61046927SAndroid Build Coastguard Worker       VkPipelineLayout header_p_layout;
318*61046927SAndroid Build Coastguard Worker       VkPipeline header_pipeline;
319*61046927SAndroid Build Coastguard Worker       VkPipelineLayout update_p_layout;
320*61046927SAndroid Build Coastguard Worker       VkPipeline update_pipeline;
321*61046927SAndroid Build Coastguard Worker       VkPipelineLayout copy_p_layout;
322*61046927SAndroid Build Coastguard Worker       VkPipeline copy_pipeline;
323*61046927SAndroid Build Coastguard Worker 
324*61046927SAndroid Build Coastguard Worker       struct radix_sort_vk *radix_sort;
325*61046927SAndroid Build Coastguard Worker 
326*61046927SAndroid Build Coastguard Worker       struct {
327*61046927SAndroid Build Coastguard Worker          VkBuffer buffer;
328*61046927SAndroid Build Coastguard Worker          VkDeviceMemory memory;
329*61046927SAndroid Build Coastguard Worker          VkAccelerationStructureKHR accel_struct;
330*61046927SAndroid Build Coastguard Worker       } null;
331*61046927SAndroid Build Coastguard Worker    } accel_struct_build;
332*61046927SAndroid Build Coastguard Worker 
333*61046927SAndroid Build Coastguard Worker    struct vk_texcompress_etc2_state etc_decode;
334*61046927SAndroid Build Coastguard Worker 
335*61046927SAndroid Build Coastguard Worker    struct vk_texcompress_astc_state *astc_decode;
336*61046927SAndroid Build Coastguard Worker 
337*61046927SAndroid Build Coastguard Worker    struct {
338*61046927SAndroid Build Coastguard Worker       VkDescriptorSetLayout ds_layout;
339*61046927SAndroid Build Coastguard Worker       VkPipelineLayout p_layout;
340*61046927SAndroid Build Coastguard Worker    } dgc_prepare;
341*61046927SAndroid Build Coastguard Worker };
342*61046927SAndroid Build Coastguard Worker 
343*61046927SAndroid Build Coastguard Worker struct radv_memory_trace_data {
344*61046927SAndroid Build Coastguard Worker    /* ID of the PTE update event in ftrace data */
345*61046927SAndroid Build Coastguard Worker    uint16_t ftrace_update_ptes_id;
346*61046927SAndroid Build Coastguard Worker 
347*61046927SAndroid Build Coastguard Worker    uint32_t num_cpus;
348*61046927SAndroid Build Coastguard Worker    int *pipe_fds;
349*61046927SAndroid Build Coastguard Worker };
350*61046927SAndroid Build Coastguard Worker 
351*61046927SAndroid Build Coastguard Worker struct radv_sqtt_timestamp {
352*61046927SAndroid Build Coastguard Worker    uint8_t *map;
353*61046927SAndroid Build Coastguard Worker    unsigned offset;
354*61046927SAndroid Build Coastguard Worker    uint64_t size;
355*61046927SAndroid Build Coastguard Worker    struct radeon_winsys_bo *bo;
356*61046927SAndroid Build Coastguard Worker    struct list_head list;
357*61046927SAndroid Build Coastguard Worker };
358*61046927SAndroid Build Coastguard Worker 
359*61046927SAndroid Build Coastguard Worker #define RADV_BORDER_COLOR_COUNT       4096
360*61046927SAndroid Build Coastguard Worker #define RADV_BORDER_COLOR_BUFFER_SIZE (sizeof(VkClearColorValue) * RADV_BORDER_COLOR_COUNT)
361*61046927SAndroid Build Coastguard Worker 
362*61046927SAndroid Build Coastguard Worker struct radv_device_border_color_data {
363*61046927SAndroid Build Coastguard Worker    bool used[RADV_BORDER_COLOR_COUNT];
364*61046927SAndroid Build Coastguard Worker 
365*61046927SAndroid Build Coastguard Worker    struct radeon_winsys_bo *bo;
366*61046927SAndroid Build Coastguard Worker    VkClearColorValue *colors_gpu_ptr;
367*61046927SAndroid Build Coastguard Worker 
368*61046927SAndroid Build Coastguard Worker    /* Mutex is required to guarantee vkCreateSampler thread safety
369*61046927SAndroid Build Coastguard Worker     * given that we are writing to a buffer and checking color occupation */
370*61046927SAndroid Build Coastguard Worker    mtx_t mutex;
371*61046927SAndroid Build Coastguard Worker };
372*61046927SAndroid Build Coastguard Worker 
373*61046927SAndroid Build Coastguard Worker struct radv_pso_cache_stats {
374*61046927SAndroid Build Coastguard Worker    uint32_t hits;
375*61046927SAndroid Build Coastguard Worker    uint32_t misses;
376*61046927SAndroid Build Coastguard Worker };
377*61046927SAndroid Build Coastguard Worker 
378*61046927SAndroid Build Coastguard Worker struct radv_device {
379*61046927SAndroid Build Coastguard Worker    struct vk_device vk;
380*61046927SAndroid Build Coastguard Worker 
381*61046927SAndroid Build Coastguard Worker    struct radeon_winsys *ws;
382*61046927SAndroid Build Coastguard Worker 
383*61046927SAndroid Build Coastguard Worker    struct radv_layer_dispatch_tables layer_dispatch;
384*61046927SAndroid Build Coastguard Worker 
385*61046927SAndroid Build Coastguard Worker    struct radeon_winsys_ctx *hw_ctx[RADV_NUM_HW_CTX];
386*61046927SAndroid Build Coastguard Worker    struct radv_meta_state meta_state;
387*61046927SAndroid Build Coastguard Worker 
388*61046927SAndroid Build Coastguard Worker    struct radv_queue *queues[RADV_MAX_QUEUE_FAMILIES];
389*61046927SAndroid Build Coastguard Worker    int queue_count[RADV_MAX_QUEUE_FAMILIES];
390*61046927SAndroid Build Coastguard Worker 
391*61046927SAndroid Build Coastguard Worker    bool pbb_allowed;
392*61046927SAndroid Build Coastguard Worker    uint32_t scratch_waves;
393*61046927SAndroid Build Coastguard Worker    uint32_t dispatch_initiator;
394*61046927SAndroid Build Coastguard Worker    uint32_t dispatch_initiator_task;
395*61046927SAndroid Build Coastguard Worker 
396*61046927SAndroid Build Coastguard Worker    /* MSAA sample locations.
397*61046927SAndroid Build Coastguard Worker     * The first index is the sample index.
398*61046927SAndroid Build Coastguard Worker     * The second index is the coordinate: X, Y. */
399*61046927SAndroid Build Coastguard Worker    float sample_locations_1x[1][2];
400*61046927SAndroid Build Coastguard Worker    float sample_locations_2x[2][2];
401*61046927SAndroid Build Coastguard Worker    float sample_locations_4x[4][2];
402*61046927SAndroid Build Coastguard Worker    float sample_locations_8x[8][2];
403*61046927SAndroid Build Coastguard Worker 
404*61046927SAndroid Build Coastguard Worker    /* GFX7 and later */
405*61046927SAndroid Build Coastguard Worker    uint32_t gfx_init_size_dw;
406*61046927SAndroid Build Coastguard Worker    struct radeon_winsys_bo *gfx_init;
407*61046927SAndroid Build Coastguard Worker 
408*61046927SAndroid Build Coastguard Worker    struct radeon_winsys_bo *trace_bo;
409*61046927SAndroid Build Coastguard Worker    struct radv_trace_data *trace_data;
410*61046927SAndroid Build Coastguard Worker 
411*61046927SAndroid Build Coastguard Worker    /* Whether to keep shader debug info, for debugging. */
412*61046927SAndroid Build Coastguard Worker    bool keep_shader_info;
413*61046927SAndroid Build Coastguard Worker 
414*61046927SAndroid Build Coastguard Worker    /* Backup in-memory cache to be used if the app doesn't provide one */
415*61046927SAndroid Build Coastguard Worker    struct vk_pipeline_cache *mem_cache;
416*61046927SAndroid Build Coastguard Worker 
417*61046927SAndroid Build Coastguard Worker    /*
418*61046927SAndroid Build Coastguard Worker     * use different counters so MSAA MRTs get consecutive surface indices,
419*61046927SAndroid Build Coastguard Worker     * even if MASK is allocated in between.
420*61046927SAndroid Build Coastguard Worker     */
421*61046927SAndroid Build Coastguard Worker    uint32_t image_mrt_offset_counter;
422*61046927SAndroid Build Coastguard Worker    uint32_t fmask_mrt_offset_counter;
423*61046927SAndroid Build Coastguard Worker 
424*61046927SAndroid Build Coastguard Worker    struct list_head shader_arenas;
425*61046927SAndroid Build Coastguard Worker    struct hash_table_u64 *capture_replay_arena_vas;
426*61046927SAndroid Build Coastguard Worker    unsigned shader_arena_shift;
427*61046927SAndroid Build Coastguard Worker    uint8_t shader_free_list_mask;
428*61046927SAndroid Build Coastguard Worker    struct radv_shader_free_list shader_free_list;
429*61046927SAndroid Build Coastguard Worker    struct radv_shader_free_list capture_replay_free_list;
430*61046927SAndroid Build Coastguard Worker    struct list_head shader_block_obj_pool;
431*61046927SAndroid Build Coastguard Worker    mtx_t shader_arena_mutex;
432*61046927SAndroid Build Coastguard Worker 
433*61046927SAndroid Build Coastguard Worker    mtx_t shader_upload_hw_ctx_mutex;
434*61046927SAndroid Build Coastguard Worker    struct radeon_winsys_ctx *shader_upload_hw_ctx;
435*61046927SAndroid Build Coastguard Worker    VkSemaphore shader_upload_sem;
436*61046927SAndroid Build Coastguard Worker    uint64_t shader_upload_seq;
437*61046927SAndroid Build Coastguard Worker    struct list_head shader_dma_submissions;
438*61046927SAndroid Build Coastguard Worker    mtx_t shader_dma_submission_list_mutex;
439*61046927SAndroid Build Coastguard Worker    cnd_t shader_dma_submission_list_cond;
440*61046927SAndroid Build Coastguard Worker 
441*61046927SAndroid Build Coastguard Worker    /* Whether to DMA shaders to invisible VRAM or to upload directly through BAR. */
442*61046927SAndroid Build Coastguard Worker    bool shader_use_invisible_vram;
443*61046927SAndroid Build Coastguard Worker 
444*61046927SAndroid Build Coastguard Worker    /* Whether to inline the compute dispatch size in user sgprs. */
445*61046927SAndroid Build Coastguard Worker    bool load_grid_size_from_user_sgpr;
446*61046927SAndroid Build Coastguard Worker 
447*61046927SAndroid Build Coastguard Worker    /* Whether the driver uses a global BO list. */
448*61046927SAndroid Build Coastguard Worker    bool use_global_bo_list;
449*61046927SAndroid Build Coastguard Worker 
450*61046927SAndroid Build Coastguard Worker    /* Whether anisotropy is forced with RADV_TEX_ANISO (-1 is disabled). */
451*61046927SAndroid Build Coastguard Worker    int force_aniso;
452*61046927SAndroid Build Coastguard Worker 
453*61046927SAndroid Build Coastguard Worker    /* Always disable TRUNC_COORD. */
454*61046927SAndroid Build Coastguard Worker    bool disable_trunc_coord;
455*61046927SAndroid Build Coastguard Worker 
456*61046927SAndroid Build Coastguard Worker    struct radv_device_border_color_data border_color_data;
457*61046927SAndroid Build Coastguard Worker 
458*61046927SAndroid Build Coastguard Worker    /* Thread trace. */
459*61046927SAndroid Build Coastguard Worker    struct ac_sqtt sqtt;
460*61046927SAndroid Build Coastguard Worker    bool sqtt_enabled;
461*61046927SAndroid Build Coastguard Worker    bool sqtt_triggered;
462*61046927SAndroid Build Coastguard Worker 
463*61046927SAndroid Build Coastguard Worker    /* SQTT timestamps for queue events. */
464*61046927SAndroid Build Coastguard Worker    simple_mtx_t sqtt_timestamp_mtx;
465*61046927SAndroid Build Coastguard Worker    struct radv_sqtt_timestamp sqtt_timestamp;
466*61046927SAndroid Build Coastguard Worker 
467*61046927SAndroid Build Coastguard Worker    /* SQTT timed cmd buffers. */
468*61046927SAndroid Build Coastguard Worker    simple_mtx_t sqtt_command_pool_mtx;
469*61046927SAndroid Build Coastguard Worker    struct vk_command_pool *sqtt_command_pool[2];
470*61046927SAndroid Build Coastguard Worker 
471*61046927SAndroid Build Coastguard Worker    /* Memory trace. */
472*61046927SAndroid Build Coastguard Worker    struct radv_memory_trace_data memory_trace;
473*61046927SAndroid Build Coastguard Worker 
474*61046927SAndroid Build Coastguard Worker    /* SPM. */
475*61046927SAndroid Build Coastguard Worker    struct ac_spm spm;
476*61046927SAndroid Build Coastguard Worker 
477*61046927SAndroid Build Coastguard Worker    /* Radeon Raytracing Analyzer trace. */
478*61046927SAndroid Build Coastguard Worker    struct radv_rra_trace_data rra_trace;
479*61046927SAndroid Build Coastguard Worker 
480*61046927SAndroid Build Coastguard Worker    FILE *ctx_roll_file;
481*61046927SAndroid Build Coastguard Worker    simple_mtx_t ctx_roll_mtx;
482*61046927SAndroid Build Coastguard Worker 
483*61046927SAndroid Build Coastguard Worker    /* Trap handler. */
484*61046927SAndroid Build Coastguard Worker    struct radv_shader *trap_handler_shader;
485*61046927SAndroid Build Coastguard Worker    struct radeon_winsys_bo *tma_bo; /* Trap Memory Address */
486*61046927SAndroid Build Coastguard Worker    uint32_t *tma_ptr;
487*61046927SAndroid Build Coastguard Worker 
488*61046927SAndroid Build Coastguard Worker    /* Overallocation. */
489*61046927SAndroid Build Coastguard Worker    bool overallocation_disallowed;
490*61046927SAndroid Build Coastguard Worker    uint64_t allocated_memory_size[VK_MAX_MEMORY_HEAPS];
491*61046927SAndroid Build Coastguard Worker    mtx_t overallocation_mutex;
492*61046927SAndroid Build Coastguard Worker 
493*61046927SAndroid Build Coastguard Worker    /* RADV_FORCE_VRS. */
494*61046927SAndroid Build Coastguard Worker    struct radv_notifier notifier;
495*61046927SAndroid Build Coastguard Worker    enum radv_force_vrs force_vrs;
496*61046927SAndroid Build Coastguard Worker 
497*61046927SAndroid Build Coastguard Worker    /* Depth image for VRS when not bound by the app. */
498*61046927SAndroid Build Coastguard Worker    struct {
499*61046927SAndroid Build Coastguard Worker       struct radv_image *image;
500*61046927SAndroid Build Coastguard Worker       struct radv_buffer *buffer; /* HTILE */
501*61046927SAndroid Build Coastguard Worker       struct radv_device_memory *mem;
502*61046927SAndroid Build Coastguard Worker    } vrs;
503*61046927SAndroid Build Coastguard Worker 
504*61046927SAndroid Build Coastguard Worker    /* Prime blit sdma queue */
505*61046927SAndroid Build Coastguard Worker    struct radv_queue *private_sdma_queue;
506*61046927SAndroid Build Coastguard Worker 
507*61046927SAndroid Build Coastguard Worker    struct radv_shader_part_cache vs_prologs;
508*61046927SAndroid Build Coastguard Worker    struct radv_shader_part *simple_vs_prologs[MAX_VERTEX_ATTRIBS];
509*61046927SAndroid Build Coastguard Worker    struct radv_shader_part *instance_rate_vs_prologs[816];
510*61046927SAndroid Build Coastguard Worker 
511*61046927SAndroid Build Coastguard Worker    struct radv_shader_part_cache ps_epilogs;
512*61046927SAndroid Build Coastguard Worker 
513*61046927SAndroid Build Coastguard Worker    simple_mtx_t trace_mtx;
514*61046927SAndroid Build Coastguard Worker 
515*61046927SAndroid Build Coastguard Worker    /* Whether per-vertex VRS is forced. */
516*61046927SAndroid Build Coastguard Worker    bool force_vrs_enabled;
517*61046927SAndroid Build Coastguard Worker 
518*61046927SAndroid Build Coastguard Worker    simple_mtx_t pstate_mtx;
519*61046927SAndroid Build Coastguard Worker    unsigned pstate_cnt;
520*61046927SAndroid Build Coastguard Worker 
521*61046927SAndroid Build Coastguard Worker    /* BO to contain some performance counter helpers:
522*61046927SAndroid Build Coastguard Worker     * - A lock for profiling cmdbuffers.
523*61046927SAndroid Build Coastguard Worker     * - a temporary fence for the end query synchronization.
524*61046927SAndroid Build Coastguard Worker     * - the pass to use for profiling. (as an array of bools)
525*61046927SAndroid Build Coastguard Worker     */
526*61046927SAndroid Build Coastguard Worker    struct radeon_winsys_bo *perf_counter_bo;
527*61046927SAndroid Build Coastguard Worker 
528*61046927SAndroid Build Coastguard Worker    /* Interleaved lock/unlock commandbuffers for perfcounter passes. */
529*61046927SAndroid Build Coastguard Worker    struct radeon_cmdbuf **perf_counter_lock_cs;
530*61046927SAndroid Build Coastguard Worker 
531*61046927SAndroid Build Coastguard Worker    bool uses_shadow_regs;
532*61046927SAndroid Build Coastguard Worker 
533*61046927SAndroid Build Coastguard Worker    struct hash_table *rt_handles;
534*61046927SAndroid Build Coastguard Worker    simple_mtx_t rt_handles_mtx;
535*61046927SAndroid Build Coastguard Worker 
536*61046927SAndroid Build Coastguard Worker    struct radv_printf_data printf;
537*61046927SAndroid Build Coastguard Worker 
538*61046927SAndroid Build Coastguard Worker    struct radv_device_cache_key cache_key;
539*61046927SAndroid Build Coastguard Worker    blake3_hash cache_hash;
540*61046927SAndroid Build Coastguard Worker 
541*61046927SAndroid Build Coastguard Worker    /* Not NULL if a GPU hang report has been generated for VK_EXT_device_fault. */
542*61046927SAndroid Build Coastguard Worker    char *gpu_hang_report;
543*61046927SAndroid Build Coastguard Worker 
544*61046927SAndroid Build Coastguard Worker    /* For indirect compute pipeline binds with DGC only. */
545*61046927SAndroid Build Coastguard Worker    simple_mtx_t compute_scratch_mtx;
546*61046927SAndroid Build Coastguard Worker    uint32_t compute_scratch_size_per_wave;
547*61046927SAndroid Build Coastguard Worker    uint32_t compute_scratch_waves;
548*61046927SAndroid Build Coastguard Worker 
549*61046927SAndroid Build Coastguard Worker    /* PSO cache stats */
550*61046927SAndroid Build Coastguard Worker    simple_mtx_t pso_cache_stats_mtx;
551*61046927SAndroid Build Coastguard Worker    struct radv_pso_cache_stats pso_cache_stats[RADV_PIPELINE_TYPE_COUNT];
552*61046927SAndroid Build Coastguard Worker };
553*61046927SAndroid Build Coastguard Worker 
554*61046927SAndroid Build Coastguard Worker VK_DEFINE_HANDLE_CASTS(radv_device, vk.base, VkDevice, VK_OBJECT_TYPE_DEVICE)
555*61046927SAndroid Build Coastguard Worker 
556*61046927SAndroid Build Coastguard Worker static inline struct radv_physical_device *
radv_device_physical(const struct radv_device * dev)557*61046927SAndroid Build Coastguard Worker radv_device_physical(const struct radv_device *dev)
558*61046927SAndroid Build Coastguard Worker {
559*61046927SAndroid Build Coastguard Worker    return (struct radv_physical_device *)dev->vk.physical;
560*61046927SAndroid Build Coastguard Worker }
561*61046927SAndroid Build Coastguard Worker 
562*61046927SAndroid Build Coastguard Worker static inline bool
radv_uses_device_generated_commands(const struct radv_device * device)563*61046927SAndroid Build Coastguard Worker radv_uses_device_generated_commands(const struct radv_device *device)
564*61046927SAndroid Build Coastguard Worker {
565*61046927SAndroid Build Coastguard Worker    return device->vk.enabled_features.deviceGeneratedCommandsNV || device->vk.enabled_features.deviceGeneratedCompute;
566*61046927SAndroid Build Coastguard Worker }
567*61046927SAndroid Build Coastguard Worker 
568*61046927SAndroid Build Coastguard Worker static inline bool
radv_uses_primitives_generated_query(const struct radv_device * device)569*61046927SAndroid Build Coastguard Worker radv_uses_primitives_generated_query(const struct radv_device *device)
570*61046927SAndroid Build Coastguard Worker {
571*61046927SAndroid Build Coastguard Worker    return device->vk.enabled_features.primitivesGeneratedQuery ||
572*61046927SAndroid Build Coastguard Worker           device->vk.enabled_features.primitivesGeneratedQueryWithRasterizerDiscard ||
573*61046927SAndroid Build Coastguard Worker           device->vk.enabled_features.primitivesGeneratedQueryWithNonZeroStreams;
574*61046927SAndroid Build Coastguard Worker }
575*61046927SAndroid Build Coastguard Worker 
576*61046927SAndroid Build Coastguard Worker static inline bool
radv_uses_image_float32_atomics(const struct radv_device * device)577*61046927SAndroid Build Coastguard Worker radv_uses_image_float32_atomics(const struct radv_device *device)
578*61046927SAndroid Build Coastguard Worker {
579*61046927SAndroid Build Coastguard Worker    return device->vk.enabled_features.shaderImageFloat32Atomics ||
580*61046927SAndroid Build Coastguard Worker           device->vk.enabled_features.sparseImageFloat32Atomics ||
581*61046927SAndroid Build Coastguard Worker           device->vk.enabled_features.shaderImageFloat32AtomicMinMax ||
582*61046927SAndroid Build Coastguard Worker           device->vk.enabled_features.sparseImageFloat32AtomicMinMax;
583*61046927SAndroid Build Coastguard Worker }
584*61046927SAndroid Build Coastguard Worker 
585*61046927SAndroid Build Coastguard Worker VkResult radv_device_init_vrs_state(struct radv_device *device);
586*61046927SAndroid Build Coastguard Worker 
587*61046927SAndroid Build Coastguard Worker unsigned radv_get_default_max_sample_dist(int log_samples);
588*61046927SAndroid Build Coastguard Worker 
589*61046927SAndroid Build Coastguard Worker void radv_emit_default_sample_locations(const struct radv_physical_device *pdev, struct radeon_cmdbuf *cs,
590*61046927SAndroid Build Coastguard Worker                                         int nr_samples);
591*61046927SAndroid Build Coastguard Worker 
592*61046927SAndroid Build Coastguard Worker bool radv_get_memory_fd(struct radv_device *device, struct radv_device_memory *memory, int *pFD);
593*61046927SAndroid Build Coastguard Worker 
594*61046927SAndroid Build Coastguard Worker unsigned radv_get_dcc_max_uncompressed_block_size(const struct radv_device *device, const struct radv_image *image);
595*61046927SAndroid Build Coastguard Worker 
596*61046927SAndroid Build Coastguard Worker struct radv_color_buffer_info {
597*61046927SAndroid Build Coastguard Worker    struct ac_cb_surface ac;
598*61046927SAndroid Build Coastguard Worker };
599*61046927SAndroid Build Coastguard Worker 
600*61046927SAndroid Build Coastguard Worker struct radv_ds_buffer_info {
601*61046927SAndroid Build Coastguard Worker    struct ac_ds_surface ac;
602*61046927SAndroid Build Coastguard Worker 
603*61046927SAndroid Build Coastguard Worker    uint32_t db_render_override2;
604*61046927SAndroid Build Coastguard Worker    uint32_t db_render_control;
605*61046927SAndroid Build Coastguard Worker };
606*61046927SAndroid Build Coastguard Worker 
607*61046927SAndroid Build Coastguard Worker void radv_initialise_color_surface(struct radv_device *device, struct radv_color_buffer_info *cb,
608*61046927SAndroid Build Coastguard Worker                                    struct radv_image_view *iview);
609*61046927SAndroid Build Coastguard Worker 
610*61046927SAndroid Build Coastguard Worker void radv_initialise_vrs_surface(struct radv_image *image, struct radv_buffer *htile_buffer,
611*61046927SAndroid Build Coastguard Worker                                  struct radv_ds_buffer_info *ds);
612*61046927SAndroid Build Coastguard Worker 
613*61046927SAndroid Build Coastguard Worker 
614*61046927SAndroid Build Coastguard Worker void radv_initialise_ds_surface(const struct radv_device *device, struct radv_ds_buffer_info *ds,
615*61046927SAndroid Build Coastguard Worker                                 struct radv_image_view *iview, VkImageAspectFlags ds_aspects);
616*61046927SAndroid Build Coastguard Worker 
617*61046927SAndroid Build Coastguard Worker void radv_gfx11_set_db_render_control(const struct radv_device *device, unsigned num_samples,
618*61046927SAndroid Build Coastguard Worker                                       unsigned *db_render_control);
619*61046927SAndroid Build Coastguard Worker 
620*61046927SAndroid Build Coastguard Worker bool radv_device_set_pstate(struct radv_device *device, bool enable);
621*61046927SAndroid Build Coastguard Worker 
622*61046927SAndroid Build Coastguard Worker bool radv_device_acquire_performance_counters(struct radv_device *device);
623*61046927SAndroid Build Coastguard Worker 
624*61046927SAndroid Build Coastguard Worker void radv_device_release_performance_counters(struct radv_device *device);
625*61046927SAndroid Build Coastguard Worker 
626*61046927SAndroid Build Coastguard Worker #endif /* RADV_DEVICE_H */
627