4.2 GPU与CPU的交互
GPU与CPU并行工作,有时需要同步。为了获得最佳性能,我们的目标是尽可能地保持两者的忙碌,并尽量减少同步。
GPU有一个命令队列。CPU使用命令列表通过Direct3D API向队列提交命令。一旦一组命令被提交到命令队列,它们不会立即被GPU执行。它们一直在队列中,直到GPU准备好处理它们,因为GPU很可能忙于处理之前插入的命令。
创建命令队列的方法:
Microsoft::WRL::ComPtr<ID3D12CommandQueue> mCommandQueue;
//填写结构体
D3D12_COMMAND_QUEUE_DESC queueDesc = {
};
queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;
queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
//创建队列
ThrowIfFailed(md3dDevice->CreateCommandQueue(
&queueDesc, IID_PPV_ARGS(&mCommandQueue)));
这个接口的主要方法之一是ExecuteCommandLists方法,它将命令列表中的命令添加到队列中:
void ID3D12CommandQueue::ExecuteCommandLists(
// Number of commands lists in the array
UINT Count,
// Pointer to the first element in an array of command lists
ID3D12CommandList *const *ppCommandLists);
ID3D12GraphicsCommandList接口有许多将命令添加到命令列表的方法。如: