Blender V5.0
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
12
14TEST_P(VKRenderGraphTestScheduler, begin_rendering_copy_buffer_end_rendering)
15{
16 VkHandle<VkImage> image(1u);
17 VkHandle<VkImageView> image_view(2u);
18 VkHandle<VkBuffer> buffer_src(3u);
19 VkHandle<VkBuffer> buffer_dst(4u);
20
21 resources.add_image(image, false);
22 resources.add_buffer(buffer_src);
23 resources.add_buffer(buffer_dst);
24
25 {
26 VKResourceAccessInfo access_info = {};
27 access_info.images.append(
28 {image, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_ASPECT_COLOR_BIT, {}});
29 VKBeginRenderingNode::CreateInfo begin_rendering(access_info);
30 begin_rendering.node_data.color_attachments[0].sType =
31 VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
32 begin_rendering.node_data.color_attachments[0].imageLayout = color_attachment_layout();
33 begin_rendering.node_data.color_attachments[0].imageView = image_view;
34 begin_rendering.node_data.color_attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
35 begin_rendering.node_data.color_attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
36 begin_rendering.node_data.vk_rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
37 begin_rendering.node_data.vk_rendering_info.colorAttachmentCount = 1;
38 begin_rendering.node_data.vk_rendering_info.layerCount = 1;
39 begin_rendering.node_data.vk_rendering_info.pColorAttachments =
40 begin_rendering.node_data.color_attachments;
41
42 render_graph->add_node(begin_rendering);
43 }
44
45 {
46 VKCopyBufferNode::CreateInfo copy_buffer = {};
47 copy_buffer.src_buffer = buffer_src;
48 copy_buffer.dst_buffer = buffer_dst;
49 render_graph->add_node(copy_buffer);
50 }
51
52 {
53 VKEndRenderingNode::CreateInfo end_rendering = {};
54 render_graph->add_node(end_rendering);
55 }
56
57 {
59 synchronization.vk_image = image;
60 synchronization.vk_image_layout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
61 synchronization.vk_image_aspect = VK_IMAGE_ASPECT_COLOR_BIT;
62 render_graph->add_node(synchronization);
63 }
64
65 submit(render_graph, command_buffer);
66 EXPECT_EQ(6, log.size());
67
69 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
70 "dst_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT" +
71 endl() +
72 " - buffer_barrier(src_access_mask=, dst_access_mask=VK_ACCESS_TRANSFER_READ_BIT, "
73 "buffer=0x3, offset=0, size=18446744073709551615)" +
74 endl() + ")",
75 log[0]);
76 EXPECT_EQ("copy_buffer(src_buffer=0x3, dst_buffer=0x4" + endl() +
77 " - region(src_offset=0, dst_offset=0, size=0)" + endl() + ")",
78 log[1]);
80 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
81 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
82 endl() +
83 " - image_barrier(src_access_mask=, "
84 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
85 "old_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
86 "new_layout=" +
87 color_attachment_layout_str() + ", image=0x1, subresource_range=" + endl() +
88 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
89 "base_array_layer=0, layer_count=4294967295 )" +
90 endl() + ")",
91 log[2]);
92 EXPECT_EQ("begin_rendering(p_rendering_info=flags=, render_area=" + endl() +
93 " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
94 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
95 "p_color_attachments=" +
96 endl() + " image_view=0x2, image_layout=" + color_attachment_layout_str() +
97 ", "
98 "resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
99 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
100 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
101 endl() + ")",
102 log[3]);
103 EXPECT_EQ("end_rendering()", log[4]);
104 EXPECT_EQ(
105 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, "
106 "dst_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT" +
107 endl() +
108 " - image_barrier(src_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
109 "dst_access_mask=, "
110 "old_layout=" +
111 color_attachment_layout_str() +
112 ", "
113 "new_layout=VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, image=0x1, subresource_range=" +
114 endl() +
115 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
116 "base_array_layer=0, layer_count=4294967295 )" +
117 endl() + ")",
118 log[5]);
119}
120
121TEST_P(VKRenderGraphTestScheduler, begin_clear_attachments_copy_buffer_end)
122{
123 VkHandle<VkImage> image(1u);
124 VkHandle<VkImageView> image_view(2u);
125 VkHandle<VkBuffer> buffer_src(3u);
126 VkHandle<VkBuffer> buffer_dst(4u);
127
128 resources.add_image(image, false);
129 resources.add_buffer(buffer_src);
130 resources.add_buffer(buffer_dst);
131
132 {
133 VKResourceAccessInfo access_info = {};
134 access_info.images.append(
135 {image, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_ASPECT_COLOR_BIT, {}});
136 VKBeginRenderingNode::CreateInfo begin_rendering(access_info);
137 begin_rendering.node_data.color_attachments[0].sType =
138 VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
139 begin_rendering.node_data.color_attachments[0].imageLayout = color_attachment_layout();
140 begin_rendering.node_data.color_attachments[0].imageView = image_view;
141 begin_rendering.node_data.color_attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
142 begin_rendering.node_data.color_attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
143 begin_rendering.node_data.vk_rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
144 begin_rendering.node_data.vk_rendering_info.colorAttachmentCount = 1;
145 begin_rendering.node_data.vk_rendering_info.layerCount = 1;
146 begin_rendering.node_data.vk_rendering_info.pColorAttachments =
147 begin_rendering.node_data.color_attachments;
148
149 render_graph->add_node(begin_rendering);
150 }
151
152 {
153 VKClearAttachmentsNode::CreateInfo clear_attachments = {};
154 clear_attachments.attachment_count = 1;
155 clear_attachments.attachments[0].aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
156 clear_attachments.attachments[0].clearValue.color.float32[0] = 0.2;
157 clear_attachments.attachments[0].clearValue.color.float32[1] = 0.4;
158 clear_attachments.attachments[0].clearValue.color.float32[2] = 0.6;
159 clear_attachments.attachments[0].clearValue.color.float32[3] = 1.0;
160 clear_attachments.attachments[0].colorAttachment = 0;
161 clear_attachments.vk_clear_rect.baseArrayLayer = 0;
162 clear_attachments.vk_clear_rect.layerCount = 1;
163 clear_attachments.vk_clear_rect.rect.extent.width = 1920;
164 clear_attachments.vk_clear_rect.rect.extent.height = 1080;
165 render_graph->add_node(clear_attachments);
166 }
167
168 {
169 VKCopyBufferNode::CreateInfo copy_buffer = {};
170 copy_buffer.src_buffer = buffer_src;
171 copy_buffer.dst_buffer = buffer_dst;
172 render_graph->add_node(copy_buffer);
173 }
174
175 {
176 VKEndRenderingNode::CreateInfo end_rendering = {};
177 render_graph->add_node(end_rendering);
178 }
179
180 {
182 synchronization.vk_image = image;
183 synchronization.vk_image_layout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
184 synchronization.vk_image_aspect = VK_IMAGE_ASPECT_COLOR_BIT;
185 render_graph->add_node(synchronization);
186 }
187
188 submit(render_graph, command_buffer);
189 EXPECT_EQ(7, log.size());
190 EXPECT_EQ(
191 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
192 "dst_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT" +
193 endl() +
194 " - buffer_barrier(src_access_mask=, dst_access_mask=VK_ACCESS_TRANSFER_READ_BIT, "
195 "buffer=0x3, offset=0, size=18446744073709551615)" +
196 endl() + ")",
197 log[0]);
198 EXPECT_EQ("copy_buffer(src_buffer=0x3, dst_buffer=0x4" + endl() +
199 " - region(src_offset=0, dst_offset=0, size=0)" + endl() + ")",
200 log[1]);
201 EXPECT_EQ(
202 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
203 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
204 endl() +
205 " - image_barrier(src_access_mask=, "
206 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
207 "old_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
208 "new_layout=" +
209 color_attachment_layout_str() + ", image=0x1, subresource_range=" + endl() +
210 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
211 "base_array_layer=0, layer_count=4294967295 )" +
212 endl() + ")",
213 log[2]);
214 EXPECT_EQ("begin_rendering(p_rendering_info=flags=, render_area=" + endl() +
215 " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
216 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
217 "p_color_attachments=" +
218 endl() + " image_view=0x2, image_layout=" + color_attachment_layout_str() +
219 ", "
220 "resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
221 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
222 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
223 endl() + ")",
224 log[3]);
225 EXPECT_EQ(
226 "clear_attachments( - attachment(aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, "
227 "color_attachment=0)" +
228 endl() + " - rect(rect=" + endl() + " offset=" + endl() +
229 " x=0, y=0 , extent=" + endl() +
230 " width=1920, height=1080 , base_array_layer=0, layer_count=1)" + endl() + ")",
231 log[4]);
232 EXPECT_EQ("end_rendering()", log[5]);
233 EXPECT_EQ(
234 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, "
235 "dst_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT" +
236 endl() +
237 " - image_barrier(src_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
238 "dst_access_mask=, "
239 "old_layout=" +
240 color_attachment_layout_str() +
241 ", "
242 "new_layout=VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, image=0x1, subresource_range=" +
243 endl() +
244 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
245 "base_array_layer=0, layer_count=4294967295 )" +
246 endl() + ")",
247 log[6]);
248}
249
250TEST_P(VKRenderGraphTestScheduler, begin_copy_buffer_clear_attachments_end)
251{
252 VkHandle<VkImage> image(1u);
253 VkHandle<VkImageView> image_view(2u);
254 VkHandle<VkBuffer> buffer_src(3u);
255 VkHandle<VkBuffer> buffer_dst(4u);
256
257 resources.add_image(image, false);
258 resources.add_buffer(buffer_src);
259 resources.add_buffer(buffer_dst);
260
261 {
262 VKResourceAccessInfo access_info = {};
263 access_info.images.append(
264 {image, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_ASPECT_COLOR_BIT, {}});
265 VKBeginRenderingNode::CreateInfo begin_rendering(access_info);
266 begin_rendering.node_data.color_attachments[0].sType =
267 VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
268 begin_rendering.node_data.color_attachments[0].imageLayout = color_attachment_layout();
269 begin_rendering.node_data.color_attachments[0].imageView = image_view;
270 begin_rendering.node_data.color_attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
271 begin_rendering.node_data.color_attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
272 begin_rendering.node_data.vk_rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
273 begin_rendering.node_data.vk_rendering_info.colorAttachmentCount = 1;
274 begin_rendering.node_data.vk_rendering_info.layerCount = 1;
275 begin_rendering.node_data.vk_rendering_info.pColorAttachments =
276 begin_rendering.node_data.color_attachments;
277
278 render_graph->add_node(begin_rendering);
279 }
280
281 {
282 VKCopyBufferNode::CreateInfo copy_buffer = {};
283 copy_buffer.src_buffer = buffer_src;
284 copy_buffer.dst_buffer = buffer_dst;
285 render_graph->add_node(copy_buffer);
286 }
287
288 {
289 VKClearAttachmentsNode::CreateInfo clear_attachments = {};
290 clear_attachments.attachment_count = 1;
291 clear_attachments.attachments[0].aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
292 clear_attachments.attachments[0].clearValue.color.float32[0] = 0.2;
293 clear_attachments.attachments[0].clearValue.color.float32[1] = 0.4;
294 clear_attachments.attachments[0].clearValue.color.float32[2] = 0.6;
295 clear_attachments.attachments[0].clearValue.color.float32[3] = 1.0;
296 clear_attachments.attachments[0].colorAttachment = 0;
297 clear_attachments.vk_clear_rect.baseArrayLayer = 0;
298 clear_attachments.vk_clear_rect.layerCount = 1;
299 clear_attachments.vk_clear_rect.rect.extent.width = 1920;
300 clear_attachments.vk_clear_rect.rect.extent.height = 1080;
301 render_graph->add_node(clear_attachments);
302 }
303
304 {
305 VKEndRenderingNode::CreateInfo end_rendering = {};
306 render_graph->add_node(end_rendering);
307 }
308
309 {
311 synchronization.vk_image = image;
312 synchronization.vk_image_layout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
313 synchronization.vk_image_aspect = VK_IMAGE_ASPECT_COLOR_BIT;
314 render_graph->add_node(synchronization);
315 }
316
317 submit(render_graph, command_buffer);
318 EXPECT_EQ(7, log.size());
319 EXPECT_EQ(
320 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
321 "dst_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT" +
322 endl() +
323 " - buffer_barrier(src_access_mask=, dst_access_mask=VK_ACCESS_TRANSFER_READ_BIT, "
324 "buffer=0x3, offset=0, size=18446744073709551615)" +
325 endl() + ")",
326 log[0]);
327 EXPECT_EQ("copy_buffer(src_buffer=0x3, dst_buffer=0x4" + endl() +
328 " - region(src_offset=0, dst_offset=0, size=0)" + endl() + ")",
329 log[1]);
330 EXPECT_EQ(
331 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
332 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
333 endl() +
334 " - image_barrier(src_access_mask=, "
335 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
336 "old_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
337 "new_layout=" +
338 color_attachment_layout_str() + ", image=0x1, subresource_range=" + endl() +
339 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
340 "base_array_layer=0, layer_count=4294967295 )" +
341 endl() + ")",
342 log[2]);
343 EXPECT_EQ("begin_rendering(p_rendering_info=flags=, render_area=" + endl() +
344 " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
345 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
346 "p_color_attachments=" +
347 endl() + " image_view=0x2, image_layout=" + color_attachment_layout_str() +
348 ", "
349 "resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
350 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
351 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
352 endl() + ")",
353 log[3]);
354 EXPECT_EQ(
355 "clear_attachments( - attachment(aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, "
356 "color_attachment=0)" +
357 endl() + " - rect(rect=" + endl() + " offset=" + endl() +
358 " x=0, y=0 , extent=" + endl() +
359 " width=1920, height=1080 , base_array_layer=0, layer_count=1)" + endl() + ")",
360 log[4]);
361 EXPECT_EQ("end_rendering()", log[5]);
362 EXPECT_EQ(
363 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, "
364 "dst_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT" +
365 endl() +
366 " - image_barrier(src_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
367 "dst_access_mask=, "
368 "old_layout=" +
369 color_attachment_layout_str() +
370 ", "
371 "new_layout=VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, image=0x1, subresource_range=" +
372 endl() +
373 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
374 "base_array_layer=0, layer_count=4294967295 )" +
375 endl() + ")",
376 log[6]);
377}
378
379TEST_P(VKRenderGraphTestScheduler, begin_clear_attachments_copy_buffer_clear_attachments_end)
380{
381 VkHandle<VkImage> image(1u);
382 VkHandle<VkImageView> image_view(2u);
383 VkHandle<VkBuffer> buffer_src(3u);
384 VkHandle<VkBuffer> buffer_dst(4u);
385
386 resources.add_image(image, false);
387 resources.add_buffer(buffer_src);
388 resources.add_buffer(buffer_dst);
389
390 {
391 VKResourceAccessInfo access_info = {};
392 access_info.images.append(
393 {image, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_ASPECT_COLOR_BIT, {}});
394 VKBeginRenderingNode::CreateInfo begin_rendering(access_info);
395 begin_rendering.node_data.color_attachments[0].sType =
396 VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
397 begin_rendering.node_data.color_attachments[0].imageLayout = color_attachment_layout();
398 begin_rendering.node_data.color_attachments[0].imageView = image_view;
399 begin_rendering.node_data.color_attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
400 begin_rendering.node_data.color_attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
401 begin_rendering.node_data.vk_rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
402 begin_rendering.node_data.vk_rendering_info.colorAttachmentCount = 1;
403 begin_rendering.node_data.vk_rendering_info.layerCount = 1;
404 begin_rendering.node_data.vk_rendering_info.pColorAttachments =
405 begin_rendering.node_data.color_attachments;
406
407 render_graph->add_node(begin_rendering);
408 }
409
410 {
411 VKClearAttachmentsNode::CreateInfo clear_attachments = {};
412 clear_attachments.attachment_count = 1;
413 clear_attachments.attachments[0].aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
414 clear_attachments.attachments[0].clearValue.color.float32[0] = 0.2;
415 clear_attachments.attachments[0].clearValue.color.float32[1] = 0.4;
416 clear_attachments.attachments[0].clearValue.color.float32[2] = 0.6;
417 clear_attachments.attachments[0].clearValue.color.float32[3] = 1.0;
418 clear_attachments.attachments[0].colorAttachment = 0;
419 clear_attachments.vk_clear_rect.baseArrayLayer = 0;
420 clear_attachments.vk_clear_rect.layerCount = 1;
421 clear_attachments.vk_clear_rect.rect.extent.width = 1920;
422 clear_attachments.vk_clear_rect.rect.extent.height = 1080;
423 render_graph->add_node(clear_attachments);
424 }
425
426 {
427 VKCopyBufferNode::CreateInfo copy_buffer = {};
428 copy_buffer.src_buffer = buffer_src;
429 copy_buffer.dst_buffer = buffer_dst;
430 render_graph->add_node(copy_buffer);
431 }
432
433 {
434 VKClearAttachmentsNode::CreateInfo clear_attachments = {};
435 clear_attachments.attachment_count = 1;
436 clear_attachments.attachments[0].aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
437 clear_attachments.attachments[0].clearValue.color.float32[0] = 0.2;
438 clear_attachments.attachments[0].clearValue.color.float32[1] = 0.4;
439 clear_attachments.attachments[0].clearValue.color.float32[2] = 0.6;
440 clear_attachments.attachments[0].clearValue.color.float32[3] = 1.0;
441 clear_attachments.attachments[0].colorAttachment = 0;
442 clear_attachments.vk_clear_rect.baseArrayLayer = 0;
443 clear_attachments.vk_clear_rect.layerCount = 1;
444 clear_attachments.vk_clear_rect.rect.extent.width = 1920;
445 clear_attachments.vk_clear_rect.rect.extent.height = 1080;
446 render_graph->add_node(clear_attachments);
447 }
448
449 {
450 VKEndRenderingNode::CreateInfo end_rendering = {};
451 render_graph->add_node(end_rendering);
452 }
453
454 {
456 synchronization.vk_image = image;
457 synchronization.vk_image_layout = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR;
458 synchronization.vk_image_aspect = VK_IMAGE_ASPECT_COLOR_BIT;
459 render_graph->add_node(synchronization);
460 }
461
462 submit(render_graph, command_buffer);
463 ASSERT_EQ(8, log.size());
464
465 EXPECT_EQ(
466 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
467 "dst_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT" +
468 endl() +
469 " - buffer_barrier(src_access_mask=, dst_access_mask=VK_ACCESS_TRANSFER_READ_BIT, "
470 "buffer=0x3, offset=0, size=18446744073709551615)" +
471 endl() + ")",
472 log[0]);
473 EXPECT_EQ("copy_buffer(src_buffer=0x3, dst_buffer=0x4" + endl() +
474 " - region(src_offset=0, dst_offset=0, size=0)" + endl() + ")",
475 log[1]);
476 EXPECT_EQ(
477 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
478 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
479 endl() +
480 " - image_barrier(src_access_mask=, "
481 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
482 "old_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
483 "new_layout=" +
484 color_attachment_layout_str() + ", image=0x1, subresource_range=" + endl() +
485 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
486 "base_array_layer=0, layer_count=4294967295 )" +
487 endl() + ")",
488 log[2]);
489 EXPECT_EQ("begin_rendering(p_rendering_info=flags=, render_area=" + endl() +
490 " 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() + " image_view=0x2, image_layout=" + color_attachment_layout_str() +
494 ", "
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[3]);
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[4]);
507 EXPECT_EQ(
508 "clear_attachments( - attachment(aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, "
509 "color_attachment=0)" +
510 endl() + " - rect(rect=" + endl() + " offset=" + endl() +
511 " x=0, y=0 , extent=" + endl() +
512 " width=1920, height=1080 , base_array_layer=0, layer_count=1)" + endl() + ")",
513 log[5]);
514 EXPECT_EQ("end_rendering()", log[6]);
515 EXPECT_EQ(
516 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, "
517 "dst_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT" +
518 endl() +
519 " - image_barrier(src_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
520 "dst_access_mask=, old_layout=" +
521 color_attachment_layout_str() +
522 ", "
523 "new_layout=VK_IMAGE_LAYOUT_PRESENT_SRC_KHR, image=0x1, subresource_range=" +
524 endl() +
525 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
526 "base_array_layer=0, layer_count=4294967295 )" +
527 endl() + ")",
528 log[7]);
529}
530
537TEST_P(VKRenderGraphTestScheduler, begin_draw_copy_framebuffer_draw_end)
538{
539 VkHandle<VkImage> image_attachment(1u);
540 VkHandle<VkImage> image_feedback(2u);
541 VkHandle<VkImageView> image_view_attachment(3u);
542 VkHandle<VkPipelineLayout> pipeline_layout_combine(4u);
543 VkHandle<VkPipeline> pipeline_combine(5u);
544 VkHandle<VkPipelineLayout> pipeline_layout_background(6u);
545 VkHandle<VkPipeline> pipeline_background(7u);
546
547 resources.add_image(image_attachment, false);
548 resources.add_image(image_feedback, false);
549
550 {
551 VKResourceAccessInfo access_info = {};
552 access_info.images.append(
553 {image_attachment, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_ASPECT_COLOR_BIT, {}});
554 VKBeginRenderingNode::CreateInfo begin_rendering(access_info);
555 begin_rendering.node_data.color_attachments[0].sType =
556 VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
557 begin_rendering.node_data.color_attachments[0].imageLayout = color_attachment_layout();
558 begin_rendering.node_data.color_attachments[0].imageView = image_view_attachment;
559 begin_rendering.node_data.color_attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
560 begin_rendering.node_data.color_attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
561 begin_rendering.node_data.vk_rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
562 begin_rendering.node_data.vk_rendering_info.colorAttachmentCount = 1;
563 begin_rendering.node_data.vk_rendering_info.layerCount = 1;
564 begin_rendering.node_data.vk_rendering_info.pColorAttachments =
565 begin_rendering.node_data.color_attachments;
566
567 render_graph->add_node(begin_rendering);
568 }
569
570 {
571 VKResourceAccessInfo access_info = {};
572 VKDrawNode::CreateInfo draw(access_info);
573 draw.node_data.first_instance = 0;
574 draw.node_data.first_vertex = 0;
575 draw.node_data.instance_count = 1;
576 draw.node_data.vertex_count = 4;
577 draw.node_data.graphics.pipeline_data.push_constants_data = nullptr;
578 draw.node_data.graphics.pipeline_data.push_constants_size = 0;
579 draw.node_data.graphics.pipeline_data.vk_descriptor_set = VK_NULL_HANDLE;
580 draw.node_data.graphics.pipeline_data.vk_pipeline = pipeline_combine;
581 draw.node_data.graphics.pipeline_data.vk_pipeline_layout = pipeline_layout_combine;
582 draw.node_data.graphics.viewport.viewports.append(VkViewport{});
583 draw.node_data.graphics.viewport.scissors.append(VkRect2D{});
584 render_graph->add_node(draw);
585 }
586
587 {
588 VKCopyImageNode::CreateInfo copy_image = {};
589 copy_image.vk_image_aspect = VK_IMAGE_ASPECT_COLOR_BIT;
590 copy_image.node_data.src_image = image_attachment;
591 copy_image.node_data.dst_image = image_feedback;
592 copy_image.node_data.region.extent.width = 1920;
593 copy_image.node_data.region.extent.height = 1080;
594 copy_image.node_data.region.extent.depth = 1;
595 copy_image.node_data.region.srcSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
596 copy_image.node_data.region.srcSubresource.baseArrayLayer = 0;
597 copy_image.node_data.region.srcSubresource.layerCount = 1;
598 copy_image.node_data.region.srcSubresource.mipLevel = 0;
599 render_graph->add_node(copy_image);
600 }
601
602 {
603 VKResourceAccessInfo access_info = {};
604 VKDrawNode::CreateInfo draw(access_info);
605 draw.node_data.first_instance = 0;
606 draw.node_data.first_vertex = 0;
607 draw.node_data.instance_count = 1;
608 draw.node_data.vertex_count = 4;
609 draw.node_data.graphics.pipeline_data.push_constants_data = nullptr;
610 draw.node_data.graphics.pipeline_data.push_constants_size = 0;
611 draw.node_data.graphics.pipeline_data.vk_descriptor_set = VK_NULL_HANDLE;
612 draw.node_data.graphics.pipeline_data.vk_pipeline = pipeline_background;
613 draw.node_data.graphics.pipeline_data.vk_pipeline_layout = pipeline_layout_background;
614 draw.node_data.graphics.viewport.viewports.append(VkViewport{});
615 draw.node_data.graphics.viewport.scissors.append(VkRect2D{});
616 render_graph->add_node(draw);
617 }
618
619 {
620 VKEndRenderingNode::CreateInfo end_rendering = {};
621 render_graph->add_node(end_rendering);
622 }
623
624 submit(render_graph, command_buffer);
625 ASSERT_EQ(14, log.size());
626
627 EXPECT_EQ(
628 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
629 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
630 endl() +
631 " - image_barrier(src_access_mask=, "
632 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
633 "old_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
634 "new_layout=" +
635 color_attachment_layout_str() + ", image=0x1, subresource_range=" + endl() +
636 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
637 "base_array_layer=0, layer_count=4294967295 )" +
638 endl() + ")",
639 log[0]);
640 EXPECT_EQ("begin_rendering(p_rendering_info=flags=, render_area=" + endl() +
641 " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
642 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
643 "p_color_attachments=" +
644 endl() + " image_view=0x3, image_layout=" + color_attachment_layout_str() +
645 ", resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
646 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
647 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
648 endl() + ")",
649 log[1]);
650 EXPECT_EQ("set_viewport(num_viewports=1)", log[2]);
651 EXPECT_EQ("set_scissor(num_scissors=1)", log[3]);
652 EXPECT_EQ("bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline=0x5)",
653 log[4]);
654 EXPECT_EQ("draw(vertex_count=4, instance_count=1, first_vertex=0, first_instance=0)", log[5]);
655 EXPECT_EQ("end_rendering()", log[6]);
656 EXPECT_EQ(
657 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, "
658 "dst_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT" +
659 endl() +
660 " - image_barrier(src_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
661 "dst_access_mask=VK_ACCESS_TRANSFER_READ_BIT, "
662 "old_layout=" +
663 color_attachment_layout_str() +
664 ", "
665 "new_layout=VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, image=0x1, 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 " - image_barrier(src_access_mask=, dst_access_mask=VK_ACCESS_TRANSFER_WRITE_BIT, "
671 "old_layout=VK_IMAGE_LAYOUT_UNDEFINED, new_layout=VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, "
672 "image=0x2, subresource_range=" +
673 endl() +
674 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
675 "base_array_layer=0, layer_count=4294967295 )" +
676 endl() + ")",
677 log[7]);
678 EXPECT_EQ(
679 "copy_image(src_image=0x1, src_image_layout=VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, "
680 "dst_image=0x2, dst_image_layout=VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL" +
681 endl() + " - region(src_subresource=" + endl() +
682 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, mip_level=0, base_array_layer=0, "
683 "layer_count=1 , src_offset=" +
684 endl() + " x=0, y=0, z=0 , dst_subresource=" + endl() +
685 " aspect_mask=, mip_level=0, base_array_layer=0, layer_count=0 , dst_offset=" +
686 endl() + " x=0, y=0, z=0 , extent=" + endl() +
687 " width=1920, height=1080, depth=1 )" + endl() + ")",
688 log[8]);
689 EXPECT_EQ(
690 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT, "
691 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
692 endl() +
693 " - image_barrier(src_access_mask=VK_ACCESS_TRANSFER_READ_BIT, "
694 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
695 "old_layout=VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, "
696 "new_layout=" +
697 color_attachment_layout_str() + ", image=0x1, subresource_range=" + endl() +
698 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
699 "base_array_layer=0, layer_count=4294967295 )" +
700 endl() + ")",
701 log[9]);
702 EXPECT_EQ("begin_rendering(p_rendering_info=flags=, render_area=" + endl() +
703 " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
704 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
705 "p_color_attachments=" +
706 endl() + " image_view=0x3, image_layout=" + color_attachment_layout_str() +
707 ", resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
708 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
709 "load_op=VK_ATTACHMENT_LOAD_OP_LOAD, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
710 endl() + ")",
711 log[10]);
712 EXPECT_EQ("bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline=0x7)",
713 log[11]);
714 EXPECT_EQ("draw(vertex_count=4, instance_count=1, first_vertex=0, first_instance=0)", log[12]);
715 EXPECT_EQ("end_rendering()", log[13]);
716}
717
722TEST_P(VKRenderGraphTestScheduler, begin_update_draw_update_draw_update_draw_end)
723{
724 VkHandle<VkBuffer> buffer_a(1u);
725 VkHandle<VkBuffer> buffer_b(2u);
726 VkHandle<VkImage> image(3u);
727 VkHandle<VkImageView> image_view(4u);
728 VkHandle<VkPipelineLayout> pipeline_layout(5u);
729 VkHandle<VkPipeline> pipeline(6u);
730
731 resources.add_image(image, false);
732 resources.add_buffer(buffer_a);
733 resources.add_buffer(buffer_b);
734
735 {
736 VKResourceAccessInfo access_info = {};
737 access_info.images.append(
738 {image, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_ASPECT_COLOR_BIT, {}});
739 VKBeginRenderingNode::CreateInfo begin_rendering(access_info);
740 begin_rendering.node_data.color_attachments[0].sType =
741 VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
742 begin_rendering.node_data.color_attachments[0].imageLayout = color_attachment_layout();
743 begin_rendering.node_data.color_attachments[0].imageView = image_view;
744 begin_rendering.node_data.color_attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
745 begin_rendering.node_data.color_attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
746 begin_rendering.node_data.vk_rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
747 begin_rendering.node_data.vk_rendering_info.colorAttachmentCount = 1;
748 begin_rendering.node_data.vk_rendering_info.layerCount = 1;
749 begin_rendering.node_data.vk_rendering_info.pColorAttachments =
750 begin_rendering.node_data.color_attachments;
751
752 render_graph->add_node(begin_rendering);
753 }
754
755 {
756 VKUpdateBufferNode::CreateInfo update_buffer = {};
757 update_buffer.dst_buffer = buffer_a;
758 update_buffer.data_size = 16;
759 update_buffer.data = MEM_callocN(16, __func__);
760
761 render_graph->add_node(update_buffer);
762 }
763
764 {
765 VKResourceAccessInfo access_info = {};
766 access_info.buffers.append({buffer_a, VK_ACCESS_UNIFORM_READ_BIT});
767 VKDrawNode::CreateInfo draw(access_info);
768 draw.node_data.first_instance = 0;
769 draw.node_data.first_vertex = 0;
770 draw.node_data.instance_count = 1;
771 draw.node_data.vertex_count = 1;
772 draw.node_data.graphics.pipeline_data.push_constants_data = nullptr;
773 draw.node_data.graphics.pipeline_data.push_constants_size = 0;
774 draw.node_data.graphics.pipeline_data.vk_descriptor_set = VK_NULL_HANDLE;
775 draw.node_data.graphics.pipeline_data.vk_pipeline = pipeline;
776 draw.node_data.graphics.pipeline_data.vk_pipeline_layout = pipeline_layout;
777 draw.node_data.graphics.viewport.viewports.append(VkViewport{});
778 draw.node_data.graphics.viewport.scissors.append(VkRect2D{});
779 render_graph->add_node(draw);
780 }
781
782 {
783 VKUpdateBufferNode::CreateInfo update_buffer = {};
784 update_buffer.dst_buffer = buffer_b;
785 update_buffer.data_size = 24;
786 update_buffer.data = MEM_callocN(24, __func__);
787
788 render_graph->add_node(update_buffer);
789 }
790
791 {
792 VKResourceAccessInfo access_info = {};
793 access_info.buffers.append({buffer_b, VK_ACCESS_UNIFORM_READ_BIT});
794 VKDrawNode::CreateInfo draw(access_info);
795 draw.node_data.first_instance = 0;
796 draw.node_data.first_vertex = 0;
797 draw.node_data.instance_count = 1;
798 draw.node_data.vertex_count = 2;
799 draw.node_data.graphics.pipeline_data.push_constants_data = nullptr;
800 draw.node_data.graphics.pipeline_data.push_constants_size = 0;
801 draw.node_data.graphics.pipeline_data.vk_descriptor_set = VK_NULL_HANDLE;
802 draw.node_data.graphics.pipeline_data.vk_pipeline = pipeline;
803 draw.node_data.graphics.pipeline_data.vk_pipeline_layout = pipeline_layout;
804 draw.node_data.graphics.viewport.viewports.append(VkViewport{});
805 draw.node_data.graphics.viewport.scissors.append(VkRect2D{});
806 render_graph->add_node(draw);
807 }
808
809 {
810 VKUpdateBufferNode::CreateInfo update_buffer = {};
811 update_buffer.dst_buffer = buffer_a;
812 update_buffer.data_size = 16;
813 update_buffer.data = MEM_callocN(16, __func__);
814
815 render_graph->add_node(update_buffer);
816 }
817
818 {
819 VKResourceAccessInfo access_info = {};
820 access_info.buffers.append({buffer_a, VK_ACCESS_UNIFORM_READ_BIT});
821 VKDrawNode::CreateInfo draw(access_info);
822 draw.node_data.first_instance = 0;
823 draw.node_data.first_vertex = 0;
824 draw.node_data.instance_count = 1;
825 draw.node_data.vertex_count = 3;
826 draw.node_data.graphics.pipeline_data.push_constants_data = nullptr;
827 draw.node_data.graphics.pipeline_data.push_constants_size = 0;
828 draw.node_data.graphics.pipeline_data.vk_descriptor_set = VK_NULL_HANDLE;
829 draw.node_data.graphics.pipeline_data.vk_pipeline = pipeline;
830 draw.node_data.graphics.pipeline_data.vk_pipeline_layout = pipeline_layout;
831 draw.node_data.graphics.viewport.viewports.append(VkViewport{});
832 draw.node_data.graphics.viewport.scissors.append(VkRect2D{});
833 render_graph->add_node(draw);
834 }
835
836 {
837 VKEndRenderingNode::CreateInfo end_rendering = {};
838 render_graph->add_node(end_rendering);
839 }
840
841 submit(render_graph, command_buffer);
842 ASSERT_EQ(19, log.size());
843 EXPECT_EQ("update_buffer(dst_buffer=0x1, dst_offset=0, data_size=16)", log[0]);
844 EXPECT_EQ("update_buffer(dst_buffer=0x2, dst_offset=0, data_size=24)", log[1]);
845 EXPECT_EQ(
846 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
847 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
848 endl() +
849 " - image_barrier(src_access_mask=, "
850 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
851 "old_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
852 "new_layout=" +
853 color_attachment_layout_str() +
854 ", "
855 "image=0x3, subresource_range=" +
856 endl() +
857 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, "
858 "base_mip_level=0, level_count=4294967295, base_array_layer=0, layer_count=4294967295 "
859 ")" +
860 endl() + ")",
861 log[2]);
862 EXPECT_EQ(
863 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT, "
864 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
865 endl() +
866 " - "
867 "buffer_barrier(src_access_mask=VK_ACCESS_TRANSFER_WRITE_BIT, "
868 "dst_access_mask=VK_ACCESS_UNIFORM_READ_BIT, buffer=0x1, offset=0, "
869 "size=18446744073709551615)" +
870 endl() + ")",
871 log[3]);
872 EXPECT_EQ(
873 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT, "
874 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
875 endl() +
876 " - "
877 "buffer_barrier(src_access_mask=VK_ACCESS_TRANSFER_WRITE_BIT, "
878 "dst_access_mask=VK_ACCESS_UNIFORM_READ_BIT, buffer=0x2, offset=0, "
879 "size=18446744073709551615)" +
880 endl() + ")",
881 log[4]);
882 EXPECT_EQ("begin_rendering(p_rendering_info=flags=, render_area=" + endl() +
883 " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
884 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
885 "p_color_attachments=" +
886 endl() + " image_view=0x4, image_layout=" + color_attachment_layout_str() +
887 ", resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
888 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
889 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
890 endl() + ")",
891 log[5]);
892 EXPECT_EQ("set_viewport(num_viewports=1)", log[6]);
893 EXPECT_EQ("set_scissor(num_scissors=1)", log[7]);
894 EXPECT_EQ("bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline=0x6)",
895 log[8]);
896 EXPECT_EQ("draw(vertex_count=1, instance_count=1, first_vertex=0, first_instance=0)", log[9]);
897 EXPECT_EQ("draw(vertex_count=2, instance_count=1, first_vertex=0, first_instance=0)", log[10]);
898 EXPECT_EQ("end_rendering()", log[11]);
899 EXPECT_EQ(
900 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, "
901 "dst_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT" +
902 endl() +
903 " - buffer_barrier(src_access_mask=VK_ACCESS_UNIFORM_READ_BIT, "
904 "dst_access_mask=VK_ACCESS_TRANSFER_WRITE_BIT, buffer=0x1, offset=0, "
905 "size=18446744073709551615)" +
906 endl() + ")",
907 log[12]);
908 EXPECT_EQ("update_buffer(dst_buffer=0x1, dst_offset=0, data_size=16)", log[13]);
909 EXPECT_EQ(
910 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT, "
911 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
912 endl() +
913 " - buffer_barrier(src_access_mask=VK_ACCESS_TRANSFER_WRITE_BIT, "
914 "dst_access_mask=VK_ACCESS_UNIFORM_READ_BIT, buffer=0x1, offset=0, "
915 "size=18446744073709551615)" +
916 endl() + ")",
917 log[14]);
918 EXPECT_EQ(
919 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, "
920 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
921 endl() +
922 " - image_barrier(src_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
923 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
924 "old_layout=" +
925 color_attachment_layout_str() +
926 ", "
927 "new_layout=" +
928 color_attachment_layout_str() + ", image=0x3, subresource_range=" + endl() +
929 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
930 "base_array_layer=0, layer_count=4294967295 )" +
931 endl() + ")",
932 log[15]);
933 EXPECT_EQ("begin_rendering(p_rendering_info=flags=, render_area=" + endl() +
934 " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
935 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
936 "p_color_attachments=" +
937 endl() + " image_view=0x4, image_layout=" + color_attachment_layout_str() +
938 ", resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
939 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
940 "load_op=VK_ATTACHMENT_LOAD_OP_LOAD, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
941 endl() + ")",
942 log[16]);
943 EXPECT_EQ("draw(vertex_count=3, instance_count=1, first_vertex=0, first_instance=0)", log[17]);
944 EXPECT_EQ("end_rendering()", log[18]);
945}
946
953TEST_P(VKRenderGraphTestScheduler, begin_draw_copy_to_attachment_draw_end)
954{
955 VkHandle<VkImage> image_attachment(1u);
956 VkHandle<VkImage> image_editor(2u);
957 VkHandle<VkImageView> image_view_attachment(3u);
958 VkHandle<VkPipelineLayout> pipeline_layout(4u);
959 VkHandle<VkPipeline> pipeline(5u);
960
961 resources.add_image(image_attachment, false);
962 resources.add_image(image_editor, false);
963
964 {
965 VKResourceAccessInfo access_info = {};
966 access_info.images.append(
967 {image_attachment, VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_IMAGE_ASPECT_COLOR_BIT, {}});
968 VKBeginRenderingNode::CreateInfo begin_rendering(access_info);
969 begin_rendering.node_data.color_attachments[0].sType =
970 VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
971 begin_rendering.node_data.color_attachments[0].imageLayout = color_attachment_layout();
972 begin_rendering.node_data.color_attachments[0].imageView = image_view_attachment;
973 begin_rendering.node_data.color_attachments[0].loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
974 begin_rendering.node_data.color_attachments[0].storeOp = VK_ATTACHMENT_STORE_OP_STORE;
975 begin_rendering.node_data.vk_rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO;
976 begin_rendering.node_data.vk_rendering_info.colorAttachmentCount = 1;
977 begin_rendering.node_data.vk_rendering_info.layerCount = 1;
978 begin_rendering.node_data.vk_rendering_info.pColorAttachments =
979 begin_rendering.node_data.color_attachments;
980
981 render_graph->add_node(begin_rendering);
982 }
983
984 {
985 VKResourceAccessInfo access_info = {};
986 VKDrawNode::CreateInfo draw(access_info);
987 draw.node_data.first_instance = 0;
988 draw.node_data.first_vertex = 0;
989 draw.node_data.instance_count = 1;
990 draw.node_data.vertex_count = 4;
991 draw.node_data.graphics.pipeline_data.push_constants_data = nullptr;
992 draw.node_data.graphics.pipeline_data.push_constants_size = 0;
993 draw.node_data.graphics.pipeline_data.vk_descriptor_set = VK_NULL_HANDLE;
994 draw.node_data.graphics.pipeline_data.vk_pipeline = pipeline;
995 draw.node_data.graphics.pipeline_data.vk_pipeline_layout = pipeline_layout;
996 draw.node_data.graphics.viewport.viewports.append(VkViewport{});
997 draw.node_data.graphics.viewport.scissors.append(VkRect2D{});
998 render_graph->add_node(draw);
999 }
1000
1001 {
1002 VKCopyImageNode::CreateInfo copy_image = {};
1003 copy_image.vk_image_aspect = VK_IMAGE_ASPECT_COLOR_BIT;
1004 copy_image.node_data.src_image = image_editor;
1005 copy_image.node_data.dst_image = image_attachment;
1006 copy_image.node_data.region.extent.width = 1920;
1007 copy_image.node_data.region.extent.height = 1080;
1008 copy_image.node_data.region.extent.depth = 1;
1009 copy_image.node_data.region.srcSubresource.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
1010 copy_image.node_data.region.srcSubresource.baseArrayLayer = 0;
1011 copy_image.node_data.region.srcSubresource.layerCount = 1;
1012 copy_image.node_data.region.srcSubresource.mipLevel = 0;
1013 render_graph->add_node(copy_image);
1014 }
1015
1016 {
1017 VKResourceAccessInfo access_info = {};
1018 VKDrawNode::CreateInfo draw(access_info);
1019 draw.node_data.first_instance = 0;
1020 draw.node_data.first_vertex = 0;
1021 draw.node_data.instance_count = 1;
1022 draw.node_data.vertex_count = 4;
1023 draw.node_data.graphics.pipeline_data.push_constants_data = nullptr;
1024 draw.node_data.graphics.pipeline_data.push_constants_size = 0;
1025 draw.node_data.graphics.pipeline_data.vk_descriptor_set = VK_NULL_HANDLE;
1026 draw.node_data.graphics.pipeline_data.vk_pipeline = pipeline;
1027 draw.node_data.graphics.pipeline_data.vk_pipeline_layout = pipeline_layout;
1028 draw.node_data.graphics.viewport.viewports.append(VkViewport{});
1029 draw.node_data.graphics.viewport.scissors.append(VkRect2D{});
1030 render_graph->add_node(draw);
1031 }
1032
1033 {
1034 VKEndRenderingNode::CreateInfo end_rendering = {};
1035 render_graph->add_node(end_rendering);
1036 }
1037
1038 submit(render_graph, command_buffer);
1039 ASSERT_EQ(13, log.size());
1040 EXPECT_EQ(
1041 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, "
1042 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
1043 endl() +
1044 " - image_barrier(src_access_mask=, "
1045 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
1046 "old_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
1047 "new_layout=" +
1048 color_attachment_layout_str() + ", image=0x1, subresource_range=" + endl() +
1049 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
1050 "base_array_layer=0, layer_count=4294967295 )" +
1051 endl() + ")",
1052 log[0]);
1053 EXPECT_EQ("begin_rendering(p_rendering_info=flags=, render_area=" + endl() +
1054 " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
1055 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
1056 "p_color_attachments=" +
1057 endl() + " image_view=0x3, image_layout=" + color_attachment_layout_str() +
1058 ", resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
1059 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
1060 "load_op=VK_ATTACHMENT_LOAD_OP_DONT_CARE, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
1061 endl() + ")",
1062 log[1]);
1063 EXPECT_EQ("set_viewport(num_viewports=1)", log[2]);
1064 EXPECT_EQ("set_scissor(num_scissors=1)", log[3]);
1065 EXPECT_EQ("bind_pipeline(pipeline_bind_point=VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline=0x5)",
1066 log[4]);
1067 EXPECT_EQ("draw(vertex_count=4, instance_count=1, first_vertex=0, first_instance=0)", log[5]);
1068 EXPECT_EQ("end_rendering()", log[6]);
1069 EXPECT_EQ(
1070 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, "
1071 "dst_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT" +
1072 endl() +
1073 " - image_barrier(src_access_mask=, dst_access_mask=VK_ACCESS_TRANSFER_READ_BIT, "
1074 "old_layout=VK_IMAGE_LAYOUT_UNDEFINED, new_layout=VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, "
1075 "image=0x2, subresource_range=" +
1076 endl() +
1077 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
1078 "base_array_layer=0, layer_count=4294967295 )" +
1079 endl() +
1080 " - image_barrier(src_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
1081 "dst_access_mask=VK_ACCESS_TRANSFER_WRITE_BIT, "
1082 "old_layout=" +
1083 color_attachment_layout_str() +
1084 ", "
1085 "new_layout=VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, image=0x1, subresource_range=" +
1086 endl() +
1087 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
1088 "base_array_layer=0, layer_count=4294967295 )" +
1089 endl() + ")",
1090 log[7]);
1091 EXPECT_EQ(
1092 "copy_image(src_image=0x2, src_image_layout=VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, "
1093 "dst_image=0x1, dst_image_layout=VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL" +
1094 endl() + " - region(src_subresource=" + endl() +
1095 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, mip_level=0, base_array_layer=0, "
1096 "layer_count=1 , src_offset=" +
1097 endl() + " x=0, y=0, z=0 , dst_subresource=" + endl() +
1098 " aspect_mask=, mip_level=0, base_array_layer=0, layer_count=0 , dst_offset=" +
1099 endl() + " x=0, y=0, z=0 , extent=" + endl() +
1100 " width=1920, height=1080, depth=1 )" + endl() + ")",
1101 log[8]);
1102 EXPECT_EQ(
1103 "pipeline_barrier(src_stage_mask=VK_PIPELINE_STAGE_TRANSFER_BIT, "
1104 "dst_stage_mask=VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT" +
1105 endl() +
1106 " - image_barrier(src_access_mask=VK_ACCESS_TRANSFER_WRITE_BIT, "
1107 "dst_access_mask=VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, "
1108 "old_layout=VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, "
1109 "new_layout=" +
1110 color_attachment_layout_str() + ", image=0x1, subresource_range=" + endl() +
1111 " aspect_mask=VK_IMAGE_ASPECT_COLOR_BIT, base_mip_level=0, level_count=4294967295, "
1112 "base_array_layer=0, layer_count=4294967295 )" +
1113 endl() + ")",
1114 log[9]);
1115 EXPECT_EQ("begin_rendering(p_rendering_info=flags=, render_area=" + endl() +
1116 " offset=" + endl() + " x=0, y=0 , extent=" + endl() +
1117 " width=0, height=0 , layer_count=1, view_mask=0, color_attachment_count=1, "
1118 "p_color_attachments=" +
1119 endl() + " image_view=0x3, image_layout=" + color_attachment_layout_str() +
1120 ", resolve_mode=VK_RESOLVE_MODE_NONE, resolve_image_view=0, "
1121 "resolve_image_layout=VK_IMAGE_LAYOUT_UNDEFINED, "
1122 "load_op=VK_ATTACHMENT_LOAD_OP_LOAD, store_op=VK_ATTACHMENT_STORE_OP_STORE" +
1123 endl() + ")",
1124 log[10]);
1125 EXPECT_EQ("draw(vertex_count=4, instance_count=1, first_vertex=0, first_instance=0)", log[11]);
1126 EXPECT_EQ("end_rendering()", log[12]);
1127}
1128
1129INSTANTIATE_TEST_SUITE_P(, VKRenderGraphTestScheduler, ::testing::Values(true, false));
1130
1131} // namespace blender::gpu::render_graph
EXPECT_EQ(BLI_expr_pylike_eval(expr, nullptr, 0, &result), EXPR_PYLIKE_INVALID)
#define log
void * MEM_callocN(size_t len, const char *str)
Definition mallocn.cc:118
INSTANTIATE_TEST_SUITE_P(, VKRenderGraphTestRender, ::testing::Values(true, false))
TEST_P(VKRenderGraphTestRender, begin_clear_attachments_end_read_back)
static void submit(std::unique_ptr< VKRenderGraph > &render_graph, std::unique_ptr< CommandBufferLog > &command_buffer)