ID3D12CommandAllocator::Reset-Methode (d3d12.h)

Gibt an, dass der Arbeitsspeicher, der der Befehlszuweisung zugeordnet ist, erneut verwendet werden soll.

Syntax

HRESULT Reset();

Rückgabewert

Typ: HRESULT

Diese Methode gibt E_FAIL zurück, wenn eine Befehlsliste aktiv aufgezeichnet wird, die auf die Befehlszuweisung verweist. Die Debugebene gibt in diesem Fall auch einen Fehler aus.
Weitere mögliche Rückgabewerte finden Sie unter Direct3D 12-Rückgabecodes .

Hinweise

Apps rufen Reset auf, um den Speicher, der einer Befehlszuweisung zugeordnet ist, wieder zu verwenden. Bei diesem Aufruf von Reset bestimmen Laufzeit und Treiber, dass die Grafikverarbeitungseinheit (GRAPHICS Processing Unit, GPU) keine Befehlslisten mehr ausführt, die Befehle mit der Befehlszuweisung aufgezeichnet haben.

Im Gegensatz zu ID3D12GraphicsCommandList::Reset wird nicht empfohlen, Reset für die Befehlszuweisung aufzurufen, während eine Befehlsliste noch ausgeführt wird.

Die Debugebene gibt eine Warnung aus, wenn sie nicht nachweisen kann, dass keine ausstehenden GPU-Verweise auf Befehlslisten vorhanden sind, die Befehle in der Zuweisung aufgezeichnet haben.

Die Debugebene gibt einen Fehler aus, wenn Reset gleichzeitig von mehreren Threads (für dasselbe Zuweisungsobjekt) aufgerufen wird.

Beispiele

Im D3D12HelloTriangle-Beispiel wird ID3D12CommandAllocator::Reset wie folgt verwendet:

D3D12_VIEWPORT m_viewport;
D3D12_RECT m_scissorRect;
ComPtr<IDXGISwapChain3> m_swapChain;
ComPtr<ID3D12Device> m_device;
ComPtr<ID3D12Resource> m_renderTargets[FrameCount];
ComPtr<ID3D12CommandAllocator> m_commandAllocator;
ComPtr<ID3D12CommandQueue> m_commandQueue;
ComPtr<ID3D12RootSignature> m_rootSignature;
ComPtr<ID3D12DescriptorHeap> m_rtvHeap;
ComPtr<ID3D12PipelineState> m_pipelineState;
ComPtr<ID3D12GraphicsCommandList> m_commandList;
UINT m_rtvDescriptorSize;

// Command list allocators can only be reset when the associated 
// command lists have finished execution on the GPU; apps should use 
// fences to determine GPU execution progress.
ThrowIfFailed(m_commandAllocator->Reset());

// However, when ExecuteCommandList() is called on a particular command 
// list, that command list can then be reset at any time and must be before 
// re-recording.
ThrowIfFailed(m_commandList->Reset(m_commandAllocator.Get(), m_pipelineState.Get()));

// Set necessary state.
m_commandList->SetGraphicsRootSignature(m_rootSignature.Get());
m_commandList->RSSetViewports(1, &m_viewport);
m_commandList->RSSetScissorRects(1, &m_scissorRect);

// Indicate that the back buffer will be used as a render target.
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));

CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle(m_rtvHeap->GetCPUDescriptorHandleForHeapStart(), m_frameIndex, m_rtvDescriptorSize);
m_commandList->OMSetRenderTargets(1, &rtvHandle, FALSE, nullptr);

// Record commands.
const float clearColor[] = { 0.0f, 0.2f, 0.4f, 1.0f };
m_commandList->ClearRenderTargetView(rtvHandle, clearColor, 0, nullptr);
m_commandList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
m_commandList->IASetVertexBuffers(0, 1, &m_vertexBufferView);
m_commandList->DrawInstanced(3, 1, 0, 0);

// Indicate that the back buffer will now be used to present.
m_commandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(m_renderTargets[m_frameIndex].Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT));

ThrowIfFailed(m_commandList->Close());

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

ID3D12CommandAllocator