Converted d3d12 buffers to arena. Using linked list as i'm not sure how many buffers i will use total
This commit is contained in:
@@ -1,17 +1,19 @@
|
||||
#include <Core/Memory/Allocator.h>
|
||||
#include <Graphics/D3D12/D3D12Buffer.h>
|
||||
|
||||
#include <Core/Logging/LogManager.h>
|
||||
#include <Core/Logging/LogTypes.h>
|
||||
#include <Core/Memory/Allocator.h>
|
||||
#include <Graphics/D3D12/D3D12CommandList.h>
|
||||
#include <Graphics/D3D12/D3D12DescriptorHeap.h>
|
||||
#include <Graphics/D3D12/D3D12GraphicsDevice.h>
|
||||
#include <Graphics/D3D12/D3D12Utils.h>
|
||||
|
||||
namespace Juliet::D3D12
|
||||
{
|
||||
namespace
|
||||
{
|
||||
// Linked List of free buffers
|
||||
D3D12Buffer* FreeBuffers = nullptr;
|
||||
|
||||
enum class D3D12BufferType : uint8
|
||||
{
|
||||
Base,
|
||||
@@ -53,18 +55,36 @@ namespace Juliet::D3D12
|
||||
{
|
||||
Internal::ReleaseDescriptor(buffer->Descriptor);
|
||||
}
|
||||
buffer->Descriptor = {};
|
||||
|
||||
if (buffer->Handle)
|
||||
{
|
||||
buffer->Handle->Release();
|
||||
buffer->Handle = nullptr;
|
||||
}
|
||||
Free(buffer);
|
||||
buffer->CurrentState = D3D12_RESOURCE_STATE_COMMON;
|
||||
buffer->Size = 0;
|
||||
|
||||
buffer->Next = FreeBuffers;
|
||||
FreeBuffers = buffer;
|
||||
}
|
||||
|
||||
D3D12Buffer* CreateBuffer(NonNullPtr<D3D12Driver> d3d12Driver, size_t size, size_t stride, BufferUsage usage,
|
||||
D3D12BufferType type, bool isDynamic)
|
||||
{
|
||||
auto* buffer = static_cast<D3D12Buffer*>(Calloc(1, sizeof(D3D12Buffer)));
|
||||
D3D12Buffer* buffer = nullptr;
|
||||
if (FreeBuffers)
|
||||
{
|
||||
buffer = FreeBuffers;
|
||||
FreeBuffers = buffer->Next;
|
||||
buffer->Next = nullptr;
|
||||
}
|
||||
|
||||
if (!buffer)
|
||||
{
|
||||
buffer = ArenaPushStruct<D3D12Buffer>(d3d12Driver->DriverArena JULIET_DEBUG_PARAM("D3D12Buffer"));
|
||||
}
|
||||
|
||||
if (!buffer)
|
||||
{
|
||||
return nullptr;
|
||||
@@ -243,6 +263,7 @@ namespace Juliet::D3D12
|
||||
{
|
||||
auto d3d12Buffer = reinterpret_cast<D3D12Buffer*>(buffer.Get());
|
||||
void* ptr = nullptr;
|
||||
|
||||
// 0-0 range means we don't intend to read anything.
|
||||
D3D12_RANGE readRange = { 0, 0 };
|
||||
if (FAILED(d3d12Buffer->Handle->Map(0, &readRange, &ptr)))
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
#include <Graphics/D3D12/D3D12DescriptorHeap.h>
|
||||
#include <Graphics/GraphicsBuffer.h>
|
||||
|
||||
|
||||
namespace Juliet
|
||||
{
|
||||
struct CommandList;
|
||||
@@ -14,9 +13,13 @@ namespace Juliet::D3D12
|
||||
{
|
||||
struct D3D12Buffer
|
||||
{
|
||||
// Note: This three variables need to stay at the top and in this order
|
||||
Internal::D3D12Descriptor Descriptor;
|
||||
ID3D12Resource* Handle;
|
||||
D3D12_RESOURCE_STATES CurrentState;
|
||||
|
||||
// Anything here can be any order
|
||||
D3D12Buffer* Next;
|
||||
size_t Size;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user