Gewusst wie: Abrufen der Gerätefeatureebene

In diesen Themen wird gezeigt, wie Sie die höchste Featureebene erhalten, die von einem Gerät unterstützt wird. Direct3D 11-Geräte unterstützen einen festen Satz von Featureebenen, die in der D3D_FEATURE_LEVEL-Enumeration definiert sind. Wenn Sie die höchste Featureebene kennen, die von einem Gerät unterstützt wird, können Sie Codepfade ausführen, die für dieses Gerät geeignet sind.

So rufen Sie die Gerätefeatureebene ab

  1. Rufen Sie entweder die D3D11CreateDevice-Funktion oder die D3D11CreateDeviceAndSwapChain-Funktionen auf, während sie NULL für den ppDevice-Parameter angeben. Sie können dies vor der Geräteerstellung tun.

    - oder -

    Rufen Sie ID3D11Device::GetFeatureLevel nach der Geräteerstellung auf.

  2. Überprüfen Sie den Wert der zurückgegebenen D3D_FEATURE_LEVEL-Aufzählung aus dem letzten Schritt, um die unterstützte Featureebene zu ermitteln.

Im folgenden Codebeispiel wird veranschaulicht, wie Sie die höchste unterstützte Featureebene ermitteln, indem Sie die Funktion D3D11CreateDevice aufrufen. D3D11CreateDevice speichert die höchste unterstützte Featureebene in der FeatureLevel-Variable. Sie können diesen Code verwenden, um den Wert des D3D_FEATURE_LEVEL aufgezählten Typs zu untersuchen, den D3D11CreateDevice zurückgibt. Beachten Sie, dass dieser Code alle Featureebenen explizit auflistet (für Direct3D 11.1 und Direct3D 11.2).

Hinweis

Wenn die Direct3D 11.1-Laufzeit auf dem Computer vorhanden ist und pFeatureLevels auf NULL festgelegt ist, erstellt diese Funktion kein D3D_FEATURE_LEVEL_11_1 Gerät. Um ein D3D_FEATURE_LEVEL_11_1 Gerät zu erstellen, müssen Sie explizit ein D3D_FEATURE_LEVEL Array bereitstellen, das D3D_FEATURE_LEVEL_11_1 enthält. Wenn Sie ein D3D_FEATURE_LEVEL Array bereitstellen, das D3D_FEATURE_LEVEL_11_1 auf einem Computer enthält, auf dem die Direct3D 11.1-Laufzeit nicht installiert ist, schlägt diese Funktion sofort mit E_INVALIDARG fehl.

 

HRESULT hr = E_FAIL;
D3D_FEATURE_LEVEL MaxSupportedFeatureLevel = D3D_FEATURE_LEVEL_9_1;
D3D_FEATURE_LEVEL FeatureLevels[] = {
    D3D_FEATURE_LEVEL_11_1,
    D3D_FEATURE_LEVEL_11_0,
    D3D_FEATURE_LEVEL_10_1,
    D3D_FEATURE_LEVEL_10_0,
    D3D_FEATURE_LEVEL_9_3,
    D3D_FEATURE_LEVEL_9_2,
    D3D_FEATURE_LEVEL_9_1
    };

hr = D3D11CreateDevice(
    NULL,
    D3D_DRIVER_TYPE_HARDWARE,
    NULL, 
    0, 
    &FeatureLevels, 
    ARRAYSIZE(FeatureLevels), 
    D3D11_SDK_VERSION, 
    NULL, 
    &MaxSupportedFeatureLevel, 
    NULL 
    );

if(FAILED(hr))
{
    return hr;
}

Der Abschnitt "10Level9 Reference" listet die Unterschiede zwischen der Funktionsweise verschiedener ID3D11Device- und ID3D11DeviceContext-Methoden auf verschiedenen Featureebenen von 10Level9 auf.

Direct3D 11 auf Der Hardware auf Downlevel

Verwenden von Direct3D 11