56 lines
1.4 KiB
C
56 lines
1.4 KiB
C
#ifndef RENDER_D3D12_H
|
|
#define RENDER_D3D12_H
|
|
|
|
#define COBJMACROS 1
|
|
#include <d3d12.h>
|
|
#include <dxgi1_4.h>
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//~
|
|
|
|
#define R_NUM_FRAMES_IN_FLIGHT 3
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//~
|
|
|
|
|
|
typedef struct R_D3D12_Command R_D3D12_Command;
|
|
struct R_D3D12_Command
|
|
{
|
|
Arena *arena;
|
|
ID3D12CommandQueue *queue;
|
|
ID3D12CommandAllocator *allocator;
|
|
ID3D12GraphicsCommandList *list1;
|
|
};
|
|
|
|
typedef struct R_D3D12_RenderTarget R_D3D12_RenderTarget;
|
|
struct R_D3D12_RenderTarget
|
|
{
|
|
Arena *arena;
|
|
ID3D12DescriptorHeap *heap;
|
|
D3D12_CPU_DESCRIPTOR_HANDLE handle;
|
|
U32 descriptor_size;
|
|
ID3D12Resource *targets[R_NUM_FRAMES_IN_FLIGHT];
|
|
};
|
|
|
|
typedef struct R_D3D12_State R_D3D12_State;
|
|
struct R_D3D12_State
|
|
{
|
|
Arena *arena;
|
|
HWND window_handle;
|
|
ID3D12Device *device;
|
|
ID3D12Debug *debug;
|
|
IDXGISwapChain3 *swapchain;
|
|
ID3D12Fence *fence;
|
|
U64 fence_value;
|
|
U64 frame_fence_values[R_NUM_FRAMES_IN_FLIGHT];
|
|
HANDLE fence_event;
|
|
};
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//~
|
|
internal LRESULT r_d3d12_create_swapchain(IDXGIFactory4 *factory);
|
|
internal void r_d3d12_wait_for_previous_frame();
|
|
#endif /* RENDER_D3D12_H */ |