From 344c8852956ef7d1a8f2192c60e63f0c53281e5a Mon Sep 17 00:00:00 2001 From: dzhdan Date: Thu, 14 Nov 2024 11:24:05 +0800 Subject: [PATCH] NRD: "frameIndex" validation moved from NRD to Integration (since there is no "frame" idiom in NRD) --- Include/NRDSettings.h | 2 +- Integration/NRDIntegration.h | 1 + Integration/NRDIntegration.hpp | 6 ++++++ Source/InstanceImpl.cpp | 3 --- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Include/NRDSettings.h b/Include/NRDSettings.h index 32ebf879..ac88535f 100644 --- a/Include/NRDSettings.h +++ b/Include/NRDSettings.h @@ -167,7 +167,7 @@ namespace nrd uint32_t rectOrigin[2] = {}; // A consecutively growing number. Valid usage: - // - must be incremented by 1 each frame + // - must be incremented by 1 on each frame (not by 1 on each "SetCommonSettings" call) // - sequence can be restarted after passing "AccumulationMode != CONTINUE" // - must be in sync with "CheckerboardMode" (if not OFF) uint32_t frameIndex = 0; diff --git a/Integration/NRDIntegration.h b/Integration/NRDIntegration.h index ce9ec3c2..f3de68dd 100644 --- a/Integration/NRDIntegration.h +++ b/Integration/NRDIntegration.h @@ -148,6 +148,7 @@ class Integration uint32_t m_ConstantBufferOffset = 0; uint32_t m_DescriptorPoolIndex = 0; uint32_t m_FrameIndex = uint32_t(-1); // 0 needed after 1st "NewFrame" + uint32_t m_PrevFrameIndexFromSettings = 0; uint8_t m_BufferedFramesNum = 0; char m_Name[32] = {}; bool m_ReloadShaders = false; diff --git a/Integration/NRDIntegration.hpp b/Integration/NRDIntegration.hpp index 1f00b1d8..2ba35334 100644 --- a/Integration/NRDIntegration.hpp +++ b/Integration/NRDIntegration.hpp @@ -478,6 +478,7 @@ void Integration::NewFrame() } m_FrameIndex++; + m_PrevFrameIndexFromSettings++; } bool Integration::SetCommonSettings(const CommonSettings& commonSettings) @@ -487,6 +488,11 @@ bool Integration::SetCommonSettings(const CommonSettings& commonSettings) Result result = nrd::SetCommonSettings(*m_Instance, commonSettings); NRD_INTEGRATION_ASSERT(result == Result::SUCCESS, "SetCommonSettings(): failed!"); + if (m_FrameIndex == 0 || commonSettings.accumulationMode != AccumulationMode::CONTINUE) + m_PrevFrameIndexFromSettings = commonSettings.frameIndex; + else + NRD_INTEGRATION_ASSERT(m_PrevFrameIndexFromSettings == commonSettings.frameIndex, "'frameIndex' must be incremented by 1 on each frame"); + return result == Result::SUCCESS; } diff --git a/Source/InstanceImpl.cpp b/Source/InstanceImpl.cpp index 86d0aef0..0c22be83 100644 --- a/Source/InstanceImpl.cpp +++ b/Source/InstanceImpl.cpp @@ -302,9 +302,6 @@ nrd::Result nrd::InstanceImpl::SetCommonSettings(const CommonSettings& commonSet isValid &= commonSettings.disocclusionThresholdAlternate > 0.0f; assert("'disocclusionThresholdAlternate' must be > 0" && isValid); - isValid &= commonSettings.accumulationMode != AccumulationMode::CONTINUE || commonSettings.frameIndex == m_CommonSettings.frameIndex + 1 || m_IsFirstUse; - assert("'frameIndex' must be a consecutively growing number" && isValid); - isValid &= commonSettings.strandMaterialID != 0.0f || GetLibraryDesc().normalEncoding == NormalEncoding::R10_G10_B10_A2_UNORM; assert("'strandMaterialID' can't be 0 if material ID is not supported by encoding" && isValid);