ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable method
Sets a descriptor table into the graphics root signature.
Syntax
void SetGraphicsRootDescriptorTable( [in] UINT RootParameterIndex, [in] D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor );
Parameters
- RootParameterIndex [in]
-
Type: UINT
The slot number for binding.
- BaseDescriptor [in]
-
Type: D3D12_GPU_DESCRIPTOR_HANDLE
A GPU_descriptor_handle object for the base descriptor to set.
Return value
This method does not return a value.
Examples
The D3D12Bundles sample uses ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable as follows:
void FrameResource::PopulateCommandList(ID3D12GraphicsCommandList* pCommandList, ID3D12PipelineState* pPso1, ID3D12PipelineState* pPso2, UINT frameResourceIndex, UINT numIndices, D3D12_INDEX_BUFFER_VIEW* pIndexBufferViewDesc, D3D12_VERTEX_BUFFER_VIEW* pVertexBufferViewDesc, ID3D12DescriptorHeap* pCbvSrvDescriptorHeap, UINT cbvSrvDescriptorSize, ID3D12DescriptorHeap* pSamplerDescriptorHeap, ID3D12RootSignature* pRootSignature) { // If the root signature matches the root signature of the caller, then // bindings are inherited, otherwise the bind space is reset. pCommandList->SetGraphicsRootSignature(pRootSignature); ID3D12DescriptorHeap* ppHeaps[] = { pCbvSrvDescriptorHeap, pSamplerDescriptorHeap }; pCommandList->SetDescriptorHeaps(_countof(ppHeaps), ppHeaps); pCommandList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); pCommandList->IASetIndexBuffer(pIndexBufferViewDesc); pCommandList->IASetVertexBuffers(0, 1, pVertexBufferViewDesc); pCommandList->SetGraphicsRootDescriptorTable(0, pCbvSrvDescriptorHeap->GetGPUDescriptorHandleForHeapStart()); pCommandList->SetGraphicsRootDescriptorTable(1, pSamplerDescriptorHeap->GetGPUDescriptorHandleForHeapStart()); // Calculate the descriptor offset due to multiple frame resources. // 1 SRV + how many CBVs we have currently. UINT frameResourceDescriptorOffset = 1 + (frameResourceIndex * m_cityRowCount * m_cityColumnCount); CD3DX12_GPU_DESCRIPTOR_HANDLE cbvSrvHandle(pCbvSrvDescriptorHeap->GetGPUDescriptorHandleForHeapStart(), frameResourceDescriptorOffset, cbvSrvDescriptorSize); BOOL usePso1 = TRUE; for (UINT i = 0; i < m_cityRowCount; i++) { for (UINT j = 0; j < m_cityColumnCount; j++) { // Alternate which PSO to use; the pixel shader is different on // each just as a PSO setting demonstration. pCommandList->SetPipelineState(usePso1 ? pPso1 : pPso2); usePso1 = !usePso1; // Set this city's CBV table and move to the next descriptor. pCommandList->SetGraphicsRootDescriptorTable(2, cbvSrvHandle); cbvSrvHandle.Offset(cbvSrvDescriptorSize); pCommandList->DrawIndexedInstanced(numIndices, 1, 0, 0, 0); } } }
See Example Code in the D3D12 Reference.
Requirements
|
Header |
|
|---|---|
|
Library |
|
|
DLL |
|
See also
Show: