Método ID3D12CommandAllocator::Reset (d3d12.h)
Indica que se va a volver a usar la memoria asociada al asignador de comandos.
Sintaxis
HRESULT Reset();
Valor devuelto
Este método devuelve E_FAIL si hay una lista de comandos de grabación activa que hace referencia al asignador de comandos. La capa de depuración también emitirá un error en este caso.
Consulte códigos de retorno de Direct3D 12 para ver otros valores devueltos posibles.
Observaciones
La aplicación llama a Restablecer para volver a usar la memoria asociada a un asignador de comandos. Desde esta llamada a Restablecer, el entorno de ejecución y el controlador asumen que la unidad de procesamiento de gráficos (GPU) ya no está ejecutando ninguna lista de comandos que tengan comandos registrados con el asignador de comandos. Por lo tanto, debe asegurarse de no llamar a Restablecer hasta que la GPU haya terminado de ejecutar listas de comandos asociadas al asignador.
Es un comportamiento indefinido llamar a Restablecer en un asignador de comandos mientras tiene una lista de comandos que todavía se está ejecutando.
La capa de depuración emitirá una advertencia si no puede demostrar que no hay referencias pendientes de GPU a listas de comandos que tienen comandos registrados en el asignador.
La capa de depuración emitirá un error si varios subprocesos llaman simultáneamente a Reset (en el mismo objeto de asignador).
Ejemplos
El ejemplo de D3D12HelloTrian gle usa ID3D12CommandAllocator::Reset de la siguiente manera:
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());
Consulte el código de ejemplo de en la referencia D3D12.
Requisitos
Requisito | Valor |
---|---|
de la plataforma de destino de |
Windows |
encabezado de |
d3d12.h |
biblioteca de |
D3D12.lib |
DLL de |
D3D12.dll |