原理: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, we need to create
// an intermediate upload heap.
Th

本文介绍了Unity中使用D3D进行静态模型渲染时,如何利用DefaultHeap提高GPU性能。由于CPU无法直接访问DefaultHeap,因此需要通过Upload Heap作为中转来上传顶点数据。
最低0.47元/天 解锁文章
6

被折叠的 条评论
为什么被折叠?



