mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-03-14 22:50:45 +00:00
Update to make it easier to switch constant buffer usage
This commit is contained in:
parent
47312f8997
commit
e3ede978d4
5 changed files with 124 additions and 101 deletions
|
@ -194,6 +194,9 @@ void idRenderBackend::Init()
|
|||
{
|
||||
r_useSSAO.SetBool( false );
|
||||
}
|
||||
|
||||
deviceManager->GetDevice()->waitForIdle();
|
||||
deviceManager->GetDevice()->runGarbageCollection();
|
||||
}
|
||||
|
||||
void idRenderBackend::Shutdown()
|
||||
|
@ -463,18 +466,24 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
desc.SetNum( nvrhi::c_MaxBindingLayouts );
|
||||
}
|
||||
|
||||
//idUniformBuffer& ubo = renderProgManager.BindingParamUbo();
|
||||
//nvrhi::IBuffer* paramCb = ubo.GetAPIObject();
|
||||
nvrhi::IBuffer* paramCb = renderProgManager.ConstantBuffer();
|
||||
auto range = nvrhi::EntireBuffer;
|
||||
|
||||
if( type == BINDING_LAYOUT_DEFAULT )
|
||||
{
|
||||
if( desc[0].bindings.empty() )
|
||||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
desc[0].bindings[0].resourceHandle = paramCb;
|
||||
desc[0].bindings[0].range = range;
|
||||
}
|
||||
|
||||
if( desc[1].bindings.empty() )
|
||||
|
@ -507,14 +516,15 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
nvrhi::BindingSetItem::StructuredBuffer_SRV( 11, currentJointBuffer, nvrhi::Format::UNKNOWN, nvrhi::BufferRange( currentJointOffset, sizeof( idVec4 ) * numBoneMatrices ) )
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
auto& bindings = desc[0].bindings;
|
||||
bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
bindings[0].resourceHandle = paramCb;
|
||||
bindings[0].range = range;
|
||||
bindings[1].resourceHandle = currentJointBuffer;
|
||||
bindings[1].range = nvrhi::BufferRange{ currentJointOffset, sizeof( idVec4 )* numBoneMatrices };
|
||||
}
|
||||
|
@ -549,12 +559,13 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
desc[0].bindings[0].resourceHandle = paramCb;
|
||||
desc[0].bindings[0].range = range;
|
||||
}
|
||||
}
|
||||
else if( type == BINDING_LAYOUT_CONSTANT_BUFFER_ONLY_SKINNED )
|
||||
|
@ -563,46 +574,32 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer(0, paramCb, range),
|
||||
nvrhi::BindingSetItem::StructuredBuffer_SRV( 11, currentJointBuffer, nvrhi::Format::UNKNOWN, nvrhi::BufferRange( currentJointOffset, sizeof( idVec4 ) * numBoneMatrices ) )
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
auto& bindings = desc[0].bindings;
|
||||
bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
bindings[0].resourceHandle = paramCb;
|
||||
bindings[0].range = range;
|
||||
bindings[1].resourceHandle = currentJointBuffer;
|
||||
bindings[1].range = nvrhi::BufferRange{ currentJointOffset, sizeof( idVec4 )* numBoneMatrices };
|
||||
}
|
||||
}
|
||||
/*
|
||||
else if( type == BINDING_LAYOUT_GBUFFER )
|
||||
{
|
||||
if( desc[0].bindings.empty() )
|
||||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
}
|
||||
}
|
||||
*/
|
||||
else if( type == BINDING_LAYOUT_AMBIENT_LIGHTING_IBL )
|
||||
{
|
||||
if( desc[0].bindings.empty() )
|
||||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
desc[0].bindings[0].resourceHandle = paramCb;
|
||||
desc[0].bindings[0].range = range;
|
||||
}
|
||||
|
||||
if( desc[1].bindings.empty() )
|
||||
|
@ -663,14 +660,15 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
nvrhi::BindingSetItem::StructuredBuffer_SRV( 11, currentJointBuffer, nvrhi::Format::UNKNOWN, nvrhi::BufferRange( currentJointOffset, sizeof( idVec4 ) * numBoneMatrices ) )
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
auto& bindings = desc[0].bindings;
|
||||
bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
bindings[0].resourceHandle = paramCb;
|
||||
bindings[0].range = range;
|
||||
bindings[1].resourceHandle = currentJointBuffer;
|
||||
bindings[1].range = nvrhi::BufferRange{ currentJointOffset, sizeof( idVec4 )* numBoneMatrices };
|
||||
}
|
||||
|
@ -733,7 +731,7 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
nvrhi::BindingSetItem::Texture_SRV( 0, ( nvrhi::ITexture* )GetImageAt( 0 )->GetTextureID() ),
|
||||
nvrhi::BindingSetItem::Texture_SRV( 1, ( nvrhi::ITexture* )GetImageAt( 1 )->GetTextureID() ),
|
||||
nvrhi::BindingSetItem::Texture_SRV( 2, ( nvrhi::ITexture* )GetImageAt( 2 )->GetTextureID() )
|
||||
|
@ -741,7 +739,8 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
desc[0].bindings[0].resourceHandle = paramCb;
|
||||
desc[0].bindings[0].range = range;
|
||||
desc[0].bindings[1].resourceHandle = ( nvrhi::ITexture* )GetImageAt( 0 )->GetTextureID();
|
||||
desc[0].bindings[2].resourceHandle = ( nvrhi::ITexture* )GetImageAt( 1 )->GetTextureID();
|
||||
desc[0].bindings[3].resourceHandle = ( nvrhi::ITexture* )GetImageAt( 2 )->GetTextureID();
|
||||
|
@ -766,12 +765,13 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
desc[0].bindings[0].resourceHandle = paramCb;
|
||||
desc[0].bindings[0].range = range;
|
||||
}
|
||||
|
||||
// materials: 1
|
||||
|
@ -828,14 +828,15 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
nvrhi::BindingSetItem::StructuredBuffer_SRV( 11, currentJointBuffer, nvrhi::Format::UNKNOWN, nvrhi::BufferRange( currentJointOffset, sizeof( idVec4 ) * numBoneMatrices ) )
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
auto& bindings = desc[0].bindings;
|
||||
bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
bindings[0].resourceHandle = paramCb;
|
||||
bindings[0].range = range;
|
||||
bindings[1].resourceHandle = currentJointBuffer;
|
||||
bindings[1].range = nvrhi::BufferRange{ currentJointOffset, sizeof( idVec4 )* numBoneMatrices };
|
||||
}
|
||||
|
@ -894,12 +895,13 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
desc[0].bindings[0].resourceHandle = paramCb;
|
||||
desc[0].bindings[0].range = range;
|
||||
}
|
||||
|
||||
// materials: 1
|
||||
|
@ -969,14 +971,15 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
nvrhi::BindingSetItem::StructuredBuffer_SRV( 11, currentJointBuffer, nvrhi::Format::UNKNOWN, nvrhi::BufferRange( currentJointOffset, sizeof( idVec4 ) * numBoneMatrices ) )
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
auto& bindings = desc[0].bindings;
|
||||
bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
bindings[0].resourceHandle = paramCb;
|
||||
bindings[0].range = range;
|
||||
bindings[1].resourceHandle = currentJointBuffer;
|
||||
bindings[1].range = nvrhi::BufferRange{ currentJointOffset, sizeof( idVec4 )* numBoneMatrices };
|
||||
}
|
||||
|
@ -1047,12 +1050,13 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
desc[0].bindings[0].resourceHandle = paramCb;
|
||||
desc[0].bindings[0].range = range;
|
||||
}
|
||||
|
||||
if( desc[1].bindings.empty() )
|
||||
|
@ -1091,14 +1095,15 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
nvrhi::BindingSetItem::StructuredBuffer_SRV( 11, currentJointBuffer, nvrhi::Format::UNKNOWN, nvrhi::BufferRange( currentJointOffset, sizeof( idVec4 ) * numBoneMatrices ) )
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
auto& bindings = desc[0].bindings;
|
||||
bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
bindings[0].resourceHandle = paramCb;
|
||||
bindings[0].range = range;
|
||||
bindings[1].resourceHandle = currentJointBuffer;
|
||||
bindings[1].range = nvrhi::BufferRange{ currentJointOffset, sizeof( idVec4 )* numBoneMatrices };
|
||||
}
|
||||
|
@ -1139,12 +1144,13 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
};
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
desc[0].bindings[0].resourceHandle = paramCb;
|
||||
desc[0].bindings[0].range = range;
|
||||
}
|
||||
|
||||
if( desc[1].bindings.empty() )
|
||||
|
@ -1180,14 +1186,15 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
nvrhi::BindingSetItem::StructuredBuffer_SRV( 11, currentJointBuffer, nvrhi::Format::UNKNOWN, nvrhi::BufferRange( currentJointOffset, sizeof( idVec4 ) * numBoneMatrices ) )
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
auto& bindings = desc[0].bindings;
|
||||
bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
bindings[0].resourceHandle = paramCb;
|
||||
bindings[0].range = range;
|
||||
bindings[1].resourceHandle = currentJointBuffer;
|
||||
bindings[1].range = nvrhi::BufferRange{ currentJointOffset, sizeof( idVec4 )* numBoneMatrices };
|
||||
}
|
||||
|
@ -1225,7 +1232,7 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
nvrhi::BindingSetItem::Texture_SRV( 0, ( nvrhi::ITexture* )GetImageAt( 0 )->GetTextureID() ),
|
||||
nvrhi::BindingSetItem::Texture_SRV( 1, ( nvrhi::ITexture* )GetImageAt( 1 )->GetTextureID() ),
|
||||
nvrhi::BindingSetItem::Texture_SRV( 2, ( nvrhi::ITexture* )GetImageAt( 2 )->GetTextureID() )
|
||||
|
@ -1233,7 +1240,8 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
desc[0].bindings[0].resourceHandle = paramCb;
|
||||
desc[0].bindings[0].range = range;
|
||||
desc[0].bindings[1].resourceHandle = ( nvrhi::ITexture* )GetImageAt( 0 )->GetTextureID();
|
||||
desc[0].bindings[2].resourceHandle = ( nvrhi::ITexture* )GetImageAt( 1 )->GetTextureID();
|
||||
desc[0].bindings[3].resourceHandle = ( nvrhi::ITexture* )GetImageAt( 2 )->GetTextureID();
|
||||
|
@ -1257,14 +1265,15 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
nvrhi::BindingSetItem::Texture_SRV( 0, ( nvrhi::ITexture* )GetImageAt( 0 )->GetTextureID() ),
|
||||
nvrhi::BindingSetItem::Texture_SRV( 1, ( nvrhi::ITexture* )GetImageAt( 1 )->GetTextureID() )
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
desc[0].bindings[0].resourceHandle = paramCb;
|
||||
desc[0].bindings[0].range = range;
|
||||
desc[0].bindings[1].resourceHandle = ( nvrhi::ITexture* )GetImageAt( 0 )->GetTextureID();
|
||||
desc[0].bindings[2].resourceHandle = ( nvrhi::ITexture* )GetImageAt( 1 )->GetTextureID();
|
||||
}
|
||||
|
@ -1289,12 +1298,13 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
desc[0].bindings[0].resourceHandle = paramCb;
|
||||
desc[0].bindings[0].range = range;
|
||||
}
|
||||
|
||||
if( desc[1].bindings.empty() )
|
||||
|
@ -1330,15 +1340,21 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
nvrhi::BindingSetItem::StructuredBuffer_SRV( 11, currentJointBuffer, nvrhi::Format::UNKNOWN, nvrhi::BufferRange( currentJointOffset, sizeof( idVec4 ) * numBoneMatrices ) )
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
desc[0].bindings[0].resourceHandle = paramCb;
|
||||
desc[0].bindings[0].range = range;
|
||||
auto& bindings = desc[0].bindings;
|
||||
bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
bindings[0].resourceHandle = paramCb;
|
||||
bindings[0].range = range;
|
||||
|
||||
bindings[0].resourceHandle = paramCb;
|
||||
bindings[0].range = range;
|
||||
|
||||
bindings[1].resourceHandle = currentJointBuffer;
|
||||
bindings[1].range = nvrhi::BufferRange{ currentJointOffset, sizeof( idVec4 )* numBoneMatrices };
|
||||
}
|
||||
|
@ -1376,7 +1392,7 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range ),
|
||||
nvrhi::BindingSetItem::Texture_SRV( 0, ( nvrhi::ITexture* )GetImageAt( 0 )->GetTextureID() ),
|
||||
nvrhi::BindingSetItem::Texture_SRV( 1, ( nvrhi::ITexture* )GetImageAt( 1 )->GetTextureID() ),
|
||||
nvrhi::BindingSetItem::Texture_SRV( 2, ( nvrhi::ITexture* )GetImageAt( 2 )->GetTextureID() )
|
||||
|
@ -1384,7 +1400,8 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
desc[0].bindings[0].resourceHandle = paramCb;
|
||||
desc[0].bindings[0].range = range;
|
||||
desc[0].bindings[1].resourceHandle = ( nvrhi::ITexture* )GetImageAt( 0 )->GetTextureID();
|
||||
desc[0].bindings[2].resourceHandle = ( nvrhi::ITexture* )GetImageAt( 1 )->GetTextureID();
|
||||
desc[0].bindings[3].resourceHandle = ( nvrhi::ITexture* )GetImageAt( 2 )->GetTextureID();
|
||||
|
@ -1408,14 +1425,15 @@ void idRenderBackend::GetCurrentBindingLayout( int type )
|
|||
{
|
||||
desc[0].bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, paramCb, range),
|
||||
nvrhi::BindingSetItem::Texture_SRV( 0, ( nvrhi::ITexture* )GetImageAt( 0 )->GetTextureID() ),
|
||||
nvrhi::BindingSetItem::Texture_SRV( 1, ( nvrhi::ITexture* )GetImageAt( 1 )->GetTextureID() )
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
desc[0].bindings[0].resourceHandle = renderProgManager.ConstantBuffer();
|
||||
desc[0].bindings[0].resourceHandle = paramCb;
|
||||
desc[0].bindings[0].range = range;
|
||||
desc[0].bindings[1].resourceHandle = ( nvrhi::ITexture* )GetImageAt( 0 )->GetTextureID();
|
||||
desc[0].bindings[2].resourceHandle = ( nvrhi::ITexture* )GetImageAt( 1 )->GetTextureID();
|
||||
}
|
||||
|
@ -1482,6 +1500,9 @@ void idRenderBackend::GL_EndFrame()
|
|||
|
||||
deviceManager->GetDevice()->executeCommandList( commandList );
|
||||
|
||||
// Make sure that all frames have finished rendering
|
||||
deviceManager->GetDevice()->waitForIdle();
|
||||
|
||||
// required for Vulkan: transition our swap image to present
|
||||
deviceManager->EndFrame();
|
||||
|
||||
|
@ -1498,9 +1519,6 @@ We want to exit this with the GPU idle, right at vsync
|
|||
*/
|
||||
void idRenderBackend::GL_BlockingSwapBuffers()
|
||||
{
|
||||
// Make sure that all frames have finished rendering
|
||||
deviceManager->GetDevice()->waitForIdle();
|
||||
|
||||
// Release all in-flight references to the render targets
|
||||
deviceManager->GetDevice()->runGarbageCollection();
|
||||
|
||||
|
|
|
@ -36,7 +36,6 @@ If you have questions concerning this license or the applicable additional terms
|
|||
#include <sys/DeviceManager.h>
|
||||
|
||||
|
||||
|
||||
/*
|
||||
========================
|
||||
idRenderProgManager::StartFrame
|
||||
|
@ -313,7 +312,15 @@ void idRenderProgManager::CommitConstantBuffer( nvrhi::ICommandList* commandList
|
|||
if( uniformsChanged )
|
||||
{
|
||||
commandList->writeBuffer( constantBuffer, uniforms.Ptr(), uniforms.Allocated() );
|
||||
|
||||
uniformsChanged = false;
|
||||
//bindingParmUbo[BindingLayoutType()].Update( uniforms.Ptr(), ALIGN( sizeof(idVec4) * RENDERPARM_TOTAL, vertexCache.uniformBufferOffsetAlignment ), 0, false, commandList );
|
||||
//CopyBuffer((byte*)mappedUniforms, (byte*)uniforms.Ptr(), RENDERPARM_TOTAL * sizeof(idVec4));
|
||||
//int layout = BindingLayoutType();
|
||||
//idVec4* parms = (idVec4*)bindingParmUbo[layout].MapBuffer(BM_WRITE);
|
||||
//for (int i = 0; i < RENDERPARM_TOTAL; i++)
|
||||
//{
|
||||
// parms[ i ] = uniforms[ i ];
|
||||
//}
|
||||
//bindingParmUbo[layout].UnmapBuffer();
|
||||
//uniformsChanged = false;
|
||||
}
|
||||
}
|
|
@ -129,10 +129,12 @@ bool BasicTriangle::Init()
|
|||
CommonRenderPasses commonPasses;
|
||||
commonPasses.Init( GetDevice() );
|
||||
|
||||
idUniformBuffer& ubo = renderProgManager.BindingParamUbo();
|
||||
|
||||
nvrhi::BindingSetDesc bindingSetDesc;
|
||||
bindingSetDesc.bindings =
|
||||
{
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, renderProgManager.ConstantBuffer() ),
|
||||
nvrhi::BindingSetItem::ConstantBuffer( 0, ubo.GetAPIObject(), nvrhi::BufferRange(ubo.GetOffset(), ubo.GetSize()) ),
|
||||
nvrhi::BindingSetItem::Texture_SRV( 0, texture ),
|
||||
nvrhi::BindingSetItem::Sampler( 0, commonPasses.m_AnisotropicWrapSampler )
|
||||
};
|
||||
|
|
|
@ -102,21 +102,21 @@ void idRenderProgManager::Init( nvrhi::IDevice* device )
|
|||
uniforms.SetNum( RENDERPARM_TOTAL, vec4_zero );
|
||||
uniformsChanged = false;
|
||||
|
||||
if( deviceManager->GetGraphicsAPI() == nvrhi::GraphicsAPI::VULKAN )
|
||||
renderParmUbo.SetDebugName( "Mapped Render Parms" );
|
||||
renderParmUbo.AllocBufferObject( NULL, ALIGN( NUM_BINDING_LAYOUTS * RENDERPARM_TOTAL * sizeof( idVec4 ), glConfig.uniformBufferOffsetAlignment ), BU_DYNAMIC, nullptr );
|
||||
|
||||
const int bytes = ALIGN( RENDERPARM_TOTAL * sizeof( idVec4 ), glConfig.uniformBufferOffsetAlignment );
|
||||
int offset = 0;
|
||||
for( int i = 0; i < NUM_BINDING_LAYOUTS; i++ )
|
||||
{
|
||||
// RB: FIXME this is ugly - DOUBLECHECK this
|
||||
constantBuffer = device->createBuffer(
|
||||
nvrhi::utils::CreateVolatileConstantBufferDesc( uniforms.Allocated(),
|
||||
"RenderParams", 4096 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
constantBuffer = device->createBuffer(
|
||||
nvrhi::utils::CreateVolatileConstantBufferDesc( uniforms.Allocated(),
|
||||
"RenderParams",
|
||||
c_MaxRenderPassConstantBufferVersions ) );
|
||||
bindingParmUbo[i].Reference( renderParmUbo, offset, bytes );
|
||||
//mappedRenderParms[i] = ( idVec4* )bindingParmUbo[i].MapBuffer( bufferMapType_t::BM_WRITE );
|
||||
offset += bytes;
|
||||
}
|
||||
|
||||
auto constantBufferDesc = nvrhi::utils::CreateVolatileConstantBufferDesc( uniforms.Allocated(), "RenderParams", 16384 );
|
||||
constantBuffer = device->createBuffer(constantBufferDesc);
|
||||
|
||||
// === Main draw vertex layout ===
|
||||
vertexLayoutDescs.SetNum( NUM_VERTEX_LAYOUTS, {} );
|
||||
|
||||
|
@ -184,15 +184,17 @@ void idRenderProgManager::Init( nvrhi::IDevice* device )
|
|||
|
||||
bindingLayouts.SetNum( NUM_BINDING_LAYOUTS );
|
||||
|
||||
auto renderParmLayoutItem = nvrhi::BindingLayoutItem::VolatileConstantBuffer(0);
|
||||
|
||||
auto uniformsLayoutDesc = nvrhi::BindingLayoutDesc()
|
||||
.setVisibility( nvrhi::ShaderType::All )
|
||||
.addItem( nvrhi::BindingLayoutItem::VolatileConstantBuffer( 0 ) );
|
||||
.addItem( renderParmLayoutItem );
|
||||
|
||||
auto uniformsLayout = device->createBindingLayout( uniformsLayoutDesc );
|
||||
|
||||
auto skinningLayoutDesc = nvrhi::BindingLayoutDesc()
|
||||
.setVisibility( nvrhi::ShaderType::All )
|
||||
.addItem( nvrhi::BindingLayoutItem::VolatileConstantBuffer( 0 ) )
|
||||
.addItem(renderParmLayoutItem)
|
||||
.addItem( nvrhi::BindingLayoutItem::StructuredBuffer_SRV( 11 ) ); // joint buffer;
|
||||
|
||||
auto skinningLayout = device->createBindingLayout( skinningLayoutDesc );
|
||||
|
@ -256,7 +258,7 @@ void idRenderProgManager::Init( nvrhi::IDevice* device )
|
|||
|
||||
auto aoLayoutDesc = nvrhi::BindingLayoutDesc()
|
||||
.setVisibility( nvrhi::ShaderType::All )
|
||||
.addItem( nvrhi::BindingLayoutItem::VolatileConstantBuffer( 0 ) )
|
||||
.addItem( renderParmLayoutItem )
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 0 ) )
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 1 ) )
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 2 ) );
|
||||
|
@ -265,25 +267,11 @@ void idRenderProgManager::Init( nvrhi::IDevice* device )
|
|||
|
||||
auto aoLayoutDesc2 = nvrhi::BindingLayoutDesc()
|
||||
.setVisibility( nvrhi::ShaderType::All )
|
||||
.addItem( nvrhi::BindingLayoutItem::VolatileConstantBuffer( 0 ) )
|
||||
.addItem( renderParmLayoutItem )
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 0 ) );
|
||||
|
||||
bindingLayouts[BINDING_LAYOUT_DRAW_AO1] = { device->createBindingLayout( aoLayoutDesc2 ), samplerOneBindingLayout };
|
||||
|
||||
/*
|
||||
nvrhi::BindingLayoutDesc shadowLayoutDesc;
|
||||
shadowLayoutDesc.visibility = nvrhi::ShaderType::All;
|
||||
shadowLayoutDesc.bindings =
|
||||
{
|
||||
nvrhi::BindingLayoutItem::VolatileConstantBuffer( 0 )
|
||||
};
|
||||
auto shadowLayout = device->createBindingLayout( shadowLayoutDesc );
|
||||
bindingLayouts[BINDING_LAYOUT_DRAW_SHADOWVOLUME] =
|
||||
{
|
||||
|
||||
};
|
||||
*/
|
||||
|
||||
auto interactionBindingLayoutDesc = nvrhi::BindingLayoutDesc()
|
||||
.setVisibility( nvrhi::ShaderType::Pixel )
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 3 ) ) // light falloff
|
||||
|
@ -359,7 +347,7 @@ void idRenderProgManager::Init( nvrhi::IDevice* device )
|
|||
|
||||
auto pp3DBindingLayout = nvrhi::BindingLayoutDesc()
|
||||
.setVisibility( nvrhi::ShaderType::All )
|
||||
.addItem( nvrhi::BindingLayoutItem::VolatileConstantBuffer( 0 ) )
|
||||
.addItem(renderParmLayoutItem)
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 0 ) ) // current render
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 1 ) ) // normal map
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 2 ) ); // mask
|
||||
|
@ -368,7 +356,7 @@ void idRenderProgManager::Init( nvrhi::IDevice* device )
|
|||
|
||||
auto ppFxBindingLayout = nvrhi::BindingLayoutDesc()
|
||||
.setVisibility( nvrhi::ShaderType::All )
|
||||
.addItem( nvrhi::BindingLayoutItem::VolatileConstantBuffer( 0 ) )
|
||||
.addItem(renderParmLayoutItem)
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 0 ) )
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 1 ) );
|
||||
|
||||
|
@ -392,7 +380,7 @@ void idRenderProgManager::Init( nvrhi::IDevice* device )
|
|||
|
||||
auto binkVideoBindingLayout = nvrhi::BindingLayoutDesc()
|
||||
.setVisibility( nvrhi::ShaderType::All )
|
||||
.addItem( nvrhi::BindingLayoutItem::VolatileConstantBuffer( 0 ) )
|
||||
.addItem(renderParmLayoutItem)
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 0 ) ) // cube map
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 1 ) ) // cube map
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 2 ) ); // normal map
|
||||
|
@ -401,7 +389,7 @@ void idRenderProgManager::Init( nvrhi::IDevice* device )
|
|||
|
||||
auto motionVectorsBindingLayout = nvrhi::BindingLayoutDesc()
|
||||
.setVisibility( nvrhi::ShaderType::All )
|
||||
.addItem( nvrhi::BindingLayoutItem::VolatileConstantBuffer( 0 ) )
|
||||
.addItem(renderParmLayoutItem)
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 0 ) ) // cube map
|
||||
.addItem( nvrhi::BindingLayoutItem::Texture_SRV( 1 ) ); // normal map
|
||||
|
||||
|
|
|
@ -1028,6 +1028,10 @@ public:
|
|||
{
|
||||
return constantBuffer;
|
||||
}
|
||||
ID_INLINE idUniformBuffer& BindingParamUbo()
|
||||
{
|
||||
return bindingParmUbo[ BindingLayoutType() ];
|
||||
}
|
||||
ID_INLINE nvrhi::InputLayoutHandle InputLayout()
|
||||
{
|
||||
return renderProgs[currentIndex].inputLayout;
|
||||
|
@ -1040,6 +1044,10 @@ public:
|
|||
{
|
||||
return &bindingLayouts[layoutType];
|
||||
}
|
||||
|
||||
idUniformBuffer renderParmUbo;
|
||||
idArray<idUniformBuffer, NUM_BINDING_LAYOUTS> bindingParmUbo;
|
||||
idArray<idVec4*, NUM_BINDING_LAYOUTS> mappedRenderParms;
|
||||
#elif defined(USE_VULKAN)
|
||||
void PrintPipelines();
|
||||
void ClearPipelines();
|
||||
|
|
Loading…
Reference in a new issue