デバイス初期化-CommandQueue
CommandQueue
D3D12_COMMAND_QUEUE_DESC queueDesc = {};
queueDesc.Type =D3D12_COMMAND_LIST_TYPE_DIRECT;
queueDesc.Flags =D3D12_COMMAND_QUEUE_FLAG_NONE;
D3D12_COMMAND_QUEUE_DESC 구조체를 생성하여 CommandQueue의 세부사항을 작성한다.
위 코드에서는 GPU가 직접 실행할 수 있는 명령 버퍼라고 타입을 지정하고 있으며,
플래그는 기본 명령 큐로 설정하고 있다.
device->CreateCommandQueue(&queueDesc, IID_PPV_ARGS(&_cmdQueue)); // commandQueue를 생성
위 코드는 앞서 생성한 D3D12_COMMAND_QUEUE_DESC를 인자로
사용하여 CommandQueue 컴객체를 생성하고 있다.
CommandListとCommandAllocator
device->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_PPV_ARGS(&_resCmdAlloc));
device->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_DIRECT, _resCmdAlloc.Get(), nullptr, IID_PPV_ARGS(&_resCmdList));
_resCmdList->Close();
_resCmdAlloc->Reset();
_resCmdList->Reset(_resCmdAlloc.Get(), nullptr);
ID3D12CommandList* cmdListArr[] = { _resCmdList.Get() };
_cmdQueue->ExecuteCommandLists(_countof(cmdListArr), cmdListArr)
위 코드를 보면 CommandAllocator를 생성하고 그것을
CommandList를 생성할 때 인자로 사용한다는 것을 알 수 있다.
또한 Close된 List는 사용할 수 없기에 사용하기 전에
꼭 Reset을 하여 Open상태로 만들어 주어야 한다.
마지막으로 ExecuteCommandLists를 사용하여 GPU에게 명령을 요청한다.
Reference
この問題について(デバイス初期化-CommandQueue), 我々は、より多くの情報をここで見つけました https://velog.io/@sansam41/장치-초기화-CommandQueueテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol