diff --git a/app/src/main/cpp/skyline/gpu/interconnect/command_executor.cpp b/app/src/main/cpp/skyline/gpu/interconnect/command_executor.cpp index 90e694ef..c1f403e1 100644 --- a/app/src/main/cpp/skyline/gpu/interconnect/command_executor.cpp +++ b/app/src/main/cpp/skyline/gpu/interconnect/command_executor.cpp @@ -281,7 +281,7 @@ namespace skyline::gpu::interconnect { bool CommandExecutor::CreateRenderPassWithSubpass(vk::Rect2D renderArea, span sampledImages, span inputAttachments, span colorAttachments, TextureView *depthStencilAttachment, bool noSubpassCreation, vk::PipelineStageFlags srcStageMask, vk::PipelineStageFlags dstStageMask) { auto addSubpass{[&] { - renderPass->AddSubpass(inputAttachments, colorAttachments, depthStencilAttachment, gpu, srcStageMask, dstStageMask); + renderPass->AddSubpass(inputAttachments, colorAttachments, depthStencilAttachment, gpu); lastSubpassColorAttachments.clear(); lastSubpassInputAttachments.clear(); @@ -317,6 +317,8 @@ namespace skyline::gpu::interconnect { gotoNext = true; } + renderPass->UpdateDependency(srcStageMask, dstStageMask); + for (auto view : outputAttachmentViews) if (view) view->texture->UpdateRenderPassUsage(renderPassIndex, texture::RenderPassUsage::RenderTarget); diff --git a/app/src/main/cpp/skyline/gpu/interconnect/command_nodes.cpp b/app/src/main/cpp/skyline/gpu/interconnect/command_nodes.cpp index b193ae89..7ed11770 100644 --- a/app/src/main/cpp/skyline/gpu/interconnect/command_nodes.cpp +++ b/app/src/main/cpp/skyline/gpu/interconnect/command_nodes.cpp @@ -126,10 +126,7 @@ namespace skyline::gpu::interconnect::node { } } - void RenderPassNode::AddSubpass(span inputAttachments, span colorAttachments, TextureView *depthStencilAttachment, GPU &gpu, vk::PipelineStageFlags srcStageMask, vk::PipelineStageFlags dstStageMask) { - externalDependency.srcStageMask |= srcStageMask; - externalDependency.dstStageMask |= dstStageMask; - + void RenderPassNode::AddSubpass(span inputAttachments, span colorAttachments, TextureView *depthStencilAttachment, GPU &gpu) { attachmentReferences.reserve(attachmentReferences.size() + inputAttachments.size() + colorAttachments.size() + (depthStencilAttachment ? 1 : 0)); auto inputAttachmentsOffset{attachmentReferences.size() * sizeof(vk::AttachmentReference)}; @@ -175,6 +172,11 @@ namespace skyline::gpu::interconnect::node { }); } + void RenderPassNode::UpdateDependency(vk::PipelineStageFlags srcStageMask, vk::PipelineStageFlags dstStageMask) { + externalDependency.srcStageMask |= srcStageMask; + externalDependency.dstStageMask |= dstStageMask; + } + bool RenderPassNode::ClearColorAttachment(u32 colorAttachment, const vk::ClearColorValue &value, GPU& gpu) { auto attachmentReference{RebasePointer(attachmentReferences, subpassDescriptions.back().pColorAttachments) + colorAttachment}; auto attachmentIndex{attachmentReference->attachment};