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 <Graphics/D3D12/D3D12Buffer.h>
|
||||||
|
|
||||||
#include <Core/Logging/LogManager.h>
|
#include <Core/Logging/LogManager.h>
|
||||||
#include <Core/Logging/LogTypes.h>
|
#include <Core/Logging/LogTypes.h>
|
||||||
|
#include <Core/Memory/Allocator.h>
|
||||||
#include <Graphics/D3D12/D3D12CommandList.h>
|
#include <Graphics/D3D12/D3D12CommandList.h>
|
||||||
#include <Graphics/D3D12/D3D12DescriptorHeap.h>
|
#include <Graphics/D3D12/D3D12DescriptorHeap.h>
|
||||||
#include <Graphics/D3D12/D3D12GraphicsDevice.h>
|
#include <Graphics/D3D12/D3D12GraphicsDevice.h>
|
||||||
#include <Graphics/D3D12/D3D12Utils.h>
|
|
||||||
|
|
||||||
namespace Juliet::D3D12
|
namespace Juliet::D3D12
|
||||||
{
|
{
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
|
// Linked List of free buffers
|
||||||
|
D3D12Buffer* FreeBuffers = nullptr;
|
||||||
|
|
||||||
enum class D3D12BufferType : uint8
|
enum class D3D12BufferType : uint8
|
||||||
{
|
{
|
||||||
Base,
|
Base,
|
||||||
@@ -53,18 +55,36 @@ namespace Juliet::D3D12
|
|||||||
{
|
{
|
||||||
Internal::ReleaseDescriptor(buffer->Descriptor);
|
Internal::ReleaseDescriptor(buffer->Descriptor);
|
||||||
}
|
}
|
||||||
|
buffer->Descriptor = {};
|
||||||
|
|
||||||
if (buffer->Handle)
|
if (buffer->Handle)
|
||||||
{
|
{
|
||||||
buffer->Handle->Release();
|
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,
|
D3D12Buffer* CreateBuffer(NonNullPtr<D3D12Driver> d3d12Driver, size_t size, size_t stride, BufferUsage usage,
|
||||||
D3D12BufferType type, bool isDynamic)
|
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)
|
if (!buffer)
|
||||||
{
|
{
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@@ -243,6 +263,7 @@ namespace Juliet::D3D12
|
|||||||
{
|
{
|
||||||
auto d3d12Buffer = reinterpret_cast<D3D12Buffer*>(buffer.Get());
|
auto d3d12Buffer = reinterpret_cast<D3D12Buffer*>(buffer.Get());
|
||||||
void* ptr = nullptr;
|
void* ptr = nullptr;
|
||||||
|
|
||||||
// 0-0 range means we don't intend to read anything.
|
// 0-0 range means we don't intend to read anything.
|
||||||
D3D12_RANGE readRange = { 0, 0 };
|
D3D12_RANGE readRange = { 0, 0 };
|
||||||
if (FAILED(d3d12Buffer->Handle->Map(0, &readRange, &ptr)))
|
if (FAILED(d3d12Buffer->Handle->Map(0, &readRange, &ptr)))
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
#include <Graphics/D3D12/D3D12DescriptorHeap.h>
|
#include <Graphics/D3D12/D3D12DescriptorHeap.h>
|
||||||
#include <Graphics/GraphicsBuffer.h>
|
#include <Graphics/GraphicsBuffer.h>
|
||||||
|
|
||||||
|
|
||||||
namespace Juliet
|
namespace Juliet
|
||||||
{
|
{
|
||||||
struct CommandList;
|
struct CommandList;
|
||||||
@@ -14,9 +13,13 @@ namespace Juliet::D3D12
|
|||||||
{
|
{
|
||||||
struct D3D12Buffer
|
struct D3D12Buffer
|
||||||
{
|
{
|
||||||
|
// Note: This three variables need to stay at the top and in this order
|
||||||
Internal::D3D12Descriptor Descriptor;
|
Internal::D3D12Descriptor Descriptor;
|
||||||
ID3D12Resource* Handle;
|
ID3D12Resource* Handle;
|
||||||
D3D12_RESOURCE_STATES CurrentState;
|
D3D12_RESOURCE_STATES CurrentState;
|
||||||
|
|
||||||
|
// Anything here can be any order
|
||||||
|
D3D12Buffer* Next;
|
||||||
size_t Size;
|
size_t Size;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user