Graphics/FrameGraph: Add support for loading a previous output texture

This commit is contained in:
Jérôme Leclercq 2021-06-01 16:24:00 +02:00
parent eb6ca428a3
commit 43b73da3f4
1 changed files with 10 additions and 5 deletions

View File

@ -653,7 +653,7 @@ namespace Nz
textureLayout = TextureLayout::ColorInput;
};
auto RegisterColorOutput = [&](const FramePass::Output& output)
auto RegisterColorOutput = [&](const FramePass::Output& output, bool shouldLoad)
{
std::size_t textureId = Retrieve(m_pending.attachmentToTextures, output.attachmentId);
@ -675,11 +675,17 @@ namespace Nz
auto& attachment = renderPassAttachments.emplace_back();
attachment.format = m_pending.textures[textureId].format;
attachment.initialLayout = initialLayout;
attachment.loadOp = (output.clearColor) ? AttachmentLoadOp::Clear : AttachmentLoadOp::Discard;
attachment.storeOp = AttachmentStoreOp::Store;
attachment.stencilLoadOp = AttachmentLoadOp::Discard;
attachment.stencilStoreOp = AttachmentStoreOp::Discard;
if (output.clearColor)
attachment.loadOp = AttachmentLoadOp::Clear;
else if (shouldLoad)
attachment.loadOp = AttachmentLoadOp::Load;
else
attachment.loadOp = AttachmentLoadOp::Discard;
usedTextureAttachments.emplace(textureId, attachmentIndex);
return attachmentIndex;
};
@ -734,12 +740,11 @@ namespace Nz
for (const auto& input : subpassInputs)
RegisterColorInput(input, subpass);
bool hasColorWrite = false;
for (const auto& output : subpassOutputs)
{
hasColorWrite = true;
auto inputIt = std::find_if(subpassInputs.begin(), subpassInputs.end(), [&](const auto& input) { return input.attachmentId == output.attachmentId; });
std::size_t attachmentIndex = RegisterColorOutput(output);
std::size_t attachmentIndex = RegisterColorOutput(output, inputIt != subpassInputs.end());
colorAttachments.push_back({
attachmentIndex,