原理:D3D中的DefaultHeap(D3D12_HEAP_TYPE_DEFAULT)只允许GPU从中读取数据,CPU是不可以访问的。将顶点buffer写入到DefaultHeap可以提高性能。
CPU是不可以访问DefaultHeap的,所以要将顶点buffer写入到DefaultHeap还需要一个中转(D3D12_HEAP_TYPE_UPLOAD)。
代码实现:
Microsoft::WRL::ComPtr<ID3D12Resource> d3dUtil::CreateDefaultBuffer(
ID3D12Device* device,
ID3D12GraphicsCommandList* cmdList,
const void* initData,
UINT64 byteSize,
Microsoft::WRL::ComPtr<ID3D12Resource>& uploadBuffer)
{
ComPtr<ID3D12Resource> defaultBuffer;
// Create the actual default buffer resource.
ThrowIfFailed(device->CreateCommittedResource(
&CD3DX12_HEAP_PROPERTIES(D3D12_HEAP_TYPE_DEFAULT),
D3D12_HEAP_FLAG_NONE,
&CD3DX12_RESOURCE_DESC::Buffer(byteSize),
D3D12_RESOURCE_STATE_COMMON,
nullptr,
IID_PPV_ARGS(defaultBuffer.GetAddressOf())));
// In order to copy CPU memory data into our default buffer, w