diff --git a/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp b/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp index a28f0dfa..ad096f7d 100644 --- a/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp +++ b/neo/renderer/NVRHI/RenderBackend_NVRHI.cpp @@ -263,7 +263,6 @@ void idRenderBackend::DrawElementsWithCounters( const drawSurf_t* surf ) changeState = true; } - // TODO: Only update the constant buffer if it was updated at all. renderProgManager.CommitConstantBuffer( commandList ); if( changeState ) diff --git a/neo/renderer/NVRHI/RenderProgs_NVRHI.cpp b/neo/renderer/NVRHI/RenderProgs_NVRHI.cpp index a7042db1..c1df5b72 100644 --- a/neo/renderer/NVRHI/RenderProgs_NVRHI.cpp +++ b/neo/renderer/NVRHI/RenderProgs_NVRHI.cpp @@ -294,6 +294,8 @@ void idRenderProgManager::SetUniformValue( const renderParm_t rp, const float* v { uniforms[rp][i] = value[i]; } + + uniformsChanged = true; } /* @@ -304,16 +306,17 @@ idRenderProgManager::ZeroUniforms void idRenderProgManager::ZeroUniforms() { memset( uniforms.Ptr(), 0, uniforms.Allocated() ); + + uniformsChanged = true; } -/* -================================================================================================ -idRenderProgManager::CommitConstantBuffer -================================================================================================ -*/ +// Only updates the constant buffer if it was updated at all void idRenderProgManager::CommitConstantBuffer( nvrhi::ICommandList* commandList ) { - commandList->writeBuffer( constantBuffer, uniforms.Ptr(), uniforms.Allocated() ); + if( uniformsChanged ) + { + commandList->writeBuffer( constantBuffer, uniforms.Ptr(), uniforms.Allocated() ); - //commandList->setPushConstants( uniforms.Ptr(), uniforms.Allocated() ); + uniformsChanged = false; + } } \ No newline at end of file diff --git a/neo/renderer/RenderProgs.cpp b/neo/renderer/RenderProgs.cpp index 94741737..812ef314 100644 --- a/neo/renderer/RenderProgs.cpp +++ b/neo/renderer/RenderProgs.cpp @@ -98,6 +98,7 @@ void idRenderProgManager::Init( nvrhi::IDevice* _device ) device = _device; uniforms.SetNum( RENDERPARM_TOTAL, vec4_zero ); + uniformsChanged = false; constantBuffer = device->createBuffer( nvrhi::utils::CreateVolatileConstantBufferDesc( uniforms.Allocated(), diff --git a/neo/renderer/RenderProgs.h b/neo/renderer/RenderProgs.h index 4e83ce32..43f48b16 100644 --- a/neo/renderer/RenderProgs.h +++ b/neo/renderer/RenderProgs.h @@ -1034,6 +1034,7 @@ private: idList renderProgs; idList shaders; idStaticList< idVec4, RENDERPARM_TOTAL > uniforms; + bool uniformsChanged; nvrhi::IDevice* device; using VertexAttribDescList = idList< nvrhi::VertexAttributeDesc >;