Partager via


D3D12CreateDevice, fonction (d3d12.h)

Crée un appareil qui représente l’adaptateur d’affichage.

Syntaxe

HRESULT D3D12CreateDevice(
  [in, optional]  IUnknown          *pAdapter,
                  D3D_FEATURE_LEVEL MinimumFeatureLevel,
  [in]            REFIID            riid,
  [out, optional] void              **ppDevice
);

Paramètres

[in, optional] pAdapter

Type : IUnknown*

Pointeur vers la carte vidéo à utiliser lors de la création d’un appareil. Passez NULL pour utiliser l’adaptateur par défaut, qui est le premier adaptateur énuméré par IDXGIFactory1 ::EnumAdapters.

Note Ne mélangez pas l’utilisation de DXGI 1.0 (IDXGIFactory) et DXGI 1.1 (IDXGIFactory1) dans une application. Utilisez IDXGIFactory ou IDXGIFactory1, mais pas les deux dans une application.
 

MinimumFeatureLevel

Type : D3D_FEATURE_LEVEL

La D3D_FEATURE_LEVEL minimale requise pour la création réussie de l’appareil.

[in] riid

Type : REFIID

Identificateur global unique (GUID) de l’interface de l’appareil. Ce paramètre et ppDevice peuvent être traités avec la macro unique IID_PPV_ARGS.

[out, optional] ppDevice

Type : void**

Pointeur vers un bloc de mémoire qui reçoit un pointeur vers l’appareil. Passez la valeur NULL pour tester si la création de l’appareil réussit, mais pour ne pas réellement créer l’appareil. Si la valeur NULL est passée et que la création de l’appareil réussit, S_FALSE est retournée.

Valeur retournée

Type : HRESULT

Cette méthode peut retourner l’un des codes de retour Direct3D 12.

Les valeurs de retour possibles incluent celles documentées pour CreateDXGIFactory1 et IDXGIFactory ::EnumAdapters.

Si ppDevice a la valeur NULL et que la fonction réussit, S_FALSE est retournée, plutôt que S_OK.

Remarques

Les appareils Direct3D 12 sont des singletons par adaptateur. Si un appareil Direct3D 12 existe déjà dans le processus actuel pour une carte donnée, un appel ultérieur à D3D12CreateDevice retourne l’appareil existant. Si l’appareil Direct3D 12 actuel est dans un état supprimé (autrement dit, ID3D12Device ::GetDeviceRemovedReason retourne un HRESULT défaillant), D3D12CreateDevice échoue au lieu de retourner l’appareil existant. La sameness de deux adaptateurs (autrement dit, ils ont la même identité) est déterminé en comparant leurs LUID, et non leurs pointeurs.

Pour être sûr de récupérer le premier adaptateur prenant en charge D3D12, utilisez le code suivant.

void GetHardwareAdapter(IDXGIFactory4* pFactory, IDXGIAdapter1** ppAdapter)
{
    *ppAdapter = nullptr;
    for (UINT adapterIndex = 0; ; ++adapterIndex)
    {
        IDXGIAdapter1* pAdapter = nullptr;
        if (DXGI_ERROR_NOT_FOUND == pFactory->EnumAdapters1(adapterIndex, &pAdapter))
        {
            // No more adapters to enumerate.
            break;
        } 

        // Check to see if the adapter supports Direct3D 12, but don't create the
        // actual device yet.
        if (SUCCEEDED(D3D12CreateDevice(pAdapter, D3D_FEATURE_LEVEL_11_0, _uuidof(ID3D12Device), nullptr)))
        {
            *ppAdapter = pAdapter;
            return;
        }
        pAdapter->Release();
    }
}

La signature de fonction PFN_D3D12_CREATE_DEVICE est fournie en tant que typedef, afin que vous puissiez utiliser des techniques de liaison dynamique (GetProcAddress) au lieu de lier statiquement.

Le REFIID, ou GUID, de l’interface d’un appareil peut être obtenu à l’aide de la __uuidof() macro. Par exemple, __uuidof(ID3D12Device) obtient le GUID de l’interface sur un appareil.

Examples

Créez un appareil basé sur du matériel, sauf si vous demandez à créer un appareil logiciel WARP.

ComPtr<IDXGIFactory4> factory;
ThrowIfFailed(CreateDXGIFactory1(IID_PPV_ARGS(&factory)));

if (m_useWarpDevice)
{
    ComPtr<IDXGIAdapter> warpAdapter;
    ThrowIfFailed(factory->EnumWarpAdapter(IID_PPV_ARGS(&warpAdapter)));

    ThrowIfFailed(D3D12CreateDevice(
        warpAdapter.Get(),
        D3D_FEATURE_LEVEL_11_0,
        IID_PPV_ARGS(&m_device)
        ));
}
else
{
    ComPtr<IDXGIAdapter1> hardwareAdapter;
    GetHardwareAdapter(factory.Get(), &hardwareAdapter);

    ThrowIfFailed(D3D12CreateDevice(
        hardwareAdapter.Get(),
        D3D_FEATURE_LEVEL_11_0,
        IID_PPV_ARGS(&m_device)
        ));
}

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

Fonctions principales

Exemples de travail