Partager via


ID3D12Device ::CreateDescriptorHeap, méthode (d3d12.h)

Crée un objet de tas de descripteur.

Syntaxe

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

Paramètres

[in] pDescriptorHeapDesc

Type : const D3D12_DESCRIPTOR_HEAP_DESC*

Pointeur vers une structure D3D12_DESCRIPTOR_HEAP_DESC qui décrit le tas.

riid

Type : REFIID

Identificateur global unique (GUID) pour l’interface de segment de segment de descripteur. Voir les remarques. Paramètre d’entrée.

[out] ppvHeap

Type : void**

Pointeur vers un bloc de mémoire qui reçoit un pointeur vers le tas du descripteur. ppvHeap peut être NULL pour activer les tests de capacité. Lorsque ppvHeap a la valeur NULL, aucun objet n’est créé et S_FALSE est retourné lorsque pDescriptorHeapDesc est valide.

Valeur retournée

Type : HRESULT

Cette méthode retourne E_OUTOFMEMORY si la mémoire est insuffisante pour créer l’objet de tas de descripteur. Consultez les codes de retour Direct3D 12 pour obtenir d’autres valeurs de retour possibles.

Remarques

Le REFIID, ou GUID, de l’interface du tas de descripteur peut être obtenu à l’aide de la macro __uuidof(). Par exemple, __uuidof(ID3D12DescriptorHeap) obtient le GUID de l’interface sur un tas de descripteur.

Examples

L’exemple D3D12HelloWorld utilise ID3D12Device ::CreateDescriptorHeap comme suit :

Décrivez et créez un tas de descripteur de descripteur de vue cible de rendu (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);
    }

Reportez-vous à l’exemple de code dans la référence D3D12.

Spécifications

Requirement Valeur
plateforme cible Fenêtres
Header d3d12.h
Library D3D12.lib
DLL D3D12.dll

Voir aussi

ID3D12Device