Gewusst wie: Abrufen der Gerätefeatureebene

In diesem Thema erfahren Sie, 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. Untersuchen Sie den Wert der zurückgegebenen D3D_FEATURE_LEVEL Enumeration aus dem letzten Schritt, um die unterstützte Featureebene zu ermitteln.

Im folgenden Codebeispiel wird veranschaulicht, wie Die höchste unterstützte Featureebene durch Aufrufen der D3D11CreateDevice-Funktion ermittelt wird. 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-Runtime auf dem Computer vorhanden ist und pFeatureLevels auf NULL festgelegt ist, erstellt diese Funktion kein D3D_FEATURE_LEVEL_11_1 Gerät. Zum Erstellen eines D3D_FEATURE_LEVEL_11_1 Geräts 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-Runtime 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;
}

Im Abschnitt 10Level9-Referenz werden die Unterschiede zwischen den verschiedenen Methoden ID3D11Device und ID3D11DeviceContext auf verschiedenen Featureebenen von 10Level9 aufgeführt.

Direct3D 11 für Hardware auf Downlevel

Verwenden von Direct3D 11