From bd7c5f4ee2aa2a8f98d32c9a8df767ded2e7ca9f Mon Sep 17 00:00:00 2001 From: antonmic Date: Mon, 7 Jun 2021 08:39:08 -0700 Subject: [PATCH] Pass changes WIP: small improvements --- .../RPI/Code/Source/RPI.Public/Pass/Pass.cpp | 10 ++++----- .../Source/RPI.Public/Pass/PassSystem.cpp | 21 ++++++++++++++++--- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/Pass.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/Pass.cpp index 391db8361d..e53ffbf122 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/Pass.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/Pass.cpp @@ -1027,7 +1027,7 @@ namespace AZ void Pass::QueueForBuild() { -#if OLD_SCHOOL +#if 0//OLD_SCHOOL // Don't queue if we're in building phase //if (PassSystemInterface::Get()->GetState() != RPI::PassSystemState::Building) { @@ -1107,7 +1107,7 @@ namespace AZ execute = execute || (m_state == PassState::Queued && m_queueState == PassQueueState::QueuedForInitialization); #if OLD_SCHOOL - AZ_Assert(!execute == m_flags.m_alreadyReset, "ANTON - EARLY OUT FLAGS do not match for pass BUILD!!"); + AZ_Assert(!execute == m_flags.m_alreadyReset, "ANTON - EARLY OUT FLAGS do not match for pass RESET!!"); if (m_flags.m_alreadyReset) { return; @@ -1143,6 +1143,8 @@ namespace AZ { AZ_RPI_BREAK_ON_TARGET_PASS; + AZ_Assert(m_state == PassState::Reset, "ANTON - BUILDING PASS BUT STATE IS NOT RESET!!"); + bool execute = (m_state == PassState::Idle || m_state == PassState::Reset); execute = execute || (m_state == PassState::Queued && m_queueState == PassQueueState::QueuedForBuild); execute = execute || (m_state == PassState::Queued && m_queueState == PassQueueState::QueuedForInitialization); @@ -1161,10 +1163,7 @@ namespace AZ } #endif - //Reset(); - m_state = PassState::Building; - m_queueState = PassQueueState::NoQueue; // Bindings, inputs and attachments CreateBindingsFromTemplate(); @@ -1187,6 +1186,7 @@ namespace AZ UpdateAttachmentUsageIndices(); m_state = PassState::Built; + m_queueState = PassQueueState::NoQueue; // If this pass's Build() wasn't called from the Pass System, then it was called by it's parent pass // In which case we don't need to queue for initialization because the parent will already be queued diff --git a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassSystem.cpp b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassSystem.cpp index bbd9ac7df8..a7021ee6fd 100644 --- a/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassSystem.cpp +++ b/Gems/Atom/RPI/Code/Source/RPI.Public/Pass/PassSystem.cpp @@ -214,13 +214,23 @@ namespace AZ SortPassListAscending(buildListCopy); + Pass* previousPassInList = nullptr; for (const Ptr& pass : buildListCopy) { - pass->Reset(); + if (pass.get() != previousPassInList); + { + pass->Reset(); + previousPassInList = pass.get(); + } } + previousPassInList = nullptr; for (const Ptr& pass : buildListCopy) { - pass->Build(true); + if (pass.get() != previousPassInList); + { + pass->Build(true); + previousPassInList = pass.get(); + } } loopCounter++; } @@ -263,9 +273,14 @@ namespace AZ SortPassListAscending(initListCopy); + Pass* previousPassInList = nullptr; for (const Ptr& pass : initListCopy) { - pass->Initialize(); + if (pass.get() != previousPassInList); + { + pass->Initialize(); + previousPassInList = pass.get(); + } } loopCounter++; }