MCPcopy Create free account
hub / github.com/KhronosGroup/Vulkan-Samples / draw

Method draw

samples/performance/msaa/msaa.cpp:476–581  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

474}
475
476void MSAASample::draw(vkb::core::CommandBufferC &command_buffer, vkb::rendering::RenderTargetC &render_target)
477{
478 auto &views = render_target.get_views();
479
480 auto swapchain_layout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL;
481 {
482 vkb::ImageMemoryBarrier memory_barrier{};
483 memory_barrier.old_layout = VK_IMAGE_LAYOUT_UNDEFINED;
484 memory_barrier.new_layout = swapchain_layout;
485 memory_barrier.src_access_mask = 0;
486 memory_barrier.dst_access_mask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
487 memory_barrier.src_stage_mask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
488 memory_barrier.dst_stage_mask = VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
489
490 for (auto &i_color : color_atts)
491 {
492 assert(i_color < views.size());
493 command_buffer.image_memory_barrier(views[i_color], memory_barrier);
494 render_target.set_layout(i_color, VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
495 }
496 }
497
498 {
499 vkb::ImageMemoryBarrier memory_barrier{};
500 memory_barrier.old_layout = VK_IMAGE_LAYOUT_UNDEFINED;
501 memory_barrier.new_layout = VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL;
502 memory_barrier.src_access_mask = 0;
503 memory_barrier.dst_access_mask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT;
504 memory_barrier.src_stage_mask = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
505 memory_barrier.dst_stage_mask = VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT;
506
507 if (run_postprocessing)
508 {
509 // Synchronize depth with previous depth resolve operation
510 memory_barrier.dst_stage_mask |= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT;
511 memory_barrier.dst_access_mask |= VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT;
512 }
513
514 for (auto &i_depth : depth_atts)
515 {
516 assert(i_depth < views.size());
517 command_buffer.image_memory_barrier(views[i_depth], memory_barrier);
518 render_target.set_layout(i_depth, VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
519 }
520 }
521
522 auto &extent = render_target.get_extent();
523
524 VkViewport viewport{};
525 viewport.width = static_cast<float>(extent.width);
526 viewport.height = static_cast<float>(extent.height);
527 viewport.minDepth = 0.0f;
528 viewport.maxDepth = 1.0f;
529 command_buffer.set_viewport(0, {viewport});
530
531 VkRect2D scissor{};
532 scissor.extent = extent;
533 command_buffer.set_scissor(0, {scissor});

Callers 3

renderMethod · 0.45
draw_renderpassMethod · 0.45
postprocessingMethod · 0.45

Calls 6

sizeMethod · 0.80
image_memory_barrierMethod · 0.80
set_layoutMethod · 0.80
end_render_passMethod · 0.80
set_viewportMethod · 0.45
set_scissorMethod · 0.45

Tested by

no test coverage detected