Metodo ID3D12CommandAllocator::Reset (d3d12.h)

Indica di riutilizzare la memoria associata all'allocatore del comando.

Sintassi

HRESULT Reset();

Valore restituito

Tipo: HRESULT

Questo metodo restituisce E_FAIL se è presente un elenco di comandi di registrazione attiva che fa riferimento all'allocatore del comando. Il livello di debug genererà anche un errore in questo caso.
Per altri possibili valori restituiti, vedere Codici restituiti Direct3D 12 .

Commenti

Le app chiamano Reset per riutilizzare la memoria associata a un allocatore di comandi. Da questa chiamata a Reimposta, il runtime e il driver determinano che l'unità di elaborazione grafica (GPU) non esegue più elenchi di comandi che hanno registrato comandi con l'allocatore di comando.

A differenza di ID3D12GraphicsCommandList::Reset, non è consigliabile chiamare Reset sull'allocatore dei comandi mentre è ancora in esecuzione un elenco di comandi.

Il livello di debug genererà un avviso se non è possibile dimostrare che non sono presenti riferimenti GPU in sospeso agli elenchi di comandi con comandi registrati nell'allocatore.

Il livello di debug genererà un errore se Reset viene chiamato contemporaneamente da più thread (nello stesso oggetto allocatore).

Esempio

L'esempio D3D12HelloTriangle usa ID3D12CommandAllocator::Reset come segue:

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());

Fare riferimento al codice di esempio nel riferimento D3D12.

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione d3d12.h
Libreria D3D12.lib
DLL D3D12.dll

Vedi anche

ID3D12CommandAllocator