METODE ID3D12GraphicsCommandList::ExecuteBundle (d3d12.h)
Menjalankan bundel.
Sintaks
void ExecuteBundle(
[in] ID3D12GraphicsCommandList *pCommandList
);
Parameter
[in] pCommandList
Jenis: ID3D12GraphicsCommandList*
Menentukan ID3D12GraphicsCommandList yang menentukan bundel yang akan dijalankan.
Nilai kembali
Tidak ada
Keterangan
Bundel mewarisi semua status dari daftar perintah induk tempat ExecuteBundle dipanggil, kecuali objek status alur dan topologi primitif. Semua status yang diatur dalam bundel akan memengaruhi status daftar perintah induk. Perhatikan bahwa ExecuteBundle bukan operasi predikat.
Validasi runtime
Runtime akan memvalidasi bahwa "callee" adalah bundel dan bahwa "pemanggil" adalah daftar perintah langsung. Runtime juga akan memvalidasi bahwa bundel telah ditutup. Jika kontrak dilanggar, runtime akan diam-diam menjatuhkan panggilan. Kegagalan validasi akan mengakibatkan penutupan E_INVALIDARG kembali.Lapisan debug
Lapisan debug akan mengeluarkan peringatan dalam kasus yang sama di mana runtime akan gagal. Lapisan debug akan mengeluarkan peringatan jika predikat diatur saat ExecuteCommandList dipanggil. Selain itu, lapisan debug akan mengeluarkan kesalahan jika mendeteksi bahwa referensi sumber daya apa pun oleh daftar perintah telah dihancurkan.Lapisan debug juga akan memvalidasi bahwa alokator perintah yang terkait dengan bundel belum direset sejak Tutup dipanggil pada daftar perintah. Validasi ini terjadi pada waktu ExecuteBundle , dan ketika daftar perintah induk dijalankan pada antrean perintah.
Contoh
Sampel D3D12Bundles menggunakan ID3D12GraphicsCommandList::ExecuteBundle sebagai berikut:
void D3D12Bundles::PopulateCommandList(FrameResource* pFrameResource)
{
// 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_pCurrentFrameResource->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_pCurrentFrameResource->m_commandAllocator.Get(), m_pipelineState1.Get()));
// Set necessary state.
m_commandList->SetGraphicsRootSignature(m_rootSignature.Get());
ID3D12DescriptorHeap* ppHeaps[] = { m_cbvSrvHeap.Get(), m_samplerHeap.Get() };
m_commandList->SetDescriptorHeaps(_countof(ppHeaps), ppHeaps);
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);
CD3DX12_CPU_DESCRIPTOR_HANDLE dsvHandle(m_dsvHeap->GetCPUDescriptorHandleForHeapStart());
m_commandList->OMSetRenderTargets(1, &rtvHandle, FALSE, &dsvHandle);
// Record commands.
const float clearColor[] = { 0.0f, 0.2f, 0.4f, 1.0f };
m_commandList->ClearRenderTargetView(rtvHandle, clearColor, 0, nullptr);
m_commandList->ClearDepthStencilView(m_dsvHeap->GetCPUDescriptorHandleForHeapStart(), D3D12_CLEAR_FLAG_DEPTH, 1.0f, 0, 0, nullptr);
if (UseBundles)
{
// Execute the prebuilt bundle.
m_commandList->ExecuteBundle(pFrameResource->m_bundle.Get());
}
else
{
// Populate a new command list.
pFrameResource->PopulateCommandList(m_commandList.Get(), m_pipelineState1.Get(), m_pipelineState2.Get(), m_currentFrameResourceIndex, m_numIndices, &m_indexBufferView,
&m_vertexBufferView, m_cbvSrvHeap.Get(), m_cbvSrvDescriptorSize, m_samplerHeap.Get(), m_rootSignature.Get());
}
// 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 Contoh Kode dalam Referensi D3D12.
Persyaratan
Persyaratan | Nilai |
---|---|
Target Platform | Windows |
Header | d3d12.h |
Pustaka | D3d12.lib |
DLL | D3d12.dll |