Freigeben über


ID3D12Device::CreateCommandList-Methode (d3d12.h)

Erstellt eine Befehlsliste.

Syntax

HRESULT CreateCommandList(
  [in]           UINT                    nodeMask,
  [in]           D3D12_COMMAND_LIST_TYPE type,
  [in]           ID3D12CommandAllocator  *pCommandAllocator,
  [in, optional] ID3D12PipelineState     *pInitialState,
  [in]           REFIID                  riid,
  [out]          void                    **ppCommandList
);

Parameter

[in] nodeMask

Typ: UINT

Legen Sie bei Einzel-GPU-Vorgängen diesen Wert auf 0 (null) fest. Wenn mehrere GPU-Knoten vorhanden sind, legen Sie ein Bit fest, um den Knoten (den physischen Adapter des Geräts) zu identifizieren, für den die Befehlsliste erstellt werden soll. Jedes Bit in der Maske entspricht einem einzelnen Knoten. Es muss nur ein Bit festgelegt werden. Weitere Informationen finden Sie unter Multi-Adapter-Systeme.

[in] type

Typ: D3D12_COMMAND_LIST_TYPE

Gibt den Typ der zu erstellenden Befehlsliste an.

[in] pCommandAllocator

Typ: ID3D12CommandAllocator*

Ein Zeiger auf das Befehlszuweisungsobjekt, aus dem das Gerät Befehlslisten erstellt.

[in, optional] pInitialState

Typ: ID3D12PipelineState*

Ein optionaler Zeiger auf das Pipelinestatusobjekt, das den anfänglichen Pipelinestatus für die Befehlsliste enthält. Wenn dies der Wert ist nullptr, legt die Laufzeit einen Dummy-Anfangsstatus der Pipeline fest, sodass Treiber sich nicht mit dem undefinierten Zustand befassen müssen. Der Aufwand hierfür ist gering, insbesondere für eine Befehlsliste, bei der die Gesamtkosten für die Aufzeichnung der Befehlsliste wahrscheinlich die Kosten einer einzelnen Anfangszustandseinstellung in den Schatten stellen. Wenn Sie den anfänglichen Pipelinezustandsparameter nicht festlegen, fallen daher nur geringe Kosten an, wenn dies umständlich ist.

Für Bundles kann es dagegen sinnvoller sein, den Anfänglichzustandsparameter festzulegen (da Bundles insgesamt wahrscheinlich kleiner sind und häufig wiederverwendet werden können).

[in] riid

Typ: REFIID

Ein Verweis auf die GUID (Globally Unique Identifier) der Befehlslistenschnittstelle, die in ppCommandList zurückgegeben werden soll.

[out] ppCommandList

Typ: void**

Ein Zeiger auf einen Speicherblock, der einen Zeiger auf die ID3D12CommandList - oder ID3D12GraphicsCommandList-Schnittstelle für die Befehlsliste empfängt.

Rückgabewert

Typ: HRESULT

Wenn die Funktion erfolgreich ist, wird S_OK zurückgegeben. Andernfalls wird ein HRESULT-Fehlercode zurückgegeben.

Rückgabewert BESCHREIBUNG
E_OUTOFMEMORY Es ist nicht genügend Arbeitsspeicher vorhanden, um die Befehlsliste zu erstellen.

Weitere mögliche Rückgabewerte finden Sie unter Direct3D 12-Rückgabecodes .

Hinweise

Das Gerät erstellt Befehlslisten aus der Befehlszuweisung.

Beispiele

Im D3D12Bundles-Beispiel wird ID3D12Device::CreateCommandList wie folgt verwendet.

Erstellen Sie die Pipelineobjekte.

ComPtr<ID3D12CommandAllocator> m_commandAllocator;
ComPtr<ID3D12GraphicsCommandList> m_commandList;

Erstellen Sie eine Befehlszuweisung.

ThrowIfFailed(m_device->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_PPV_ARGS(&m_commandAllocator)));

Erstellen der direkten Befehlsliste.

ThrowIfFailed(m_device->CreateCommandList(0, D3D12_COMMAND_LIST_TYPE_DIRECT, m_commandAllocator.Get(), nullptr, IID_PPV_ARGS(&m_commandList)));

Weitere Informationen finden Sie im Beispielcode in der D3D12-Referenz.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile d3d12.h
Bibliothek D3D12.lib
DLL D3D12.dll

Weitere Informationen

ID3D12Device

ID3D12GraphicsCommandList::Reset