mirror of
https://github.com/id-Software/DOOM-3-BFG.git
synced 2025-04-24 02:32:18 +00:00
Simplify BufferObject_NVRHI logic for VMA, support *Buffer::Reference() for VMA buffer objects
This commit is contained in:
parent
46fc1b8b7c
commit
5a881847be
2 changed files with 42 additions and 85 deletions
|
@ -140,6 +140,12 @@ idBufferObject::idBufferObject()
|
|||
inputLayout.Reset();
|
||||
buffer = NULL;
|
||||
|
||||
#if defined( USE_AMD_ALLOCATOR )
|
||||
vkBuffer = VK_NULL_HANDLE;
|
||||
allocation = NULL;
|
||||
allocationInfo = {};
|
||||
#endif
|
||||
|
||||
#else
|
||||
apiObject = NULL;
|
||||
buffer = NULL;
|
||||
|
@ -182,6 +188,8 @@ void idVertexBuffer::Reference( const idVertexBuffer& other )
|
|||
bufferHandle = other.bufferHandle;
|
||||
#if defined( USE_VULKAN )
|
||||
allocation = other.allocation;
|
||||
#elif defined( USE_NVRHI ) && defined ( USE_AMD_ALLOCATOR )
|
||||
allocationInfo = other.allocationInfo;
|
||||
#endif
|
||||
assert( OwnsBuffer() == false );
|
||||
}
|
||||
|
@ -206,6 +214,8 @@ void idVertexBuffer::Reference( const idVertexBuffer& other, int refOffset, int
|
|||
bufferHandle = other.bufferHandle;
|
||||
#if defined( USE_VULKAN )
|
||||
allocation = other.allocation;
|
||||
#elif defined( USE_NVRHI ) && defined ( USE_AMD_ALLOCATOR )
|
||||
allocationInfo = other.allocationInfo;
|
||||
#endif
|
||||
assert( OwnsBuffer() == false );
|
||||
}
|
||||
|
@ -246,6 +256,8 @@ void idIndexBuffer::Reference( const idIndexBuffer& other )
|
|||
bufferHandle = other.bufferHandle;
|
||||
#if defined( USE_VULKAN )
|
||||
allocation = other.allocation;
|
||||
#elif defined( USE_NVRHI ) && defined ( USE_AMD_ALLOCATOR )
|
||||
allocationInfo = other.allocationInfo;
|
||||
#endif
|
||||
assert( OwnsBuffer() == false );
|
||||
}
|
||||
|
@ -270,6 +282,8 @@ void idIndexBuffer::Reference( const idIndexBuffer& other, int refOffset, int re
|
|||
bufferHandle = other.bufferHandle;
|
||||
#if defined( USE_VULKAN )
|
||||
allocation = other.allocation;
|
||||
#elif defined( USE_NVRHI ) && defined ( USE_AMD_ALLOCATOR )
|
||||
allocationInfo = other.allocationInfo;
|
||||
#endif
|
||||
assert( OwnsBuffer() == false );
|
||||
}
|
||||
|
@ -310,6 +324,8 @@ void idUniformBuffer::Reference( const idUniformBuffer& other )
|
|||
bufferHandle = other.bufferHandle;
|
||||
#if defined( USE_VULKAN )
|
||||
allocation = other.allocation;
|
||||
#elif defined( USE_NVRHI ) && defined ( USE_AMD_ALLOCATOR )
|
||||
allocationInfo = other.allocationInfo;
|
||||
#endif
|
||||
assert( OwnsBuffer() == false );
|
||||
}
|
||||
|
@ -334,6 +350,8 @@ void idUniformBuffer::Reference( const idUniformBuffer& other, int refOffset, in
|
|||
bufferHandle = other.bufferHandle;
|
||||
#if defined( USE_VULKAN )
|
||||
allocation = other.allocation;
|
||||
#elif defined( USE_NVRHI ) && defined ( USE_AMD_ALLOCATOR )
|
||||
allocationInfo = other.allocationInfo;
|
||||
#endif
|
||||
assert( OwnsBuffer() == false );
|
||||
}
|
||||
|
|
|
@ -143,17 +143,9 @@ idVertexBuffer::idVertexBuffer
|
|||
*/
|
||||
idVertexBuffer::idVertexBuffer()
|
||||
{
|
||||
size = 0;
|
||||
offsetInOtherBuffer = OWNS_BUFFER_FLAG;
|
||||
bufferHandle.Reset();
|
||||
|
||||
#if defined( USE_AMD_ALLOCATOR )
|
||||
vkBuffer = VK_NULL_HANDLE;
|
||||
allocation = NULL;
|
||||
allocationInfo = {};
|
||||
#endif
|
||||
|
||||
//SRS - Generic initialization handled by idBufferObject base class
|
||||
SetUnmapped();
|
||||
SetDebugName( "Vertex Buffer" );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -200,7 +192,7 @@ bool idVertexBuffer::AllocBufferObject( const void* data, int allocSize, bufferU
|
|||
bufferCreateInfo.size = numBytes;
|
||||
bufferCreateInfo.usage = static_cast< VkBufferUsageFlags >( pickBufferUsage( vertexBufferDesc ) );
|
||||
bufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
|
||||
|
||||
VmaAllocationCreateInfo allocCreateInfo = {};
|
||||
if( usage == BU_DYNAMIC )
|
||||
{
|
||||
|
@ -215,7 +207,7 @@ bool idVertexBuffer::AllocBufferObject( const void* data, int allocSize, bufferU
|
|||
VkResult result = vmaCreateBuffer( m_VmaAllocator, &bufferCreateInfo, &allocCreateInfo, &vkBuffer, &allocation, &allocationInfo );
|
||||
assert( result == VK_SUCCESS );
|
||||
|
||||
bufferHandle = deviceManager->GetDevice()->createHandleForNativeBuffer( nvrhi::ObjectTypes::VK_Buffer, vkBuffer, vertexBufferDesc );
|
||||
bufferHandle = deviceManager->GetDevice()->createHandleForNativeBuffer( nvrhi::ObjectTypes::VK_Buffer, vkBuffer, vertexBufferDesc );
|
||||
}
|
||||
else
|
||||
#endif
|
||||
|
@ -277,8 +269,6 @@ void idVertexBuffer::FreeBufferObject()
|
|||
if( m_VmaAllocator )
|
||||
{
|
||||
vmaDestroyBuffer( m_VmaAllocator, vkBuffer, allocation );
|
||||
allocationInfo = VmaAllocationInfo();
|
||||
allocation = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -305,16 +295,9 @@ void idVertexBuffer::Update( const void* data, int updateSize, int offset, bool
|
|||
|
||||
if( usage == BU_DYNAMIC )
|
||||
{
|
||||
#if defined( USE_AMD_ALLOCATOR )
|
||||
if( m_VmaAllocator )
|
||||
{
|
||||
CopyBuffer( ( byte* )allocationInfo.pMappedData + GetOffset() + offset, ( const byte* )data, numBytes );
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
CopyBuffer( ( byte* )buffer + offset, ( const byte* )data, numBytes );
|
||||
}
|
||||
assert( IsMapped() );
|
||||
|
||||
CopyBuffer( ( byte* )buffer + offset, ( const byte* )data, numBytes );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -405,11 +388,8 @@ void idVertexBuffer::ClearWithoutFreeing()
|
|||
bufferHandle.Reset();
|
||||
|
||||
#if defined( USE_AMD_ALLOCATOR )
|
||||
if( m_VmaAllocator )
|
||||
{
|
||||
allocationInfo = VmaAllocationInfo();
|
||||
allocation = NULL;
|
||||
}
|
||||
allocation = NULL;
|
||||
allocationInfo = {};
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -428,17 +408,9 @@ idIndexBuffer::idIndexBuffer
|
|||
*/
|
||||
idIndexBuffer::idIndexBuffer()
|
||||
{
|
||||
size = 0;
|
||||
offsetInOtherBuffer = OWNS_BUFFER_FLAG;
|
||||
bufferHandle.Reset();
|
||||
|
||||
#if defined( USE_AMD_ALLOCATOR )
|
||||
vkBuffer = VK_NULL_HANDLE;
|
||||
allocation = NULL;
|
||||
allocationInfo = {};
|
||||
#endif
|
||||
|
||||
//SRS - Generic initialization handled by idBufferObject base class
|
||||
SetUnmapped();
|
||||
SetDebugName( "Index Buffer" );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -487,7 +459,7 @@ bool idIndexBuffer::AllocBufferObject( const void* data, int allocSize, bufferUs
|
|||
bufferCreateInfo.size = numBytes;
|
||||
bufferCreateInfo.usage = static_cast< VkBufferUsageFlags >( pickBufferUsage( indexBufferDesc ) );
|
||||
bufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
|
||||
|
||||
VmaAllocationCreateInfo allocCreateInfo = {};
|
||||
if( usage == BU_DYNAMIC )
|
||||
{
|
||||
|
@ -563,8 +535,6 @@ void idIndexBuffer::FreeBufferObject()
|
|||
if( m_VmaAllocator )
|
||||
{
|
||||
vmaDestroyBuffer( m_VmaAllocator, vkBuffer, allocation );
|
||||
allocationInfo = VmaAllocationInfo();
|
||||
allocation = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -591,16 +561,9 @@ void idIndexBuffer::Update( const void* data, int updateSize, int offset, bool i
|
|||
|
||||
if( usage == BU_DYNAMIC )
|
||||
{
|
||||
#if defined( USE_AMD_ALLOCATOR )
|
||||
if( m_VmaAllocator )
|
||||
{
|
||||
CopyBuffer( ( byte* )allocationInfo.pMappedData + GetOffset() + offset, ( const byte* )data, numBytes );
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
CopyBuffer( ( byte* )buffer + offset, ( const byte* )data, numBytes );
|
||||
}
|
||||
assert( IsMapped() );
|
||||
|
||||
CopyBuffer( ( byte* )buffer + offset, ( const byte* )data, numBytes );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -692,11 +655,8 @@ void idIndexBuffer::ClearWithoutFreeing()
|
|||
bufferHandle.Reset();
|
||||
|
||||
#if defined( USE_AMD_ALLOCATOR )
|
||||
if( m_VmaAllocator )
|
||||
{
|
||||
allocationInfo = VmaAllocationInfo();
|
||||
allocation = NULL;
|
||||
}
|
||||
allocation = NULL;
|
||||
allocationInfo = {};
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -715,16 +675,7 @@ idUniformBuffer::idUniformBuffer
|
|||
*/
|
||||
idUniformBuffer::idUniformBuffer()
|
||||
{
|
||||
size = 0;
|
||||
offsetInOtherBuffer = OWNS_BUFFER_FLAG;
|
||||
bufferHandle.Reset();
|
||||
|
||||
#if defined( USE_AMD_ALLOCATOR )
|
||||
vkBuffer = VK_NULL_HANDLE;
|
||||
allocation = NULL;
|
||||
allocationInfo = {};
|
||||
#endif
|
||||
|
||||
//SRS - Generic initialization handled by idBufferObject base class
|
||||
SetUnmapped();
|
||||
SetDebugName( "Uniform Buffer" );
|
||||
}
|
||||
|
@ -779,7 +730,7 @@ bool idUniformBuffer::AllocBufferObject( const void* data, int allocSize, buffer
|
|||
bufferCreateInfo.size = numBytes;
|
||||
bufferCreateInfo.usage = static_cast< VkBufferUsageFlags >( pickBufferUsage( bufferDesc ) );
|
||||
bufferCreateInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
|
||||
|
||||
|
||||
VmaAllocationCreateInfo allocCreateInfo = {};
|
||||
if( usage == BU_DYNAMIC )
|
||||
{
|
||||
|
@ -856,8 +807,6 @@ void idUniformBuffer::FreeBufferObject()
|
|||
if( m_VmaAllocator )
|
||||
{
|
||||
vmaDestroyBuffer( m_VmaAllocator, vkBuffer, allocation );
|
||||
allocationInfo = VmaAllocationInfo();
|
||||
allocation = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -884,16 +833,9 @@ void idUniformBuffer::Update( const void* data, int updateSize, int offset, bool
|
|||
|
||||
if( usage == BU_DYNAMIC )
|
||||
{
|
||||
#if defined( USE_AMD_ALLOCATOR )
|
||||
if( m_VmaAllocator )
|
||||
{
|
||||
CopyBuffer( ( byte* )allocationInfo.pMappedData + GetOffset() + offset, ( const byte* )data, numBytes );
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
CopyBuffer( ( byte* )buffer + offset, ( const byte* )data, numBytes );
|
||||
}
|
||||
assert( IsMapped() );
|
||||
|
||||
CopyBuffer( ( byte* )buffer + offset, ( const byte* )data, numBytes );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -984,10 +926,7 @@ void idUniformBuffer::ClearWithoutFreeing()
|
|||
bufferHandle.Reset();
|
||||
|
||||
#if defined( USE_AMD_ALLOCATOR )
|
||||
if( m_VmaAllocator )
|
||||
{
|
||||
allocationInfo = VmaAllocationInfo();
|
||||
allocation = NULL;
|
||||
}
|
||||
allocation = NULL;
|
||||
allocationInfo = {};
|
||||
#endif
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue