Graphics/FrameGraph: Fix texture pool issue

This commit is contained in:
Jérôme Leclercq 2021-12-19 18:29:20 +01:00
parent 9bd411e53c
commit 5963f4c848
3 changed files with 7 additions and 6 deletions

View File

@ -46,7 +46,7 @@ namespace Nz
inline std::size_t AddInput(std::size_t attachmentId);
inline std::size_t AddOutput(std::size_t attachmentId);
template<typename F> void ForEachAttachment(F&& func) const;
template<typename F> void ForEachAttachment(F&& func, bool singleDSInputOutputCall = true) const;
inline const CommandCallback& GetCommandCallback() const;
inline const std::optional<DepthStencilClear>& GetDepthStencilClear() const;

View File

@ -39,7 +39,7 @@ namespace Nz
return outputIndex;
}
template<typename F>
void FramePass::ForEachAttachment(F&& func) const
void FramePass::ForEachAttachment(F&& func, bool singleDSInputOutputCall) const
{
for (const auto& input : m_inputs)
func(input.attachmentId);
@ -52,7 +52,10 @@ namespace Nz
func(m_depthStencilInput);
if (m_depthStencilOutput != FramePass::InvalidAttachmentId && m_depthStencilOutput != m_depthStencilInput)
func(m_depthStencilOutput);
{
if (!singleDSInputOutputCall || m_depthStencilOutput != m_depthStencilInput)
func(m_depthStencilOutput);
}
}
else if (m_depthStencilOutput != FramePass::InvalidAttachmentId)
func(m_depthStencilOutput);

View File

@ -245,9 +245,7 @@ namespace Nz
if (passIndex == lastUsingPassId)
{
std::size_t textureId = Retrieve(m_pending.attachmentToTextures, attachmentId);
// For input/output depth-stencil buffer, the same texture can be used
if (m_pending.texturePool.empty() || m_pending.texturePool.back() != textureId)
if (m_pending.texturePool.empty())
{
assert(std::find(m_pending.texturePool.begin(), m_pending.texturePool.end(), textureId) == m_pending.texturePool.end());
m_pending.texturePool.push_back(textureId);