Perf: Only write constant buffer if it has changed

This commit is contained in:
Robert Beckebans 2022-03-23 21:13:06 +01:00
parent 62429d8f46
commit ff29a5dbd4
4 changed files with 12 additions and 8 deletions

View file

@ -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 )

View file

@ -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;
}
}

View file

@ -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(),

View file

@ -1034,6 +1034,7 @@ private:
idList<renderProg_t, TAG_RENDER> renderProgs;
idList<shader_t, TAG_RENDER> shaders;
idStaticList< idVec4, RENDERPARM_TOTAL > uniforms;
bool uniformsChanged;
nvrhi::IDevice* device;
using VertexAttribDescList = idList< nvrhi::VertexAttributeDesc >;