다음을 통해 공유


ID3D12CommandList 인터페이스(d3d12.h)

ID3D12GraphicsCommandList가 상속하는 인터페이스입니다. GPU가 실행하는 순서가 지정된 명령 집합을 나타내며 확장이 그래픽(예: 컴퓨팅 및 복사)에 대한 명령 목록보다 다른 명령 목록을 지원할 수 있도록 허용합니다.

상속

ID3D12CommandList 인터페이스는 ID3D12DeviceChild에서 상속됩니다. ID3D12CommandList 에는 다음과 같은 유형의 멤버도 있습니다.

메서드

ID3D12CommandList 인터페이스에는 이러한 메서드가 있습니다.

 
ID3D12CommandList::GetType

직접, 번들, 컴퓨팅 또는 복사와 같은 명령 목록의 형식을 가져옵니다.

설명

ID3D12Device::CreateCommandList를 사용하여 명령 목록 개체를 만듭니다.

ID3D12CommandList에서 파생되는 ID3D12GraphicsCommandList도 참조하세요.

명령 목록은 GPU(그래픽 처리 장치)가 실행하는 명령 집합에 해당합니다. 명령은 상태, 그리기, 지우기, 복사 등을 설정합니다.

Direct3D 12 명령 목록은 다음 두 가지 수준의 간접 참조만 지원합니다.

  • 직접 명령 목록은 GPU가 실행할 수 있는 명령 버퍼에 해당합니다.
  • 번들은 직접 명령 목록을 통해서만 직접 실행할 수 있습니다.

예제

D3D12nBodyGravity 샘플은 다음과 같이 ID3D12CommandList를 사용합니다.

DWORD D3D12nBodyGravity::AsyncComputeThreadProc(int threadIndex)
{
    ID3D12CommandQueue* pCommandQueue = m_computeCommandQueue[threadIndex].Get();
    ID3D12CommandAllocator* pCommandAllocator = m_computeAllocator[threadIndex].Get();
    ID3D12GraphicsCommandList* pCommandList = m_computeCommandList[threadIndex].Get();
    ID3D12Fence* pFence = m_threadFences[threadIndex].Get();

    while (0 == InterlockedGetValue(&m_terminating))
    {
        // Run the particle simulation.
        Simulate(threadIndex);

        // Close and execute the command list.
        ThrowIfFailed(pCommandList->Close());
        ID3D12CommandList* ppCommandLists[] = { pCommandList };

        pCommandQueue->ExecuteCommandLists(1, ppCommandLists);

        // Wait for the compute shader to complete the simulation.
        UINT64 threadFenceValue = InterlockedIncrement(&m_threadFenceValues[threadIndex]);
        ThrowIfFailed(pCommandQueue->Signal(pFence, threadFenceValue));
        ThrowIfFailed(pFence->SetEventOnCompletion(threadFenceValue, m_threadFenceEvents[threadIndex]));
        WaitForSingleObject(m_threadFenceEvents[threadIndex], INFINITE);

        // Wait for the render thread to be done with the SRV so that
        // the next frame in the simulation can run.
        UINT64 renderContextFenceValue = InterlockedGetValue(&m_renderContextFenceValues[threadIndex]);
        if (m_renderContextFence->GetCompletedValue() < renderContextFenceValue)
        {
            ThrowIfFailed(pCommandQueue->Wait(m_renderContextFence.Get(), renderContextFenceValue));
            InterlockedExchange(&m_renderContextFenceValues[threadIndex], 0);
        }

        // Swap the indices to the SRV and UAV.
        m_srvIndex[threadIndex] = 1 - m_srvIndex[threadIndex];

        // Prepare for the next frame.
        ThrowIfFailed(pCommandAllocator->Reset());
        ThrowIfFailed(pCommandList->Reset(pCommandAllocator, m_computeState.Get()));
    }

    return 0;
}

D3D12 참조의 예제 코드를 참조하세요.

요구 사항

   
대상 플랫폼 Windows
헤더 d3d12.h

참고 항목

Core 인터페이스

ID3D12DeviceChild

ID3D12GraphicsCommandList

설명자 힙 설정