Método ID3D12Device::GetDescriptorHandleIncrementSize (d3d12.h)
Obtiene el tamaño del incremento del identificador para el tipo determinado de montón de descriptores. Este valor se usa normalmente para incrementar un identificador en una matriz de descriptores por la cantidad correcta.
Sintaxis
UINT GetDescriptorHandleIncrementSize(
[in] D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType
);
Parámetros
[in] DescriptorHeapType
Valor con tipo D3D12_DESCRIPTOR_HEAP_TYPE que especifica el tipo de montón de descriptores para el que se obtiene el tamaño del incremento del identificador.
Valor devuelto
Devuelve el tamaño del incremento del identificador para el tipo determinado de montón de descriptores, incluido el relleno necesario.
Comentarios
El tamaño del descriptor devuelto por este método se usa como una entrada para las estructuras auxiliares CD3DX12_CPU_DESCRIPTOR_HANDLE y CD3DX12_GPU_DESCRIPTOR_HANDLE.
Ejemplos
El ejemplo D3D12PredicationQueries usa ID3D12Device::GetDescriptorHandleIncrementSize de la siguiente manera:
Cree el montón de descriptores para los recursos. La m_rtvDescriptorSize
variable almacena el tamaño del incremento del descriptor de vista de destino de representación y se usa en la sección Crear recursos de marco del código.
// Create descriptor heaps.
{
// Describe and create a render target view (RTV) descriptor heap.
D3D12_DESCRIPTOR_HEAP_DESC rtvHeapDesc = {};
rtvHeapDesc.NumDescriptors = FrameCount;
rtvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_RTV;
rtvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;
ThrowIfFailed(m_device->CreateDescriptorHeap(&rtvHeapDesc, IID_PPV_ARGS(&m_rtvHeap)));
// Describe and create a depth stencil view (DSV) descriptor heap.
D3D12_DESCRIPTOR_HEAP_DESC dsvHeapDesc = {};
dsvHeapDesc.NumDescriptors = 1;
dsvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_DSV;
dsvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_NONE;
ThrowIfFailed(m_device->CreateDescriptorHeap(&dsvHeapDesc, IID_PPV_ARGS(&m_dsvHeap)));
// Describe and create a constant buffer view (CBV) descriptor heap.
D3D12_DESCRIPTOR_HEAP_DESC cbvHeapDesc = {};
cbvHeapDesc.NumDescriptors = CbvCountPerFrame * FrameCount;
cbvHeapDesc.Type = D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV;
cbvHeapDesc.Flags = D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE;
ThrowIfFailed(m_device->CreateDescriptorHeap(&cbvHeapDesc, IID_PPV_ARGS(&m_cbvHeap)));
// Describe and create a heap for occlusion queries.
D3D12_QUERY_HEAP_DESC queryHeapDesc = {};
queryHeapDesc.Count = 1;
queryHeapDesc.Type = D3D12_QUERY_HEAP_TYPE_OCCLUSION;
ThrowIfFailed(m_device->CreateQueryHeap(&queryHeapDesc, IID_PPV_ARGS(&m_queryHeap)));
m_rtvDescriptorSize = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
m_cbvSrvDescriptorSize = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV);
}
// Create frame resources.
{
CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle(m_rtvHeap->GetCPUDescriptorHandleForHeapStart());
// Create a RTV and a command allocator for each frame.
for (UINT n = 0; n < FrameCount; n++)
{
ThrowIfFailed(m_swapChain->GetBuffer(n, IID_PPV_ARGS(&m_renderTargets[n])));
m_device->CreateRenderTargetView(m_renderTargets[n].Get(), nullptr, rtvHandle);
rtvHandle.Offset(1, m_rtvDescriptorSize);
ThrowIfFailed(m_device->CreateCommandAllocator(D3D12_COMMAND_LIST_TYPE_DIRECT, IID_PPV_ARGS(&m_commandAllocators[n])));
}
}
Consulte el código de ejemplo en la referencia D3D12.
Requisitos
Plataforma de destino | Windows |
Encabezado | d3d12.h |
Library | D3D12.lib |
Archivo DLL | D3D12.dll |