ID3D12GraphicsCommandList::SetGraphicsRootConstantBufferView method
Sets a CPU descriptor handle for the constant buffer in the graphics root signature.
Syntax
void SetGraphicsRootConstantBufferView( [in] UINT RootParameterIndex, [in] D3D12_GPU_VIRTUAL_ADDRESS BufferLocation );
Parameters
- RootParameterIndex [in]
-
Type: UINT
The slot number for binding.
- BufferLocation [in]
-
Type: D3D12_GPU_VIRTUAL_ADDRESS
The GPU virtual address of the constant buffer. D3D12_GPU_VIRTUAL_ADDRESS is a typedef'd alias of UINT64.
Return value
This method does not return a value.
Examples
The D3D12nBodyGravity sample uses ID3D12GraphicsCommandList::SetGraphicsRootConstantBufferView as follows:
// Fill the command list with all the render commands and dependent state. void D3D12nBodyGravity::PopulateCommandList() { // 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_commandAllocators[m_frameIndex]->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_commandAllocators[m_frameIndex].Get(), m_pipelineState.Get())); // Set necessary state. m_commandList->SetPipelineState(m_pipelineState.Get()); m_commandList->SetGraphicsRootSignature(m_rootSignature.Get()); m_commandList->SetGraphicsRootConstantBufferView(RootParameterCB, m_constantBufferGS->GetGPUVirtualAddress() + m_frameIndex * sizeof(ConstantBufferGS)); ID3D12DescriptorHeap* ppHeaps[] = { m_srvUavHeap.Get() }; m_commandList->SetDescriptorHeaps(_countof(ppHeaps), ppHeaps); m_commandList->IASetVertexBuffers(0, 1, &m_vertexBufferView); m_commandList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_POINTLIST); 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.0f, 0.1f, 0.0f }; m_commandList->ClearRenderTargetView(rtvHandle, clearColor, 0, nullptr); // Render the particles. float viewportHeight = static_cast<float>(static_cast<UINT>(m_viewport.Height) / m_heightInstances); float viewportWidth = static_cast<float>(static_cast<UINT>(m_viewport.Width) / m_widthInstances); for (UINT n = 0; n < ThreadCount; n++) { const UINT srvIndex = n + (m_srvIndex[n] == 0 ? SrvParticlePosVelo0 : SrvParticlePosVelo1); D3D12_VIEWPORT viewport; viewport.TopLeftX = (n % m_widthInstances) * viewportWidth; viewport.TopLeftY = (n / m_widthInstances) * viewportHeight; viewport.Width = viewportWidth; viewport.Height = viewportHeight; viewport.MinDepth = D3D12_MIN_DEPTH; viewport.MaxDepth = D3D12_MAX_DEPTH; m_commandList->RSSetViewports(1, &viewport); CD3DX12_GPU_DESCRIPTOR_HANDLE srvHandle(m_srvUavHeap->GetGPUDescriptorHandleForHeapStart(), srvIndex, m_srvUavDescriptorSize); m_commandList->SetGraphicsRootDescriptorTable(RootParameterSRV, srvHandle); m_commandList->DrawInstanced(ParticleCount, 1, 0, 0); } m_commandList->RSSetViewports(1, &m_viewport); // 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()); }
See Example Code in the D3D12 Reference.
Requirements
|
Header |
|
|---|---|
|
Library |
|
|
DLL |
|
See also
Show: