End dynamic rendering.
650{
652 if (!cmd) {
654 "Invalid command buffer ID: {}", cmd_id);
655 return;
656 }
657
658 cmd.endRendering();
659
663 "No swapchain image tracked for window '{}'",
664 window->get_create_info().title);
665 return;
666 }
667
668 vk::ImageMemoryBarrier post_barrier {};
669 post_barrier.oldLayout = vk::ImageLayout::eColorAttachmentOptimal;
670 post_barrier.newLayout = vk::ImageLayout::ePresentSrcKHR;
671 post_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
672 post_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
673 post_barrier.image = it->second.swapchain_image;
674 post_barrier.subresourceRange.aspectMask = vk::ImageAspectFlagBits::eColor;
675 post_barrier.subresourceRange.baseMipLevel = 0;
676 post_barrier.subresourceRange.levelCount = 1;
677 post_barrier.subresourceRange.baseArrayLayer = 0;
678 post_barrier.subresourceRange.layerCount = 1;
679 post_barrier.srcAccessMask = vk::AccessFlagBits::eColorAttachmentWrite;
680 post_barrier.dstAccessMask = vk::AccessFlagBits::eNone;
681
682 cmd.pipelineBarrier(
683 vk::PipelineStageFlagBits::eColorAttachmentOutput,
684 vk::PipelineStageFlagBits::eBottomOfPipe,
685 vk::DependencyFlags {},
686 0, nullptr,
687 0, nullptr,
688 1, &post_barrier);
689
690 it->second.swapchain_image = nullptr;
691
693 "Ended dynamic rendering for window '{}'",
694 window->get_create_info().title);
695}
#define MF_ERROR(comp, ctx,...)
#define MF_RT_ERROR(comp, ctx,...)
#define MF_TRACE(comp, ctx,...)
std::unordered_map< std::shared_ptr< Core::Window >, WindowRenderAssociation > m_window_associations
ShaderFoundry * m_shader_foundry
vk::CommandBuffer get_command_buffer(CommandBufferID cmd_id)
Get Vulkan command buffer handle from CommandBufferID.
@ Rendering
GPU rendering operations (graphics pipeline, frame rendering)
@ Portal
High-level user-facing API layer.