76 lines
No EOL
2.5 KiB
C++
76 lines
No EOL
2.5 KiB
C++
#include "DirectXDescriptors.h"
|
|
|
|
#include <directx/d3dx12.h>
|
|
|
|
UINT DirectXDescriptors::getRtvDescriptorSize() const
|
|
{
|
|
return mRtvDescriptorSize;
|
|
}
|
|
|
|
D3D12_CPU_DESCRIPTOR_HANDLE DirectXDescriptors::getRtvHandle(int index) const
|
|
{
|
|
if (index == -1)
|
|
{
|
|
return CD3DX12_CPU_DESCRIPTOR_HANDLE(mRtvHeap->GetCPUDescriptorHandleForHeapStart());
|
|
}
|
|
else
|
|
{
|
|
return CD3DX12_CPU_DESCRIPTOR_HANDLE(mRtvHeap->GetCPUDescriptorHandleForHeapStart(), index, mRtvDescriptorSize);
|
|
}
|
|
}
|
|
|
|
D3D12_CPU_DESCRIPTOR_HANDLE DirectXDescriptors::getDsvHandle() const
|
|
{
|
|
return mDsvHeap->GetCPUDescriptorHandleForHeapStart();
|
|
}
|
|
|
|
void DirectXDescriptors::updateDescriptorSizes(ID3D12Device* device)
|
|
{
|
|
mRtvDescriptorSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
|
|
mDsvDescriptorSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_DSV);
|
|
mCbvSrvDescriptorSize = device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
|
|
}
|
|
|
|
void DirectXDescriptors::setupDefaultDescriptorHeaps(ID3D12Device* device, unsigned numFrames)
|
|
{
|
|
updateDescriptorSizes(device);
|
|
setupRtvDescriptorHeap(device, numFrames);
|
|
setupDsvDescriptorHeap(device);
|
|
}
|
|
|
|
void DirectXDescriptors::setupRtvDescriptorHeap(ID3D12Device* device, unsigned numFrames)
|
|
{
|
|
D3D12_DESCRIPTOR_HEAP_DESC rtvHeapDesc = {};
|
|
rtvHeapDesc.NumDescriptors = numFrames;
|
|
rtvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV;
|
|
rtvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;
|
|
device->CreateDescriptorHeap(&rtvHeapDesc, IID_PPV_ARGS(&mRtvHeap));
|
|
}
|
|
|
|
void DirectXDescriptors::setupDsvDescriptorHeap(ID3D12Device* device)
|
|
{
|
|
D3D12_DESCRIPTOR_HEAP_DESC dsvHeapDesc = {};
|
|
dsvHeapDesc.NumDescriptors = 1;
|
|
dsvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_DSV;
|
|
dsvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;
|
|
dsvHeapDesc.NodeMask = 0;
|
|
device->CreateDescriptorHeap(&dsvHeapDesc, IID_PPV_ARGS(&mDsvHeap));
|
|
}
|
|
|
|
void DirectXDescriptors::setupSrvDescriptorHeap(ID3D12Device* device)
|
|
{
|
|
D3D12_DESCRIPTOR_HEAP_DESC srvHeapDesc = {};
|
|
srvHeapDesc.NumDescriptors = 1;
|
|
srvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;
|
|
srvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;
|
|
device->CreateDescriptorHeap(&srvHeapDesc, IID_PPV_ARGS(&mSrvHeap));
|
|
}
|
|
|
|
void DirectXDescriptors::setupCbvDescriptorHeap(ID3D12Device* device)
|
|
{
|
|
D3D12_DESCRIPTOR_HEAP_DESC cbvHeapDesc = {};
|
|
cbvHeapDesc.NumDescriptors = 1;
|
|
cbvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;
|
|
cbvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;
|
|
device->CreateDescriptorHeap(&cbvHeapDesc, IID_PPV_ARGS(&mCbvHeap));
|
|
} |