다음을 통해 공유


방법: 디바이스 기능 수준 가져오기

이 topics 디바이스에서 지원하는 가장 높은 기능 수준을 가져오는 방법을 보여줍니다. Direct3D 11 디바이스는 D3D_FEATURE_LEVEL 열거형에 정의된 고정된 기능 수준 집합을 지원합니다. 디바이스에서 지원하는 가장 높은 기능 수준을 알고 있는 경우 해당 디바이스에 적합한 코드 경로를 실행할 수 있습니다.

디바이스 기능 수준을 얻으려면

  1. ppDevice 매개 변수에 대해 NULL을 지정하는 동안 D3D11CreateDevice 함수 또는 D3D11CreateDeviceAndSwapChain 함수를 호출합니다. 디바이스를 만들기 전에 이 작업을 수행할 수 있습니다.

    -또는-

    디바이스를 만든 후 ID3D11Device::GetFeatureLevel 을 호출합니다.

  2. 마지막 단계에서 반환된 D3D_FEATURE_LEVEL 열거형 값을 검사하여 지원되는 기능 수준을 확인합니다.

다음 코드 예제에서는 D3D11CreateDevice 함수를 호출하여 지원되는 가장 높은 기능 수준을 확인하는 방법을 보여 줍니다. D3D11CreateDevice는 지원되는 가장 높은 기능 수준을 FeatureLevel 변수에 저장합니다. 이 코드를 사용하여 D3D11CreateDevice에서 반환하는 D3D_FEATURE_LEVEL 열거형 형식의 값을 검사할 수 있습니다. 이 코드는 모든 기능 수준을 명시적으로 나열합니다(Direct3D 11.1 및 Direct3D 11.2의 경우).

참고

Direct3D 11.1 런타임이 컴퓨터에 있고 pFeatureLevelsNULL로 설정된 경우 이 함수는 D3D_FEATURE_LEVEL_11_1 디바이스를 만들지 않습니다. D3D_FEATURE_LEVEL_11_1 디바이스를 만들려면 D3D_FEATURE_LEVEL_11_1포함하는D3D_FEATURE_LEVEL 배열을 명시적으로 제공해야 합니다. Direct3D 11.1 런타임이 설치되지 않은 컴퓨터의 D3D_FEATURE_LEVEL_11_1 포함하는 D3D_FEATURE_LEVEL배열을 제공하는 경우 이 함수는 E_INVALIDARG 함께 즉시 실패합니다.

 

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;
}

10Level9 참조 섹션에는 다양한 ID3D11DeviceID3D11DeviceContext 메서드가 다양한 10Level9 기능 수준에서 작동하는 방식의 차이점이 나열되어 있습니다.

하위 하드웨어의 Direct3D 11

Direct3D 11을 사용하는 방법