Condividi tramite


Metodo ID3D12CommandAllocator::Reset (d3d12.h)

Indica di riutilizzare la memoria associata all'allocatore di comandi.

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 dei comandi. In questo caso, il livello di debug genererà anche un errore.
Per altri possibili valori restituiti, vedere Codici restituiti Direct3D 12.

Osservazioni

L'app chiama Reset per riutilizzare la memoria associata a un allocatore di comandi. Da questa chiamata a Reset, il runtime e il driver presuppongono che l'unità di elaborazione grafica (GPU) non eselabori più gli elenchi di comandi che hanno registrato comandi con l'allocatore di comandi. È quindi necessario assicurarsi di non chiamare Reset finché la GPU non viene completata l'esecuzione degli elenchi di comandi associati all'allocatore.

È un comportamento non definito chiamare Reset in un allocatore di 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 simultaneamente da più thread (nello stesso oggetto allocatore).

Esempi

L'esempio di 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 nell'di riferimento D3D12 .

Fabbisogno

Requisito Valore
piattaforma di destinazione Finestre
intestazione d3d12.h
libreria D3D12.lib
dll D3D12.dll

Vedere anche

ID3D12CommandAllocator