ID3D12CommandAllocator::Reset-Methode (d3d12.h)
Gibt an, dass der Speicher, der dem Befehlsverknöpfer zugeordnet ist, wiederverwenden soll.
Syntax
HRESULT Reset();
Rückgabewert
Typ: HRESULT-
Diese Methode gibt E_FAIL zurück, wenn eine aktiv aufgezeichnete Befehlsliste vorhanden ist, die auf den Befehlszuordnungsserver verweist. Die Debugebene gibt in diesem Fall auch einen Fehler aus.
Weitere mögliche Rückgabewerte finden Sie unter Direct3D 12-Rückgabecodes.
Bemerkungen
Ihre App ruft Zurücksetzen auf, um den Speicher wieder zu verwenden, der einem Befehlsverknappung zugeordnet ist. Von diesem Aufruf an Resetwird von der Laufzeit und dem Treiber davon ausgegangen, dass die Grafikverarbeitungseinheit (GPU) keine Befehlslisten mehr ausführt, die Befehle mit dem Befehlsverteiler aufgezeichnet haben. Daher sollten Sie sicherstellen, dass Sie Reset erst aufrufen, wenn die GPU die Ausführung von Befehlslisten abgeschlossen hat, die dem Allocator zugeordnet sind.
Es ist nicht definiertes Verhalten, um Reset für einen Befehlszuordnungsempfänger aufzurufen, während eine Befehlsliste noch ausgeführt wird.
Die Debugebene gibt eine Warnung aus, wenn sie nicht nachweisen kann, dass keine GPU-Verweise auf Befehlslisten vorhanden sind, die über aufgezeichnete Befehle im Allocator verfügen.
Die Debugebene gibt einen Fehler aus, wenn Zurücksetzen gleichzeitig von mehreren Threads (auf demselben Allocator-Objekt) aufgerufen wird.
Beispiele
Im beispiel D3D12HelloTriangle 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- | Fenster |
Header- | d3d12.h |
Library | D3D12.lib |
DLL- | D3D12.dll |