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() {