1*61046927SAndroid Build Coastguard Worker /*
2*61046927SAndroid Build Coastguard Worker * Copyright © 2022 Collabora Ltd
3*61046927SAndroid Build Coastguard Worker *
4*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a
5*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the "Software"),
6*61046927SAndroid Build Coastguard Worker * to deal in the Software without restriction, including without limitation
7*61046927SAndroid Build Coastguard Worker * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8*61046927SAndroid Build Coastguard Worker * and/or sell copies of the Software, and to permit persons to whom the
9*61046927SAndroid Build Coastguard Worker * Software is furnished to do so, subject to the following conditions:
10*61046927SAndroid Build Coastguard Worker *
11*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the next
12*61046927SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the
13*61046927SAndroid Build Coastguard Worker * Software.
14*61046927SAndroid Build Coastguard Worker *
15*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18*61046927SAndroid Build Coastguard Worker * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20*61046927SAndroid Build Coastguard Worker * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21*61046927SAndroid Build Coastguard Worker * IN THE SOFTWARE.
22*61046927SAndroid Build Coastguard Worker */
23*61046927SAndroid Build Coastguard Worker #ifndef VK_META_H
24*61046927SAndroid Build Coastguard Worker #define VK_META_H
25*61046927SAndroid Build Coastguard Worker
26*61046927SAndroid Build Coastguard Worker #include "vk_limits.h"
27*61046927SAndroid Build Coastguard Worker #include "vk_object.h"
28*61046927SAndroid Build Coastguard Worker
29*61046927SAndroid Build Coastguard Worker #include "util/simple_mtx.h"
30*61046927SAndroid Build Coastguard Worker
31*61046927SAndroid Build Coastguard Worker #include "compiler/nir/nir.h"
32*61046927SAndroid Build Coastguard Worker
33*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
34*61046927SAndroid Build Coastguard Worker extern "C" {
35*61046927SAndroid Build Coastguard Worker #endif
36*61046927SAndroid Build Coastguard Worker
37*61046927SAndroid Build Coastguard Worker struct hash_table;
38*61046927SAndroid Build Coastguard Worker struct vk_command_buffer;
39*61046927SAndroid Build Coastguard Worker struct vk_buffer;
40*61046927SAndroid Build Coastguard Worker struct vk_device;
41*61046927SAndroid Build Coastguard Worker struct vk_image;
42*61046927SAndroid Build Coastguard Worker
43*61046927SAndroid Build Coastguard Worker struct vk_meta_rect {
44*61046927SAndroid Build Coastguard Worker uint32_t x0, y0, x1, y1;
45*61046927SAndroid Build Coastguard Worker float z;
46*61046927SAndroid Build Coastguard Worker uint32_t layer;
47*61046927SAndroid Build Coastguard Worker };
48*61046927SAndroid Build Coastguard Worker
49*61046927SAndroid Build Coastguard Worker #define VK_PRIMITIVE_TOPOLOGY_META_RECT_LIST_MESA (VkPrimitiveTopology)11
50*61046927SAndroid Build Coastguard Worker #define VK_IMAGE_VIEW_CREATE_INTERNAL_MESA (VkImageViewCreateFlagBits)0x40000000
51*61046927SAndroid Build Coastguard Worker
52*61046927SAndroid Build Coastguard Worker struct vk_meta_copy_image_properties {
53*61046927SAndroid Build Coastguard Worker union {
54*61046927SAndroid Build Coastguard Worker struct {
55*61046927SAndroid Build Coastguard Worker /* Format to use for the image view of a color aspect.
56*61046927SAndroid Build Coastguard Worker * Format must not be compressed and be in the RGB/sRGB colorspace.
57*61046927SAndroid Build Coastguard Worker */
58*61046927SAndroid Build Coastguard Worker VkFormat view_format;
59*61046927SAndroid Build Coastguard Worker } color;
60*61046927SAndroid Build Coastguard Worker
61*61046927SAndroid Build Coastguard Worker struct {
62*61046927SAndroid Build Coastguard Worker struct {
63*61046927SAndroid Build Coastguard Worker /* Format to use for the image view of a depth aspect.
64*61046927SAndroid Build Coastguard Worker * Format must not be compressed and be in the RGB/sRGB colorspace.
65*61046927SAndroid Build Coastguard Worker */
66*61046927SAndroid Build Coastguard Worker VkFormat view_format;
67*61046927SAndroid Build Coastguard Worker
68*61046927SAndroid Build Coastguard Worker /* Describe the depth/stencil componant layout. Bits in the mask
69*61046927SAndroid Build Coastguard Worker * must be consecutive and match the original depth bit size.
70*61046927SAndroid Build Coastguard Worker */
71*61046927SAndroid Build Coastguard Worker uint8_t component_mask;
72*61046927SAndroid Build Coastguard Worker } depth;
73*61046927SAndroid Build Coastguard Worker
74*61046927SAndroid Build Coastguard Worker struct {
75*61046927SAndroid Build Coastguard Worker /* Format to use for the image view of a stencil aspect.
76*61046927SAndroid Build Coastguard Worker * Format must not be compressed and be in the RGB/sRGB colorspace.
77*61046927SAndroid Build Coastguard Worker */
78*61046927SAndroid Build Coastguard Worker VkFormat view_format;
79*61046927SAndroid Build Coastguard Worker
80*61046927SAndroid Build Coastguard Worker /* Describe the depth/stencil componant layout. Bits in the mask
81*61046927SAndroid Build Coastguard Worker * must be consecutive and match the original depth bit size.
82*61046927SAndroid Build Coastguard Worker */
83*61046927SAndroid Build Coastguard Worker uint8_t component_mask;
84*61046927SAndroid Build Coastguard Worker } stencil;
85*61046927SAndroid Build Coastguard Worker };
86*61046927SAndroid Build Coastguard Worker };
87*61046927SAndroid Build Coastguard Worker
88*61046927SAndroid Build Coastguard Worker /* Size of the image tile. Used to select the optimal workgroup size. */
89*61046927SAndroid Build Coastguard Worker VkExtent3D tile_size;
90*61046927SAndroid Build Coastguard Worker };
91*61046927SAndroid Build Coastguard Worker
92*61046927SAndroid Build Coastguard Worker enum vk_meta_buffer_chunk_size_id {
93*61046927SAndroid Build Coastguard Worker VK_META_BUFFER_1_BYTE_CHUNK = 0,
94*61046927SAndroid Build Coastguard Worker VK_META_BUFFER_2_BYTE_CHUNK,
95*61046927SAndroid Build Coastguard Worker VK_META_BUFFER_4_BYTE_CHUNK,
96*61046927SAndroid Build Coastguard Worker VK_META_BUFFER_8_BYTE_CHUNK,
97*61046927SAndroid Build Coastguard Worker VK_META_BUFFER_16_BYTE_CHUNK,
98*61046927SAndroid Build Coastguard Worker VK_META_BUFFER_CHUNK_SIZE_COUNT,
99*61046927SAndroid Build Coastguard Worker };
100*61046927SAndroid Build Coastguard Worker
101*61046927SAndroid Build Coastguard Worker struct vk_meta_device {
102*61046927SAndroid Build Coastguard Worker struct hash_table *cache;
103*61046927SAndroid Build Coastguard Worker simple_mtx_t cache_mtx;
104*61046927SAndroid Build Coastguard Worker
105*61046927SAndroid Build Coastguard Worker uint32_t max_bind_map_buffer_size_B;
106*61046927SAndroid Build Coastguard Worker bool use_layered_rendering;
107*61046927SAndroid Build Coastguard Worker bool use_gs_for_layer;
108*61046927SAndroid Build Coastguard Worker bool use_stencil_export;
109*61046927SAndroid Build Coastguard Worker
110*61046927SAndroid Build Coastguard Worker struct {
111*61046927SAndroid Build Coastguard Worker /* Optimal workgroup size for each possible chunk size. This should be
112*61046927SAndroid Build Coastguard Worker * chosen to keep things cache-friendly (something big enough to maximize
113*61046927SAndroid Build Coastguard Worker * cache hits on executing threads, but small enough to not trash the
114*61046927SAndroid Build Coastguard Worker * cache) while keeping GPU utilization high enough to not make copies
115*61046927SAndroid Build Coastguard Worker * fast enough.
116*61046927SAndroid Build Coastguard Worker */
117*61046927SAndroid Build Coastguard Worker uint32_t optimal_wg_size[VK_META_BUFFER_CHUNK_SIZE_COUNT];
118*61046927SAndroid Build Coastguard Worker } buffer_access;
119*61046927SAndroid Build Coastguard Worker
120*61046927SAndroid Build Coastguard Worker VkResult (*cmd_bind_map_buffer)(struct vk_command_buffer *cmd,
121*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
122*61046927SAndroid Build Coastguard Worker VkBuffer buffer,
123*61046927SAndroid Build Coastguard Worker void **map_out);
124*61046927SAndroid Build Coastguard Worker
125*61046927SAndroid Build Coastguard Worker void (*cmd_draw_rects)(struct vk_command_buffer *cmd,
126*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
127*61046927SAndroid Build Coastguard Worker uint32_t rect_count,
128*61046927SAndroid Build Coastguard Worker const struct vk_meta_rect *rects);
129*61046927SAndroid Build Coastguard Worker
130*61046927SAndroid Build Coastguard Worker void (*cmd_draw_volume)(struct vk_command_buffer *cmd,
131*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
132*61046927SAndroid Build Coastguard Worker const struct vk_meta_rect *rect,
133*61046927SAndroid Build Coastguard Worker uint32_t layer_count);
134*61046927SAndroid Build Coastguard Worker };
135*61046927SAndroid Build Coastguard Worker
136*61046927SAndroid Build Coastguard Worker static inline uint32_t
vk_meta_buffer_access_wg_size(const struct vk_meta_device * meta,uint32_t chunk_size)137*61046927SAndroid Build Coastguard Worker vk_meta_buffer_access_wg_size(const struct vk_meta_device *meta,
138*61046927SAndroid Build Coastguard Worker uint32_t chunk_size)
139*61046927SAndroid Build Coastguard Worker {
140*61046927SAndroid Build Coastguard Worker assert(util_is_power_of_two_nonzero(chunk_size));
141*61046927SAndroid Build Coastguard Worker unsigned idx = ffs(chunk_size) - 1;
142*61046927SAndroid Build Coastguard Worker
143*61046927SAndroid Build Coastguard Worker assert(idx < ARRAY_SIZE(meta->buffer_access.optimal_wg_size));
144*61046927SAndroid Build Coastguard Worker assert(meta->buffer_access.optimal_wg_size[idx] != 0);
145*61046927SAndroid Build Coastguard Worker
146*61046927SAndroid Build Coastguard Worker return meta->buffer_access.optimal_wg_size[idx];
147*61046927SAndroid Build Coastguard Worker }
148*61046927SAndroid Build Coastguard Worker
149*61046927SAndroid Build Coastguard Worker VkResult vk_meta_device_init(struct vk_device *device,
150*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta);
151*61046927SAndroid Build Coastguard Worker void vk_meta_device_finish(struct vk_device *device,
152*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta);
153*61046927SAndroid Build Coastguard Worker
154*61046927SAndroid Build Coastguard Worker /** Keys should start with one of these to ensure uniqueness */
155*61046927SAndroid Build Coastguard Worker enum vk_meta_object_key_type {
156*61046927SAndroid Build Coastguard Worker VK_META_OBJECT_KEY_TYPE_INVALID = 0,
157*61046927SAndroid Build Coastguard Worker VK_META_OBJECT_KEY_CLEAR_PIPELINE,
158*61046927SAndroid Build Coastguard Worker VK_META_OBJECT_KEY_BLIT_PIPELINE,
159*61046927SAndroid Build Coastguard Worker VK_META_OBJECT_KEY_BLIT_SAMPLER,
160*61046927SAndroid Build Coastguard Worker VK_META_OBJECT_KEY_COPY_BUFFER_PIPELINE,
161*61046927SAndroid Build Coastguard Worker VK_META_OBJECT_KEY_COPY_IMAGE_TO_BUFFER_PIPELINE,
162*61046927SAndroid Build Coastguard Worker VK_META_OBJECT_KEY_COPY_BUFFER_TO_IMAGE_PIPELINE,
163*61046927SAndroid Build Coastguard Worker VK_META_OBJECT_KEY_COPY_IMAGE_PIPELINE,
164*61046927SAndroid Build Coastguard Worker VK_META_OBJECT_KEY_FILL_BUFFER_PIPELINE,
165*61046927SAndroid Build Coastguard Worker };
166*61046927SAndroid Build Coastguard Worker
167*61046927SAndroid Build Coastguard Worker uint64_t vk_meta_lookup_object(struct vk_meta_device *meta,
168*61046927SAndroid Build Coastguard Worker VkObjectType obj_type,
169*61046927SAndroid Build Coastguard Worker const void *key_data, size_t key_size);
170*61046927SAndroid Build Coastguard Worker
171*61046927SAndroid Build Coastguard Worker uint64_t vk_meta_cache_object(struct vk_device *device,
172*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
173*61046927SAndroid Build Coastguard Worker const void *key_data, size_t key_size,
174*61046927SAndroid Build Coastguard Worker VkObjectType obj_type,
175*61046927SAndroid Build Coastguard Worker uint64_t handle);
176*61046927SAndroid Build Coastguard Worker
177*61046927SAndroid Build Coastguard Worker static inline VkDescriptorSetLayout
vk_meta_lookup_descriptor_set_layout(struct vk_meta_device * meta,const void * key_data,size_t key_size)178*61046927SAndroid Build Coastguard Worker vk_meta_lookup_descriptor_set_layout(struct vk_meta_device *meta,
179*61046927SAndroid Build Coastguard Worker const void *key_data, size_t key_size)
180*61046927SAndroid Build Coastguard Worker {
181*61046927SAndroid Build Coastguard Worker return (VkDescriptorSetLayout)
182*61046927SAndroid Build Coastguard Worker vk_meta_lookup_object(meta, VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT,
183*61046927SAndroid Build Coastguard Worker key_data, key_size);
184*61046927SAndroid Build Coastguard Worker }
185*61046927SAndroid Build Coastguard Worker
186*61046927SAndroid Build Coastguard Worker static inline VkPipelineLayout
vk_meta_lookup_pipeline_layout(struct vk_meta_device * meta,const void * key_data,size_t key_size)187*61046927SAndroid Build Coastguard Worker vk_meta_lookup_pipeline_layout(struct vk_meta_device *meta,
188*61046927SAndroid Build Coastguard Worker const void *key_data, size_t key_size)
189*61046927SAndroid Build Coastguard Worker {
190*61046927SAndroid Build Coastguard Worker return (VkPipelineLayout)
191*61046927SAndroid Build Coastguard Worker vk_meta_lookup_object(meta, VK_OBJECT_TYPE_PIPELINE_LAYOUT,
192*61046927SAndroid Build Coastguard Worker key_data, key_size);
193*61046927SAndroid Build Coastguard Worker }
194*61046927SAndroid Build Coastguard Worker
195*61046927SAndroid Build Coastguard Worker static inline VkPipeline
vk_meta_lookup_pipeline(struct vk_meta_device * meta,const void * key_data,size_t key_size)196*61046927SAndroid Build Coastguard Worker vk_meta_lookup_pipeline(struct vk_meta_device *meta,
197*61046927SAndroid Build Coastguard Worker const void *key_data, size_t key_size)
198*61046927SAndroid Build Coastguard Worker {
199*61046927SAndroid Build Coastguard Worker return (VkPipeline)vk_meta_lookup_object(meta, VK_OBJECT_TYPE_PIPELINE,
200*61046927SAndroid Build Coastguard Worker key_data, key_size);
201*61046927SAndroid Build Coastguard Worker }
202*61046927SAndroid Build Coastguard Worker
203*61046927SAndroid Build Coastguard Worker static inline VkSampler
vk_meta_lookup_sampler(struct vk_meta_device * meta,const void * key_data,size_t key_size)204*61046927SAndroid Build Coastguard Worker vk_meta_lookup_sampler(struct vk_meta_device *meta,
205*61046927SAndroid Build Coastguard Worker const void *key_data, size_t key_size)
206*61046927SAndroid Build Coastguard Worker {
207*61046927SAndroid Build Coastguard Worker return (VkSampler)vk_meta_lookup_object(meta, VK_OBJECT_TYPE_SAMPLER,
208*61046927SAndroid Build Coastguard Worker key_data, key_size);
209*61046927SAndroid Build Coastguard Worker }
210*61046927SAndroid Build Coastguard Worker
211*61046927SAndroid Build Coastguard Worker struct vk_meta_rendering_info {
212*61046927SAndroid Build Coastguard Worker uint32_t view_mask;
213*61046927SAndroid Build Coastguard Worker uint32_t samples;
214*61046927SAndroid Build Coastguard Worker uint32_t color_attachment_count;
215*61046927SAndroid Build Coastguard Worker VkFormat color_attachment_formats[MESA_VK_MAX_COLOR_ATTACHMENTS];
216*61046927SAndroid Build Coastguard Worker VkColorComponentFlags color_attachment_write_masks[MESA_VK_MAX_COLOR_ATTACHMENTS];
217*61046927SAndroid Build Coastguard Worker VkFormat depth_attachment_format;
218*61046927SAndroid Build Coastguard Worker VkFormat stencil_attachment_format;
219*61046927SAndroid Build Coastguard Worker };
220*61046927SAndroid Build Coastguard Worker
221*61046927SAndroid Build Coastguard Worker VkResult
222*61046927SAndroid Build Coastguard Worker vk_meta_create_descriptor_set_layout(struct vk_device *device,
223*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
224*61046927SAndroid Build Coastguard Worker const VkDescriptorSetLayoutCreateInfo *info,
225*61046927SAndroid Build Coastguard Worker const void *key_data, size_t key_size,
226*61046927SAndroid Build Coastguard Worker VkDescriptorSetLayout *layout_out);
227*61046927SAndroid Build Coastguard Worker
228*61046927SAndroid Build Coastguard Worker VkResult
229*61046927SAndroid Build Coastguard Worker vk_meta_create_pipeline_layout(struct vk_device *device,
230*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
231*61046927SAndroid Build Coastguard Worker const VkPipelineLayoutCreateInfo *info,
232*61046927SAndroid Build Coastguard Worker const void *key_data, size_t key_size,
233*61046927SAndroid Build Coastguard Worker VkPipelineLayout *layout_out);
234*61046927SAndroid Build Coastguard Worker
235*61046927SAndroid Build Coastguard Worker VkResult
236*61046927SAndroid Build Coastguard Worker vk_meta_get_pipeline_layout(struct vk_device *device,
237*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
238*61046927SAndroid Build Coastguard Worker const VkDescriptorSetLayoutCreateInfo *desc_info,
239*61046927SAndroid Build Coastguard Worker const VkPushConstantRange *push_range,
240*61046927SAndroid Build Coastguard Worker const void *key_data, size_t key_size,
241*61046927SAndroid Build Coastguard Worker VkPipelineLayout *layout_out);
242*61046927SAndroid Build Coastguard Worker
243*61046927SAndroid Build Coastguard Worker VkResult
244*61046927SAndroid Build Coastguard Worker vk_meta_create_graphics_pipeline(struct vk_device *device,
245*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
246*61046927SAndroid Build Coastguard Worker const VkGraphicsPipelineCreateInfo *info,
247*61046927SAndroid Build Coastguard Worker const struct vk_meta_rendering_info *render,
248*61046927SAndroid Build Coastguard Worker const void *key_data, size_t key_size,
249*61046927SAndroid Build Coastguard Worker VkPipeline *pipeline_out);
250*61046927SAndroid Build Coastguard Worker
251*61046927SAndroid Build Coastguard Worker VkResult
252*61046927SAndroid Build Coastguard Worker vk_meta_create_compute_pipeline(struct vk_device *device,
253*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
254*61046927SAndroid Build Coastguard Worker const VkComputePipelineCreateInfo *info,
255*61046927SAndroid Build Coastguard Worker const void *key_data, size_t key_size,
256*61046927SAndroid Build Coastguard Worker VkPipeline *pipeline_out);
257*61046927SAndroid Build Coastguard Worker
258*61046927SAndroid Build Coastguard Worker VkResult
259*61046927SAndroid Build Coastguard Worker vk_meta_create_sampler(struct vk_device *device,
260*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
261*61046927SAndroid Build Coastguard Worker const VkSamplerCreateInfo *info,
262*61046927SAndroid Build Coastguard Worker const void *key_data, size_t key_size,
263*61046927SAndroid Build Coastguard Worker VkSampler *sampler_out);
264*61046927SAndroid Build Coastguard Worker
265*61046927SAndroid Build Coastguard Worker VkResult vk_meta_create_buffer(struct vk_command_buffer *cmd,
266*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
267*61046927SAndroid Build Coastguard Worker const VkBufferCreateInfo *info,
268*61046927SAndroid Build Coastguard Worker VkBuffer *buffer_out);
269*61046927SAndroid Build Coastguard Worker
270*61046927SAndroid Build Coastguard Worker VkResult vk_meta_create_buffer_view(struct vk_command_buffer *cmd,
271*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
272*61046927SAndroid Build Coastguard Worker const VkBufferViewCreateInfo *info,
273*61046927SAndroid Build Coastguard Worker VkBufferView *buffer_view_out);
274*61046927SAndroid Build Coastguard Worker
275*61046927SAndroid Build Coastguard Worker #define VK_IMAGE_VIEW_CREATE_DRIVER_INTERNAL_BIT_MESA 0x80000000
276*61046927SAndroid Build Coastguard Worker
277*61046927SAndroid Build Coastguard Worker VkResult vk_meta_create_image_view(struct vk_command_buffer *cmd,
278*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
279*61046927SAndroid Build Coastguard Worker const VkImageViewCreateInfo *info,
280*61046927SAndroid Build Coastguard Worker VkImageView *image_view_out);
281*61046927SAndroid Build Coastguard Worker
282*61046927SAndroid Build Coastguard Worker void vk_meta_draw_rects(struct vk_command_buffer *cmd,
283*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
284*61046927SAndroid Build Coastguard Worker uint32_t rect_count,
285*61046927SAndroid Build Coastguard Worker const struct vk_meta_rect *rects);
286*61046927SAndroid Build Coastguard Worker
287*61046927SAndroid Build Coastguard Worker void vk_meta_draw_volume(struct vk_command_buffer *cmd,
288*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
289*61046927SAndroid Build Coastguard Worker const struct vk_meta_rect *rect,
290*61046927SAndroid Build Coastguard Worker uint32_t layer_count);
291*61046927SAndroid Build Coastguard Worker
292*61046927SAndroid Build Coastguard Worker void vk_meta_clear_attachments(struct vk_command_buffer *cmd,
293*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
294*61046927SAndroid Build Coastguard Worker const struct vk_meta_rendering_info *render,
295*61046927SAndroid Build Coastguard Worker uint32_t attachment_count,
296*61046927SAndroid Build Coastguard Worker const VkClearAttachment *attachments,
297*61046927SAndroid Build Coastguard Worker uint32_t rect_count,
298*61046927SAndroid Build Coastguard Worker const VkClearRect *rects);
299*61046927SAndroid Build Coastguard Worker
300*61046927SAndroid Build Coastguard Worker void vk_meta_clear_rendering(struct vk_meta_device *meta,
301*61046927SAndroid Build Coastguard Worker struct vk_command_buffer *cmd,
302*61046927SAndroid Build Coastguard Worker const VkRenderingInfo *pRenderingInfo);
303*61046927SAndroid Build Coastguard Worker
304*61046927SAndroid Build Coastguard Worker void vk_meta_clear_color_image(struct vk_command_buffer *cmd,
305*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
306*61046927SAndroid Build Coastguard Worker struct vk_image *image,
307*61046927SAndroid Build Coastguard Worker VkImageLayout image_layout,
308*61046927SAndroid Build Coastguard Worker VkFormat format,
309*61046927SAndroid Build Coastguard Worker const VkClearColorValue *color,
310*61046927SAndroid Build Coastguard Worker uint32_t range_count,
311*61046927SAndroid Build Coastguard Worker const VkImageSubresourceRange *ranges);
312*61046927SAndroid Build Coastguard Worker
313*61046927SAndroid Build Coastguard Worker void vk_meta_clear_depth_stencil_image(struct vk_command_buffer *cmd,
314*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
315*61046927SAndroid Build Coastguard Worker struct vk_image *image,
316*61046927SAndroid Build Coastguard Worker VkImageLayout image_layout,
317*61046927SAndroid Build Coastguard Worker const VkClearDepthStencilValue *depth_stencil,
318*61046927SAndroid Build Coastguard Worker uint32_t range_count,
319*61046927SAndroid Build Coastguard Worker const VkImageSubresourceRange *ranges);
320*61046927SAndroid Build Coastguard Worker
321*61046927SAndroid Build Coastguard Worker void vk_meta_blit_image(struct vk_command_buffer *cmd,
322*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
323*61046927SAndroid Build Coastguard Worker struct vk_image *src_image,
324*61046927SAndroid Build Coastguard Worker VkFormat src_format,
325*61046927SAndroid Build Coastguard Worker VkImageLayout src_image_layout,
326*61046927SAndroid Build Coastguard Worker struct vk_image *dst_image,
327*61046927SAndroid Build Coastguard Worker VkFormat dst_format,
328*61046927SAndroid Build Coastguard Worker VkImageLayout dst_image_layout,
329*61046927SAndroid Build Coastguard Worker uint32_t region_count,
330*61046927SAndroid Build Coastguard Worker const VkImageBlit2 *regions,
331*61046927SAndroid Build Coastguard Worker VkFilter filter);
332*61046927SAndroid Build Coastguard Worker
333*61046927SAndroid Build Coastguard Worker void vk_meta_blit_image2(struct vk_command_buffer *cmd,
334*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
335*61046927SAndroid Build Coastguard Worker const VkBlitImageInfo2 *blit);
336*61046927SAndroid Build Coastguard Worker
337*61046927SAndroid Build Coastguard Worker void vk_meta_resolve_image(struct vk_command_buffer *cmd,
338*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
339*61046927SAndroid Build Coastguard Worker struct vk_image *src_image,
340*61046927SAndroid Build Coastguard Worker VkFormat src_format,
341*61046927SAndroid Build Coastguard Worker VkImageLayout src_image_layout,
342*61046927SAndroid Build Coastguard Worker struct vk_image *dst_image,
343*61046927SAndroid Build Coastguard Worker VkFormat dst_format,
344*61046927SAndroid Build Coastguard Worker VkImageLayout dst_image_layout,
345*61046927SAndroid Build Coastguard Worker uint32_t region_count,
346*61046927SAndroid Build Coastguard Worker const VkImageResolve2 *regions,
347*61046927SAndroid Build Coastguard Worker VkResolveModeFlagBits resolve_mode,
348*61046927SAndroid Build Coastguard Worker VkResolveModeFlagBits stencil_resolve_mode);
349*61046927SAndroid Build Coastguard Worker
350*61046927SAndroid Build Coastguard Worker void vk_meta_resolve_image2(struct vk_command_buffer *cmd,
351*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
352*61046927SAndroid Build Coastguard Worker const VkResolveImageInfo2 *resolve);
353*61046927SAndroid Build Coastguard Worker
354*61046927SAndroid Build Coastguard Worker void vk_meta_resolve_rendering(struct vk_command_buffer *cmd,
355*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
356*61046927SAndroid Build Coastguard Worker const VkRenderingInfo *pRenderingInfo);
357*61046927SAndroid Build Coastguard Worker
358*61046927SAndroid Build Coastguard Worker VkDeviceAddress vk_meta_buffer_address(struct vk_device *device,
359*61046927SAndroid Build Coastguard Worker VkBuffer buffer, uint64_t offset,
360*61046927SAndroid Build Coastguard Worker uint64_t range);
361*61046927SAndroid Build Coastguard Worker
362*61046927SAndroid Build Coastguard Worker void vk_meta_copy_buffer(struct vk_command_buffer *cmd,
363*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
364*61046927SAndroid Build Coastguard Worker const VkCopyBufferInfo2 *info);
365*61046927SAndroid Build Coastguard Worker
366*61046927SAndroid Build Coastguard Worker void vk_meta_copy_image_to_buffer(
367*61046927SAndroid Build Coastguard Worker struct vk_command_buffer *cmd, struct vk_meta_device *meta,
368*61046927SAndroid Build Coastguard Worker const VkCopyImageToBufferInfo2 *info,
369*61046927SAndroid Build Coastguard Worker const struct vk_meta_copy_image_properties *img_props);
370*61046927SAndroid Build Coastguard Worker
371*61046927SAndroid Build Coastguard Worker void vk_meta_copy_buffer_to_image(
372*61046927SAndroid Build Coastguard Worker struct vk_command_buffer *cmd, struct vk_meta_device *meta,
373*61046927SAndroid Build Coastguard Worker const VkCopyBufferToImageInfo2 *info,
374*61046927SAndroid Build Coastguard Worker const struct vk_meta_copy_image_properties *img_props,
375*61046927SAndroid Build Coastguard Worker VkPipelineBindPoint bind_point);
376*61046927SAndroid Build Coastguard Worker
377*61046927SAndroid Build Coastguard Worker void vk_meta_copy_image(struct vk_command_buffer *cmd,
378*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta,
379*61046927SAndroid Build Coastguard Worker const VkCopyImageInfo2 *info,
380*61046927SAndroid Build Coastguard Worker const struct vk_meta_copy_image_properties *src_props,
381*61046927SAndroid Build Coastguard Worker const struct vk_meta_copy_image_properties *dst_props,
382*61046927SAndroid Build Coastguard Worker VkPipelineBindPoint bind_point);
383*61046927SAndroid Build Coastguard Worker
384*61046927SAndroid Build Coastguard Worker void vk_meta_update_buffer(struct vk_command_buffer *cmd,
385*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta, VkBuffer buffer,
386*61046927SAndroid Build Coastguard Worker VkDeviceSize offset, VkDeviceSize size,
387*61046927SAndroid Build Coastguard Worker const void *data);
388*61046927SAndroid Build Coastguard Worker
389*61046927SAndroid Build Coastguard Worker void vk_meta_fill_buffer(struct vk_command_buffer *cmd,
390*61046927SAndroid Build Coastguard Worker struct vk_meta_device *meta, VkBuffer buffer,
391*61046927SAndroid Build Coastguard Worker VkDeviceSize offset, VkDeviceSize size, uint32_t data);
392*61046927SAndroid Build Coastguard Worker
393*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus
394*61046927SAndroid Build Coastguard Worker }
395*61046927SAndroid Build Coastguard Worker #endif
396*61046927SAndroid Build Coastguard Worker
397*61046927SAndroid Build Coastguard Worker #endif /* VK_META_H */
398