Blender V4.3
vk_render_graph_test_scheduler.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2024 Blender Authors
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#include "testing/testing.h"
6
8
10
12TEST(vk_render_graph, begin_rendering_copy_buffer_end_rendering)
13{
15 VkHandle<VkImageView> image_view(2u);
16 VkHandle<VkBuffer> buffer_src(3u);
17 VkHandle<VkBuffer> buffer_dst(4u);
18
20 VKResourceStateTracker resources;
21 VKRenderGraph render_graph(std::make_unique<CommandBufferLog>(log), resources);
22 resources.add_image(image, 1, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, ResourceOwner::SWAP_CHAIN);
23 resources.add_buffer(buffer_src);
24 resources.add_buffer(buffer_dst);
25
26 {
27 VKResourceAccessInfo access_info = {};
28 access_info.images.append(
29 {image, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_ASPECT_COLOR_BIT, 0});
30 VKBeginRenderingNode::CreateInfo begin_rendering(access_info);
31 begin_rendering.node_data.color_attachments[0].sType =
32 VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
33 begin_rendering.node_data.color_attachments[0].imageLayout =
34 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
35 begin_rendering.node_data.color_attachments[0].imageView = image_view;
36 begin_rendering.node_data.color_attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
37 begin_rendering.node_data.color_attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
38 begin_rendering.node_data.vk_rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
39 begin_rendering.node_data.vk_rendering_info.colorAttachmentCount = 1;
40 begin_rendering.node_data.vk_rendering_info.layerCount = 1;
41 begin_rendering.node_data.vk_rendering_info.pColorAttachments =
42 begin_rendering.node_data.color_attachments;
43
44 render_graph.add_node(begin_rendering);
45 }
46
47 {
48 VKCopyBufferNode::CreateInfo copy_buffer = {};
49 copy_buffer.src_buffer = buffer_src;
50 copy_buffer.dst_buffer = buffer_dst;
51 render_graph.add_node(copy_buffer);
52 }
53
54 {
55 VKEndRenderingNode::CreateInfo end_rendering = {};
56 render_graph.add_node(end_rendering);
57 }
58
59 render_graph.submit_for_present(image);
60 EXPECT_EQ(6, log.size());
61
63 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
64 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
65 endl() +
66 " - image_barrier(src_access_mask=, "
67 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
68 "old_layout=VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, "
69 "new_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, image=0x1, subresource_range=" +
70 endl() +
71 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
72 "base_array_layer=0, layer_count=4294967295 )" +
73 endl() + ")",
74 log[0]);
75
76 EXPECT_EQ("begin_rendering(p_rendering_info=flags=, render_area=" + endl() +
77 " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
78 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
79 "p_color_attachments=" +
80 endl() +
81 " image_view=0x2, image_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
82 "resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
83 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
84 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
85 endl() + ")",
86 log[1]);
87 EXPECT_EQ("end_rendering()", log[2]);
89 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
90 "dst_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT" +
91 endl() +
92 " - buffer_barrier(src_access_mask=, dst_access_mask=VK_ACCESS_TRANSFER_READ_BIT, "
93 "buffer=0x3, offset=0, size=18446744073709551615)" +
94 endl() + ")",
95 log[3]);
96 EXPECT_EQ("copy_buffer(src_buffer=0x3, dst_buffer=0x4" + endl() +
97 " - region(src_offset=0, dst_offset=0, size=0)" + endl() + ")",
98 log[4]);
100 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, "
101 "dst_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT" +
102 endl() +
103 " - image_barrier(src_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
104 "dst_access_mask=, "
105 "old_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
106 "new_layout=VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, image=0x1, subresource_range=" +
107 endl() +
108 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
109 "base_array_layer=0, layer_count=4294967295 )" +
110 endl() + ")",
111 log[5]);
112}
113
114TEST(vk_render_graph, begin_clear_attachments_copy_buffer_end)
115{
117 VkHandle<VkImageView> image_view(2u);
118 VkHandle<VkBuffer> buffer_src(3u);
119 VkHandle<VkBuffer> buffer_dst(4u);
120
122 VKResourceStateTracker resources;
123 VKRenderGraph render_graph(std::make_unique<CommandBufferLog>(log), resources);
124 resources.add_image(image, 1, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, ResourceOwner::SWAP_CHAIN);
125 resources.add_buffer(buffer_src);
126 resources.add_buffer(buffer_dst);
127
128 {
129 VKResourceAccessInfo access_info = {};
130 access_info.images.append(
131 {image, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_ASPECT_COLOR_BIT, 0});
132 VKBeginRenderingNode::CreateInfo begin_rendering(access_info);
133 begin_rendering.node_data.color_attachments[0].sType =
134 VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
135 begin_rendering.node_data.color_attachments[0].imageLayout =
136 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
137 begin_rendering.node_data.color_attachments[0].imageView = image_view;
138 begin_rendering.node_data.color_attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
139 begin_rendering.node_data.color_attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
140 begin_rendering.node_data.vk_rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
141 begin_rendering.node_data.vk_rendering_info.colorAttachmentCount = 1;
142 begin_rendering.node_data.vk_rendering_info.layerCount = 1;
143 begin_rendering.node_data.vk_rendering_info.pColorAttachments =
144 begin_rendering.node_data.color_attachments;
145
146 render_graph.add_node(begin_rendering);
147 }
148
149 {
150 VKClearAttachmentsNode::CreateInfo clear_attachments = {};
151 clear_attachments.attachment_count = 1;
152 clear_attachments.attachments[0].aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
153 clear_attachments.attachments[0].clearValue.color.float32[0] = 0.2;
154 clear_attachments.attachments[0].clearValue.color.float32[1] = 0.4;
155 clear_attachments.attachments[0].clearValue.color.float32[2] = 0.6;
156 clear_attachments.attachments[0].clearValue.color.float32[3] = 1.0;
157 clear_attachments.attachments[0].colorAttachment = 0;
158 clear_attachments.vk_clear_rect.baseArrayLayer = 0;
159 clear_attachments.vk_clear_rect.layerCount = 1;
160 clear_attachments.vk_clear_rect.rect.extent.width = 1920;
161 clear_attachments.vk_clear_rect.rect.extent.height = 1080;
162 render_graph.add_node(clear_attachments);
163 }
164
165 {
166 VKCopyBufferNode::CreateInfo copy_buffer = {};
167 copy_buffer.src_buffer = buffer_src;
168 copy_buffer.dst_buffer = buffer_dst;
169 render_graph.add_node(copy_buffer);
170 }
171
172 {
173 VKEndRenderingNode::CreateInfo end_rendering = {};
174 render_graph.add_node(end_rendering);
175 }
176
177 render_graph.submit_for_present(image);
178 EXPECT_EQ(7, log.size());
179 EXPECT_EQ(
180 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
181 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
182 endl() +
183 " - image_barrier(src_access_mask=, "
184 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
185 "old_layout=VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, "
186 "new_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, image=0x1, subresource_range=" +
187 endl() +
188 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
189 "base_array_layer=0, layer_count=4294967295 )" +
190 endl() + ")",
191 log[0]);
192 EXPECT_EQ("begin_rendering(p_rendering_info=flags=, render_area=" + endl() +
193 " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
194 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
195 "p_color_attachments=" +
196 endl() +
197 " image_view=0x2, image_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
198 "resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
199 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
200 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
201 endl() + ")",
202 log[1]);
203 EXPECT_EQ(
204 "clear_attachments( - attachment(aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, "
205 "color_attachment=0)" +
206 endl() + " - rect(rect=" + endl() + " offset=" + endl() +
207 " x=0, y=0 , extent=" + endl() +
208 " width=1920, height=1080 , base_array_layer=0, layer_count=1)" + endl() + ")",
209 log[2]);
210 EXPECT_EQ("end_rendering()", log[3]);
211 EXPECT_EQ(
212 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
213 "dst_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT" +
214 endl() +
215 " - buffer_barrier(src_access_mask=, dst_access_mask=VK_ACCESS_TRANSFER_READ_BIT, "
216 "buffer=0x3, offset=0, size=18446744073709551615)" +
217 endl() + ")",
218 log[4]);
219 EXPECT_EQ("copy_buffer(src_buffer=0x3, dst_buffer=0x4" + endl() +
220 " - region(src_offset=0, dst_offset=0, size=0)" + endl() + ")",
221 log[5]);
222 EXPECT_EQ(
223 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, "
224 "dst_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT" +
225 endl() +
226 " - image_barrier(src_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
227 "dst_access_mask=, "
228 "old_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
229 "new_layout=VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, image=0x1, subresource_range=" +
230 endl() +
231 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
232 "base_array_layer=0, layer_count=4294967295 )" +
233 endl() + ")",
234 log[6]);
235}
236
237TEST(vk_render_graph, begin_copy_buffer_clear_attachments_end)
238{
240 VkHandle<VkImageView> image_view(2u);
241 VkHandle<VkBuffer> buffer_src(3u);
242 VkHandle<VkBuffer> buffer_dst(4u);
243
245 VKResourceStateTracker resources;
246 VKRenderGraph render_graph(std::make_unique<CommandBufferLog>(log), resources);
247 resources.add_image(image, 1, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, ResourceOwner::SWAP_CHAIN);
248 resources.add_buffer(buffer_src);
249 resources.add_buffer(buffer_dst);
250
251 {
252 VKResourceAccessInfo access_info = {};
253 access_info.images.append(
254 {image, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_ASPECT_COLOR_BIT, 0});
255 VKBeginRenderingNode::CreateInfo begin_rendering(access_info);
256 begin_rendering.node_data.color_attachments[0].sType =
257 VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
258 begin_rendering.node_data.color_attachments[0].imageLayout =
259 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
260 begin_rendering.node_data.color_attachments[0].imageView = image_view;
261 begin_rendering.node_data.color_attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
262 begin_rendering.node_data.color_attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
263 begin_rendering.node_data.vk_rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
264 begin_rendering.node_data.vk_rendering_info.colorAttachmentCount = 1;
265 begin_rendering.node_data.vk_rendering_info.layerCount = 1;
266 begin_rendering.node_data.vk_rendering_info.pColorAttachments =
267 begin_rendering.node_data.color_attachments;
268
269 render_graph.add_node(begin_rendering);
270 }
271
272 {
273 VKCopyBufferNode::CreateInfo copy_buffer = {};
274 copy_buffer.src_buffer = buffer_src;
275 copy_buffer.dst_buffer = buffer_dst;
276 render_graph.add_node(copy_buffer);
277 }
278
279 {
280 VKClearAttachmentsNode::CreateInfo clear_attachments = {};
281 clear_attachments.attachment_count = 1;
282 clear_attachments.attachments[0].aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
283 clear_attachments.attachments[0].clearValue.color.float32[0] = 0.2;
284 clear_attachments.attachments[0].clearValue.color.float32[1] = 0.4;
285 clear_attachments.attachments[0].clearValue.color.float32[2] = 0.6;
286 clear_attachments.attachments[0].clearValue.color.float32[3] = 1.0;
287 clear_attachments.attachments[0].colorAttachment = 0;
288 clear_attachments.vk_clear_rect.baseArrayLayer = 0;
289 clear_attachments.vk_clear_rect.layerCount = 1;
290 clear_attachments.vk_clear_rect.rect.extent.width = 1920;
291 clear_attachments.vk_clear_rect.rect.extent.height = 1080;
292 render_graph.add_node(clear_attachments);
293 }
294
295 {
296 VKEndRenderingNode::CreateInfo end_rendering = {};
297 render_graph.add_node(end_rendering);
298 }
299
300 render_graph.submit_for_present(image);
301 EXPECT_EQ(7, log.size());
302 EXPECT_EQ(
303 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
304 "dst_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT" +
305 endl() +
306 " - buffer_barrier(src_access_mask=, dst_access_mask=VK_ACCESS_TRANSFER_READ_BIT, "
307 "buffer=0x3, offset=0, size=18446744073709551615)" +
308 endl() + ")",
309 log[0]);
310 EXPECT_EQ("copy_buffer(src_buffer=0x3, dst_buffer=0x4" + endl() +
311 " - region(src_offset=0, dst_offset=0, size=0)" + endl() + ")",
312 log[1]);
313 EXPECT_EQ(
314 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
315 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
316 endl() +
317 " - image_barrier(src_access_mask=, "
318 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
319 "old_layout=VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, "
320 "new_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, image=0x1, subresource_range=" +
321 endl() +
322 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
323 "base_array_layer=0, layer_count=4294967295 )" +
324 endl() + ")",
325 log[2]);
326 EXPECT_EQ("begin_rendering(p_rendering_info=flags=, render_area=" + endl() +
327 " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
328 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
329 "p_color_attachments=" +
330 endl() +
331 " image_view=0x2, image_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
332 "resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
333 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
334 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
335 endl() + ")",
336 log[3]);
337 EXPECT_EQ(
338 "clear_attachments( - attachment(aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, "
339 "color_attachment=0)" +
340 endl() + " - rect(rect=" + endl() + " offset=" + endl() +
341 " x=0, y=0 , extent=" + endl() +
342 " width=1920, height=1080 , base_array_layer=0, layer_count=1)" + endl() + ")",
343 log[4]);
344 EXPECT_EQ("end_rendering()", log[5]);
345 EXPECT_EQ(
346 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, "
347 "dst_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT" +
348 endl() +
349 " - image_barrier(src_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
350 "dst_access_mask=, "
351 "old_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
352 "new_layout=VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, image=0x1, subresource_range=" +
353 endl() +
354 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
355 "base_array_layer=0, layer_count=4294967295 )" +
356 endl() + ")",
357 log[6]);
358}
359
360TEST(vk_render_graph, begin_clear_attachments_copy_buffer_clear_attachments_end)
361{
363 VkHandle<VkImageView> image_view(2u);
364 VkHandle<VkBuffer> buffer_src(3u);
365 VkHandle<VkBuffer> buffer_dst(4u);
366
368 VKResourceStateTracker resources;
369 VKRenderGraph render_graph(std::make_unique<CommandBufferLog>(log), resources);
370 resources.add_image(image, 1, VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, ResourceOwner::SWAP_CHAIN);
371 resources.add_buffer(buffer_src);
372 resources.add_buffer(buffer_dst);
373
374 {
375 VKResourceAccessInfo access_info = {};
376 access_info.images.append(
377 {image, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_ASPECT_COLOR_BIT, 0});
378 VKBeginRenderingNode::CreateInfo begin_rendering(access_info);
379 begin_rendering.node_data.color_attachments[0].sType =
380 VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
381 begin_rendering.node_data.color_attachments[0].imageLayout =
382 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
383 begin_rendering.node_data.color_attachments[0].imageView = image_view;
384 begin_rendering.node_data.color_attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
385 begin_rendering.node_data.color_attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
386 begin_rendering.node_data.vk_rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
387 begin_rendering.node_data.vk_rendering_info.colorAttachmentCount = 1;
388 begin_rendering.node_data.vk_rendering_info.layerCount = 1;
389 begin_rendering.node_data.vk_rendering_info.pColorAttachments =
390 begin_rendering.node_data.color_attachments;
391
392 render_graph.add_node(begin_rendering);
393 }
394
395 {
396 VKClearAttachmentsNode::CreateInfo clear_attachments = {};
397 clear_attachments.attachment_count = 1;
398 clear_attachments.attachments[0].aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
399 clear_attachments.attachments[0].clearValue.color.float32[0] = 0.2;
400 clear_attachments.attachments[0].clearValue.color.float32[1] = 0.4;
401 clear_attachments.attachments[0].clearValue.color.float32[2] = 0.6;
402 clear_attachments.attachments[0].clearValue.color.float32[3] = 1.0;
403 clear_attachments.attachments[0].colorAttachment = 0;
404 clear_attachments.vk_clear_rect.baseArrayLayer = 0;
405 clear_attachments.vk_clear_rect.layerCount = 1;
406 clear_attachments.vk_clear_rect.rect.extent.width = 1920;
407 clear_attachments.vk_clear_rect.rect.extent.height = 1080;
408 render_graph.add_node(clear_attachments);
409 }
410
411 {
412 VKCopyBufferNode::CreateInfo copy_buffer = {};
413 copy_buffer.src_buffer = buffer_src;
414 copy_buffer.dst_buffer = buffer_dst;
415 render_graph.add_node(copy_buffer);
416 }
417
418 {
419 VKClearAttachmentsNode::CreateInfo clear_attachments = {};
420 clear_attachments.attachment_count = 1;
421 clear_attachments.attachments[0].aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
422 clear_attachments.attachments[0].clearValue.color.float32[0] = 0.2;
423 clear_attachments.attachments[0].clearValue.color.float32[1] = 0.4;
424 clear_attachments.attachments[0].clearValue.color.float32[2] = 0.6;
425 clear_attachments.attachments[0].clearValue.color.float32[3] = 1.0;
426 clear_attachments.attachments[0].colorAttachment = 0;
427 clear_attachments.vk_clear_rect.baseArrayLayer = 0;
428 clear_attachments.vk_clear_rect.layerCount = 1;
429 clear_attachments.vk_clear_rect.rect.extent.width = 1920;
430 clear_attachments.vk_clear_rect.rect.extent.height = 1080;
431 render_graph.add_node(clear_attachments);
432 }
433
434 {
435 VKEndRenderingNode::CreateInfo end_rendering = {};
436 render_graph.add_node(end_rendering);
437 }
438
439 render_graph.submit_for_present(image);
440 EXPECT_EQ(10, log.size());
441
442 EXPECT_EQ(
443 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
444 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
445 endl() +
446 " - image_barrier(src_access_mask=, "
447 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
448 "old_layout=VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, "
449 "new_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, image=0x1, subresource_range=" +
450 endl() +
451 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
452 "base_array_layer=0, layer_count=4294967295 )" +
453 endl() + ")",
454 log[0]);
455 EXPECT_EQ(
456 "begin_rendering(p_rendering_info=flags=VK_RENDERING_SUSPENDING_BIT, "
457 "VK_RENDERING_SUSPENDING_BIT_KHR, render_area=" +
458 endl() + " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
459 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
460 "p_color_attachments=" +
461 endl() +
462 " image_view=0x2, image_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
463 "resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
464 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
465 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
466 endl() + ")",
467 log[1]);
468 EXPECT_EQ(
469 "clear_attachments( - attachment(aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, "
470 "color_attachment=0)" +
471 endl() + " - rect(rect=" + endl() + " offset=" + endl() +
472 " x=0, y=0 , extent=" + endl() +
473 " width=1920, height=1080 , base_array_layer=0, layer_count=1)" + endl() + ")",
474 log[2]);
475 EXPECT_EQ("end_rendering()", log[3]);
476 EXPECT_EQ(
477 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
478 "dst_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT" +
479 endl() +
480 " - buffer_barrier(src_access_mask=, dst_access_mask=VK_ACCESS_TRANSFER_READ_BIT, "
481 "buffer=0x3, offset=0, size=18446744073709551615)" +
482 endl() + ")",
483 log[4]);
484 EXPECT_EQ("copy_buffer(src_buffer=0x3, dst_buffer=0x4" + endl() +
485 " - region(src_offset=0, dst_offset=0, size=0)" + endl() + ")",
486 log[5]);
487 EXPECT_EQ(
488 "begin_rendering(p_rendering_info=flags=VK_RENDERING_RESUMING_BIT, "
489 "VK_RENDERING_RESUMING_BIT_KHR, render_area=" +
490 endl() + " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
491 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
492 "p_color_attachments=" +
493 endl() +
494 " image_view=0x2, image_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
495 "resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
496 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
497 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
498 endl() + ")",
499 log[6]);
500 EXPECT_EQ(
501 "clear_attachments( - attachment(aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, "
502 "color_attachment=0)" +
503 endl() + " - rect(rect=" + endl() + " offset=" + endl() +
504 " x=0, y=0 , extent=" + endl() +
505 " width=1920, height=1080 , base_array_layer=0, layer_count=1)" + endl() + ")",
506 log[7]);
507 EXPECT_EQ("end_rendering()", log[8]);
508 EXPECT_EQ(
509 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, "
510 "dst_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT" +
511 endl() +
512 " - image_barrier(src_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
513 "dst_access_mask=, "
514 "old_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
515 "new_layout=VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, image=0x1, subresource_range=" +
516 endl() +
517 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
518 "base_array_layer=0, layer_count=4294967295 )" +
519 endl() + ")",
520 log[9]);
521}
522
529TEST(vk_render_graph, begin_draw_copy_framebuffer_draw_end)
530{
531 VkHandle<VkImage> image_attachment(1u);
532 VkHandle<VkImage> image_feedback(2u);
533 VkHandle<VkImageView> image_view_attachment(3u);
534 VkHandle<VkPipelineLayout> pipeline_layout_combine(4u);
535 VkHandle<VkPipeline> pipeline_combine(5u);
536 VkHandle<VkPipelineLayout> pipeline_layout_background(6u);
537 VkHandle<VkPipeline> pipeline_background(7u);
538
540 VKResourceStateTracker resources;
541 VKRenderGraph render_graph(std::make_unique<CommandBufferLog>(log), resources);
542 resources.add_image(
543 image_attachment, 1, VK_IMAGE_LAYOUT_UNDEFINED, render_graph::ResourceOwner::APPLICATION);
544 resources.add_image(
545 image_feedback, 1, VK_IMAGE_LAYOUT_UNDEFINED, render_graph::ResourceOwner::APPLICATION);
546
547 {
548 VKResourceAccessInfo access_info = {};
549 access_info.images.append(
550 {image_attachment, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_ASPECT_COLOR_BIT, 0});
551 VKBeginRenderingNode::CreateInfo begin_rendering(access_info);
552 begin_rendering.node_data.color_attachments[0].sType =
553 VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
554 begin_rendering.node_data.color_attachments[0].imageLayout =
555 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
556 begin_rendering.node_data.color_attachments[0].imageView = image_view_attachment;
557 begin_rendering.node_data.color_attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
558 begin_rendering.node_data.color_attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
559 begin_rendering.node_data.vk_rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
560 begin_rendering.node_data.vk_rendering_info.colorAttachmentCount = 1;
561 begin_rendering.node_data.vk_rendering_info.layerCount = 1;
562 begin_rendering.node_data.vk_rendering_info.pColorAttachments =
563 begin_rendering.node_data.color_attachments;
564
565 render_graph.add_node(begin_rendering);
566 }
567
568 {
569 VKResourceAccessInfo access_info = {};
570 VKDrawNode::CreateInfo draw(access_info);
571 draw.node_data.first_instance = 0;
572 draw.node_data.first_vertex = 0;
573 draw.node_data.instance_count = 1;
574 draw.node_data.vertex_count = 4;
577 draw.node_data.pipeline_data.vk_descriptor_set = VK_NULL_HANDLE;
578 draw.node_data.pipeline_data.vk_pipeline = pipeline_combine;
579 draw.node_data.pipeline_data.vk_pipeline_layout = pipeline_layout_combine;
580 render_graph.add_node(draw);
581 }
582
583 {
584 VKCopyImageNode::CreateInfo copy_image = {};
585 copy_image.vk_image_aspect = VK_IMAGE_ASPECT_COLOR_BIT;
586 copy_image.node_data.src_image = image_attachment;
587 copy_image.node_data.dst_image = image_feedback;
588 copy_image.node_data.region.extent.width = 1920;
589 copy_image.node_data.region.extent.height = 1080;
590 copy_image.node_data.region.extent.depth = 1;
591 copy_image.node_data.region.srcSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
592 copy_image.node_data.region.srcSubresource.baseArrayLayer = 0;
593 copy_image.node_data.region.srcSubresource.layerCount = 1;
594 copy_image.node_data.region.srcSubresource.mipLevel = 0;
595 render_graph.add_node(copy_image);
596 }
597
598 {
599 VKResourceAccessInfo access_info = {};
600 VKDrawNode::CreateInfo draw(access_info);
601 draw.node_data.first_instance = 0;
602 draw.node_data.first_vertex = 0;
603 draw.node_data.instance_count = 1;
604 draw.node_data.vertex_count = 4;
607 draw.node_data.pipeline_data.vk_descriptor_set = VK_NULL_HANDLE;
608 draw.node_data.pipeline_data.vk_pipeline = pipeline_background;
609 draw.node_data.pipeline_data.vk_pipeline_layout = pipeline_layout_background;
610 render_graph.add_node(draw);
611 }
612
613 {
614 VKEndRenderingNode::CreateInfo end_rendering = {};
615 render_graph.add_node(end_rendering);
616 }
617
618 render_graph.submit();
619 ASSERT_EQ(11, log.size());
620
621 EXPECT_EQ(
622 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
623 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
624 endl() +
625 " - image_barrier(src_access_mask=, "
626 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
627 "old_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
628 "new_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, image=0x1, subresource_range=" +
629 endl() +
630 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
631 "base_array_layer=0, layer_count=4294967295 )" +
632 endl() + ")",
633 log[0]);
634 EXPECT_EQ(
635 "begin_rendering(p_rendering_info=flags=VK_RENDERING_SUSPENDING_BIT, "
636 "VK_RENDERING_SUSPENDING_BIT_KHR, render_area=" +
637 endl() + " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
638 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
639 "p_color_attachments=" +
640 endl() +
641 " image_view=0x3, image_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
642 "resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
643 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
644 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
645 endl() + ")",
646 log[1]);
647 EXPECT_EQ("bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline=0x5)",
648 log[2]);
649 EXPECT_EQ("draw(vertex_count=4, instance_count=1, first_vertex=0, first_instance=0)", log[3]);
650 EXPECT_EQ("end_rendering()", log[4]);
651 EXPECT_EQ(
652 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, "
653 "dst_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT" +
654 endl() +
655 " - image_barrier(src_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
656 "dst_access_mask=VK_ACCESS_TRANSFER_READ_BIT, "
657 "old_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
658 "new_layout=VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, image=0x1, subresource_range=" +
659 endl() +
660 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
661 "base_array_layer=0, layer_count=4294967295 )" +
662 endl() +
663 " - image_barrier(src_access_mask=, dst_access_mask=VK_ACCESS_TRANSFER_WRITE_BIT, "
664 "old_layout=VK_IMAGE_LAYOUT_UNDEFINED, new_layout=VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, "
665 "image=0x2, subresource_range=" +
666 endl() +
667 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
668 "base_array_layer=0, layer_count=4294967295 )" +
669 endl() + ")",
670 log[5]);
671 EXPECT_EQ(
672 "copy_image(src_image=0x1, src_image_layout=VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, "
673 "dst_image=0x2, dst_image_layout=VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL" +
674 endl() + " - region(src_subresource=" + endl() +
675 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, mip_level=0, base_array_layer=0, "
676 "layer_count=1 , src_offset=" +
677 endl() + " x=0, y=0, z=0 , dst_subresource=" + endl() +
678 " aspect_mask=, mip_level=0, base_array_layer=0, layer_count=0 , dst_offset=" +
679 endl() + " x=0, y=0, z=0 , extent=" + endl() +
680 " width=1920, height=1080, depth=1 )" + endl() + ")",
681 log[6]);
682 EXPECT_EQ(
683 "begin_rendering(p_rendering_info=flags=VK_RENDERING_RESUMING_BIT, "
684 "VK_RENDERING_RESUMING_BIT_KHR, render_area=" +
685 endl() + " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
686 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
687 "p_color_attachments=" +
688 endl() +
689 " image_view=0x3, image_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
690 "resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
691 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
692 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
693 endl() + ")",
694 log[7]);
695 EXPECT_EQ("bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline=0x7)",
696 log[8]);
697 EXPECT_EQ("draw(vertex_count=4, instance_count=1, first_vertex=0, first_instance=0)", log[9]);
698 EXPECT_EQ("end_rendering()", log[10]);
699}
700
705TEST(vk_render_graph, begin_update_draw_update_draw_update_draw_end)
706{
707 VkHandle<VkBuffer> buffer_a(1u);
708 VkHandle<VkBuffer> buffer_b(2u);
710 VkHandle<VkImageView> image_view(4u);
711 VkHandle<VkPipelineLayout> pipeline_layout(5u);
712 VkHandle<VkPipeline> pipeline(6u);
713
715 VKResourceStateTracker resources;
716 VKRenderGraph render_graph(std::make_unique<CommandBufferLog>(log), resources);
717
718 resources.add_image(image, 1, VK_IMAGE_LAYOUT_UNDEFINED, ResourceOwner::APPLICATION);
719 resources.add_buffer(buffer_a);
720 resources.add_buffer(buffer_b);
721
722 {
723 VKResourceAccessInfo access_info = {};
724 access_info.images.append(
725 {image, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_ASPECT_COLOR_BIT, 0});
726 VKBeginRenderingNode::CreateInfo begin_rendering(access_info);
727 begin_rendering.node_data.color_attachments[0].sType =
728 VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
729 begin_rendering.node_data.color_attachments[0].imageLayout =
730 VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
731 begin_rendering.node_data.color_attachments[0].imageView = image_view;
732 begin_rendering.node_data.color_attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
733 begin_rendering.node_data.color_attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
734 begin_rendering.node_data.vk_rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
735 begin_rendering.node_data.vk_rendering_info.colorAttachmentCount = 1;
736 begin_rendering.node_data.vk_rendering_info.layerCount = 1;
737 begin_rendering.node_data.vk_rendering_info.pColorAttachments =
738 begin_rendering.node_data.color_attachments;
739
740 render_graph.add_node(begin_rendering);
741 }
742
743 {
744 VKUpdateBufferNode::CreateInfo update_buffer = {};
745 update_buffer.dst_buffer = buffer_a;
746 update_buffer.data_size = 16;
747 update_buffer.data = MEM_callocN(16, __func__);
748
749 render_graph.add_node(update_buffer);
750 }
751
752 {
753 VKResourceAccessInfo access_info = {};
754 access_info.buffers.append({buffer_a, VK_ACCESS_UNIFORM_READ_BIT});
755 VKDrawNode::CreateInfo draw(access_info);
756 draw.node_data.first_instance = 0;
757 draw.node_data.first_vertex = 0;
758 draw.node_data.instance_count = 1;
759 draw.node_data.vertex_count = 1;
762 draw.node_data.pipeline_data.vk_descriptor_set = VK_NULL_HANDLE;
763 draw.node_data.pipeline_data.vk_pipeline = pipeline;
764 draw.node_data.pipeline_data.vk_pipeline_layout = pipeline_layout;
765 render_graph.add_node(draw);
766 }
767
768 {
769 VKUpdateBufferNode::CreateInfo update_buffer = {};
770 update_buffer.dst_buffer = buffer_b;
771 update_buffer.data_size = 24;
772 update_buffer.data = MEM_callocN(24, __func__);
773
774 render_graph.add_node(update_buffer);
775 }
776
777 {
778 VKResourceAccessInfo access_info = {};
779 access_info.buffers.append({buffer_b, VK_ACCESS_UNIFORM_READ_BIT});
780 VKDrawNode::CreateInfo draw(access_info);
781 draw.node_data.first_instance = 0;
782 draw.node_data.first_vertex = 0;
783 draw.node_data.instance_count = 1;
784 draw.node_data.vertex_count = 2;
787 draw.node_data.pipeline_data.vk_descriptor_set = VK_NULL_HANDLE;
788 draw.node_data.pipeline_data.vk_pipeline = pipeline;
789 draw.node_data.pipeline_data.vk_pipeline_layout = pipeline_layout;
790 render_graph.add_node(draw);
791 }
792
793 {
794 VKUpdateBufferNode::CreateInfo update_buffer = {};
795 update_buffer.dst_buffer = buffer_a;
796 update_buffer.data_size = 16;
797 update_buffer.data = MEM_callocN(16, __func__);
798
799 render_graph.add_node(update_buffer);
800 }
801
802 {
803 VKResourceAccessInfo access_info = {};
804 access_info.buffers.append({buffer_a, VK_ACCESS_UNIFORM_READ_BIT});
805 VKDrawNode::CreateInfo draw(access_info);
806 draw.node_data.first_instance = 0;
807 draw.node_data.first_vertex = 0;
808 draw.node_data.instance_count = 1;
809 draw.node_data.vertex_count = 3;
812 draw.node_data.pipeline_data.vk_descriptor_set = VK_NULL_HANDLE;
813 draw.node_data.pipeline_data.vk_pipeline = pipeline;
814 draw.node_data.pipeline_data.vk_pipeline_layout = pipeline_layout;
815 render_graph.add_node(draw);
816 }
817
818 {
819 VKEndRenderingNode::CreateInfo end_rendering = {};
820 render_graph.add_node(end_rendering);
821 }
822
823 render_graph.submit();
824 ASSERT_EQ(16, log.size());
825 EXPECT_EQ("update_buffer(dst_buffer=0x1, dst_offset=0, data_size=16)", log[0]);
826 EXPECT_EQ("update_buffer(dst_buffer=0x2, dst_offset=0, data_size=24)", log[1]);
827 EXPECT_EQ(
828 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
829 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
830 endl() +
831 " - image_barrier(src_access_mask=, "
832 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
833 "old_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
834 "new_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
835 "image=0x3, subresource_range=" +
836 endl() +
837 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, "
838 "base_mip_level=0, level_count=4294967295, base_array_layer=0, layer_count=4294967295 "
839 ")" +
840 endl() + ")",
841 log[2]);
842 EXPECT_EQ(
843 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT, "
844 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
845 endl() +
846 " - "
847 "buffer_barrier(src_access_mask=VK_ACCESS_TRANSFER_WRITE_BIT, "
848 "dst_access_mask=VK_ACCESS_UNIFORM_READ_BIT, buffer=0x1, offset=0, "
849 "size=18446744073709551615)" +
850 endl() + ")",
851 log[3]);
852 EXPECT_EQ(
853 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT, "
854 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
855 endl() +
856 " - "
857 "buffer_barrier(src_access_mask=VK_ACCESS_TRANSFER_WRITE_BIT, "
858 "dst_access_mask=VK_ACCESS_UNIFORM_READ_BIT, buffer=0x2, offset=0, "
859 "size=18446744073709551615)" +
860 endl() + ")",
861 log[4]);
862 EXPECT_EQ(
863 "begin_rendering(p_rendering_info=flags=VK_RENDERING_SUSPENDING_BIT, "
864 "VK_RENDERING_SUSPENDING_BIT_KHR, render_area=" +
865 endl() + " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
866 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
867 "p_color_attachments=" +
868 endl() +
869 " image_view=0x4, image_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
870 "resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
871 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
872 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
873 endl() + ")",
874 log[5]);
875 EXPECT_EQ("bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline=0x6)",
876 log[6]);
877 EXPECT_EQ("draw(vertex_count=1, instance_count=1, first_vertex=0, first_instance=0)", log[7]);
878 EXPECT_EQ("draw(vertex_count=2, instance_count=1, first_vertex=0, first_instance=0)", log[8]);
879 EXPECT_EQ("end_rendering()", log[9]);
880 EXPECT_EQ(
881 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, "
882 "dst_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT" +
883 endl() +
884 " - buffer_barrier(src_access_mask=VK_ACCESS_UNIFORM_READ_BIT, "
885 "dst_access_mask=VK_ACCESS_TRANSFER_WRITE_BIT, buffer=0x1, offset=0, "
886 "size=18446744073709551615)" +
887 endl() + ")",
888 log[10]);
889 EXPECT_EQ("update_buffer(dst_buffer=0x1, dst_offset=0, data_size=16)", log[11]);
890 EXPECT_EQ(
891 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT, "
892 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
893 endl() +
894 " - buffer_barrier(src_access_mask=VK_ACCESS_TRANSFER_WRITE_BIT, "
895 "dst_access_mask=VK_ACCESS_UNIFORM_READ_BIT, buffer=0x1, offset=0, "
896 "size=18446744073709551615)" +
897 endl() + ")",
898 log[12]);
899 EXPECT_EQ(
900 "begin_rendering(p_rendering_info=flags=VK_RENDERING_RESUMING_BIT, "
901 "VK_RENDERING_RESUMING_BIT_KHR, render_area=" +
902 endl() + " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
903 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
904 "p_color_attachments=" +
905 endl() +
906 " image_view=0x4, image_layout=VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, "
907 "resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
908 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
909 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
910 endl() + ")",
911 log[13]);
912 EXPECT_EQ("draw(vertex_count=3, instance_count=1, first_vertex=0, first_instance=0)", log[14]);
913 EXPECT_EQ("end_rendering()", log[15]);
914}
915
916} // namespace blender::gpu::render_graph
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
void submit_for_present(VkImage vk_swapchain_image)
void add_image(VkImage vk_image, uint32_t layer_count, VkImageLayout vk_image_layout, ResourceOwner owner, const char *name=nullptr)
void add_buffer(VkBuffer vk_buffer, const char *name=nullptr)
input_tx image(0, GPU_RGBA16F, Qualifier::WRITE, ImageType::FLOAT_2D, "preview_img") .compute_source("compositor_compute_preview.glsl") .do_static_compilation(true)
void *(* MEM_callocN)(size_t len, const char *str)
Definition mallocn.cc:42
ccl_device_inline float3 log(float3 v)
TEST(vk_render_graph, dispatch_read_back)