Compartir a través de


Método ID3D12Device::CreateDescriptorHeap (d3d12.h)

Crea un objeto de montón de descriptores.

Sintaxis

HRESULT CreateDescriptorHeap(
  [in]  const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,
        REFIID                           riid,
  [out] void                             **ppvHeap
);

Parámetros

[in] pDescriptorHeapDesc

Tipo: const D3D12_DESCRIPTOR_HEAP_DESC*

Puntero a una estructura D3D12_DESCRIPTOR_HEAP_DESC que describe el montón.

riid

Tipo: REFIID

Identificador único global (GUID) para la interfaz del montón de descriptores. Vea comentarios. Parámetro de entrada.

[out] ppvHeap

Tipo: ** void

Puntero a un bloque de memoria que recibe un puntero al montón del descriptor. ppvHeap puede ser NULL, para habilitar las pruebas de funcionalidad. Cuando ppvHeap es NULL, no se creará ningún objeto y se devolverá S_FALSE cuando pDescriptorHeapDesc.

Valor devuelto

Tipo: HRESULT

Este método devuelve E_OUTOFMEMORY si no hay memoria suficiente para crear el objeto del montón de descriptores. Consulte códigos de retorno de Direct3D 12 para ver otros valores devueltos posibles.

Observaciones

El REFIID, o GUID, de la interfaz al montón de descriptores se puede obtener mediante la macro __uuidof(). Por ejemplo, __uuidof(ID3D12DescriptorHeap) obtendrá el GUID de de la interfaz en un montón de descriptores.

Ejemplos

El ejemplo D3D12HelloWorld usa ID3D12Device::CreateDescriptorHeap de la siguiente manera:

Describir y crear un montón de descriptores de vista de destino de representación (RTV).

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

    m_rtvDescriptorSize = m_device->GetDescriptorHandleIncrementSize(D3D12_DESCRIPTOR_HEAP_TYPE_RTV);
}

// Create frame resources.
{
    CD3DX12_CPU_DESCRIPTOR_HANDLE rtvHandle(m_rtvHeap->GetCPUDescriptorHandleForHeapStart());

    // Create a RTV 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);
    }

Consulte el código de ejemplo de en la referencia D3D12.

Requisitos

Requisito Valor
de la plataforma de destino de Windows
encabezado de d3d12.h
biblioteca de D3D12.lib
DLL de D3D12.dll

Consulte también

ID3D12Device