From a7f83bf631da85dbd729957551b9081a09ed0400 Mon Sep 17 00:00:00 2001 From: Stephen Pridham Date: Sat, 19 Nov 2022 17:28:56 -0500 Subject: [PATCH] Update the render state whenever the constant buffer is written to --- neo/renderer/NVRHI/RenderBackend_NVRHI.cpp | 8 +++++++- neo/renderer/NVRHI/RenderProgs_NVRHI.cpp | 7 ++++++- neo/renderer/RenderProgs.h | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp b/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp index d1339dfe..de24c8b9 100644 --- a/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp +++ b/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp @@ -469,7 +469,13 @@ void idRenderBackend::DrawElementsWithCounters( const drawSurf_t* surf ) } #endif - renderProgManager.CommitConstantBuffer( commandList ); + if( renderProgManager.CommitConstantBuffer( commandList ) ) + { + // Reset the graphics state if the constant buffer is written to since + // the render pass is ended for vulkan. setGraphicsState will + // reinstate the render pass. + changeState = true; + } // // create new graphics state if necessary diff --git a/neo/renderer/NVRHI/RenderProgs_NVRHI.cpp b/neo/renderer/NVRHI/RenderProgs_NVRHI.cpp index 52f03cac..5f961b06 100644 --- a/neo/renderer/NVRHI/RenderProgs_NVRHI.cpp +++ b/neo/renderer/NVRHI/RenderProgs_NVRHI.cpp @@ -307,11 +307,16 @@ void idRenderProgManager::ZeroUniforms() } // Only updates the constant buffer if it was updated at all -void idRenderProgManager::CommitConstantBuffer( nvrhi::ICommandList* commandList ) +bool idRenderProgManager::CommitConstantBuffer( nvrhi::ICommandList* commandList ) { if( uniformsChanged ) { commandList->writeBuffer( constantBuffer[BindingLayoutType()], uniforms.Ptr(), uniforms.Allocated() ); + uniformsChanged = false; + + return true; } + + return false; } \ No newline at end of file diff --git a/neo/renderer/RenderProgs.h b/neo/renderer/RenderProgs.h index 347a90a3..67f768be 100644 --- a/neo/renderer/RenderProgs.h +++ b/neo/renderer/RenderProgs.h @@ -1017,7 +1017,7 @@ public: int UniformSize(); #if defined( USE_NVRHI ) - void CommitConstantBuffer( nvrhi::ICommandList* commandList ); + bool CommitConstantBuffer( nvrhi::ICommandList* commandList ); ID_INLINE nvrhi::IBuffer* ConstantBuffer() {