Bagikan melalui


ID3D12CommandAllocator::Reset method (d3d12.h)

Menunjukkan untuk menggunakan kembali memori yang terkait dengan alokator perintah.

Sintaksis

HRESULT Reset();

Mengembalikan nilai

Jenis: HRESULT

Metode ini mengembalikan E_FAIL jika ada daftar perintah perekaman aktif yang mereferensikan alokator perintah. Lapisan debug juga akan mengeluarkan kesalahan dalam kasus ini.
Lihat Direct3D 12 Mengembalikan Kode untuk kemungkinan nilai pengembalian lainnya.

Komentar

Aplikasi Anda memanggil Reset untuk menggunakan kembali memori yang terkait dengan alokator perintah. Dari panggilan ini ke Reset, runtime dan driver mengasumsikan bahwa unit pemrosesan grafis (GPU) tidak lagi menjalankan daftar perintah apa pun yang telah merekam perintah dengan alokator perintah. Jadi Anda harus memastikan bahwa Anda tidak memanggil Reset sampai GPU selesai menjalankan daftar perintah yang terkait dengan alokator.

Ini adalah perilaku yang tidak terdefinisi untuk memanggil Reset pada alokator perintah saat memiliki daftar perintah yang masih dijalankan.

Lapisan debug akan mengeluarkan peringatan jika tidak dapat membuktikan bahwa tidak ada referensi GPU yang tertunda ke daftar perintah yang telah merekam perintah di alokator.

Lapisan debug akan mengeluarkan kesalahan jika Reset dipanggil secara bersamaan oleh beberapa utas (pada objek alokator yang sama).

Contoh

Sampel D3D12HelloTriangle menggunakan ID3D12CommandAllocator::Reset sebagai berikut:

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

Lihat Kode Contoh diReferensi D3D12 .

Persyaratan

Syarat Nilai
Platform Target Windows
Header d3d12.h
Pustaka D3D12.lib
DLL D3D12.dll

Lihat juga

ID3D12CommandAllocator