Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Erstellt ein Gerät, das den Anzeigeadapter darstellt.
Syntax
HRESULT D3D12CreateDevice(
[in, optional] IUnknown *pAdapter,
D3D_FEATURE_LEVEL MinimumFeatureLevel,
[in] REFIID riid,
[out, optional] void **ppDevice
);
Die Parameter
[in, optional] pAdapter
Typ: IUnknown*
Ein Zeiger auf den Grafikkartenadapter, der beim Erstellen eines Geräts verwendet werden soll. Übergeben Sie NULL , um den Standardadapter zu verwenden. Dabei handelt es sich um den ersten Adapter, der von IDXGIFactory1::EnumAdapters aufgezählt wird.
MinimumFeatureLevel
Typ: D3D_FEATURE_LEVEL
Die mindeste D3D_FEATURE_LEVEL für die erfolgreiche Geräteerstellung erforderlich.
[in] riid
Typ: REFIID
Die GUID (Globally Unique Identifier) für die Geräteschnittstelle. Dieser Parameter und ppDevice können mit dem einzelnen Makro IID_PPV_ARGS adressiert werden.
[out, optional] ppDevice
Typ: void**
Ein Zeiger auf einen Speicherblock, der einen Zeiger auf das Gerät empfängt. Übergeben Sie NULL , um zu testen, ob die Geräteerstellung erfolgreich wäre, aber nicht tatsächlich das Gerät zu erstellen. Wenn NULL übergeben wird und die Geräteerstellung erfolgreich war, wird S_FALSE zurückgegeben.
Rückgabewert
Typ: HRESULT
Diese Methode kann einen der Direct3D 12-Rückgabecodes zurückgeben.
Mögliche Rückgabewerte sind die für CreateDXGIFactory1 und IDXGIFactory::EnumAdapters dokumentierten Werte.
Wenn ppDeviceNULL ist und die Funktion erfolgreich ist, wird S_FALSE zurückgegeben, anstatt S_OK.
Bemerkungen
Direct3D 12-Geräte sind Singletons pro Adapter. Wenn bereits ein Direct3D 12-Gerät im aktuellen Prozess für einen bestimmten Adapter vorhanden ist, gibt ein nachfolgenden Aufruf von D3D12CreateDevice das vorhandene Gerät zurück. Wenn sich das aktuelle Direct3D 12-Gerät in einem entfernten Zustand befindet (d. h. ID3D12Device::GetDeviceRemovedReason gibt ein fehlerhaftes HRESULT zurück), schlägt D3D12CreateDevice fehl, anstatt das vorhandene Gerät zurückzugeben. Die Gleiches von zwei Adaptern (d. h. sie haben dieselbe Identität) wird durch den Vergleich ihrer LUIDs und nicht ihrer Zeiger bestimmt.
Verwenden Sie den folgenden Code, um sicherzustellen, dass sie den ersten Adapter aufnehmen, der D3D12 unterstützt.
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();
}
}
Die Funktionssignatur PFN_D3D12_CREATE_DEVICE wird als Typedef bereitgestellt, sodass Sie dynamische Verknüpfungstechniken (GetProcAddress) anstelle der statischen Verknüpfung verwenden können.
Die REFIID oder GUID der Schnittstelle zu einem Gerät kann mithilfe des __uuidof() Makros abgerufen werden.
Beispielsweise __uuidofruft (ID3D12Device) die GUID der Schnittstelle zu einem Gerät ab.
Examples
Erstellen Sie ein hardwarebasiertes Gerät, es sei denn, sie müssen ein WARP-Softwaregerät erstellen.
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)
));
}
Verweisen Sie auf den Beispielcode in der D3D12-Referenz.
Anforderungen
| Anforderung | Wert |
|---|---|
| Zielplattform | Fenster |
| Header | d3d12.h |
| Library | D3D12.lib |
| DLL | D3D12.dll |