Direct3D 11에서부터 도입된 Feature Level은 GPU가 지원하는 기능의 Level을 나타내는 지표로서 사용된다.
코드 내부에서는 D3D_FEATURE_LEVEL이라는 enum을 사용하는데 다음과 같이 정의되어 있다.
typedef enum D3D_FEATURE_LEVEL {
D3D_FEATURE_LEVEL_1_0_CORE,
D3D_FEATURE_LEVEL_9_1,
D3D_FEATURE_LEVEL_9_2,
D3D_FEATURE_LEVEL_9_3,
D3D_FEATURE_LEVEL_10_0,
D3D_FEATURE_LEVEL_10_1,
D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_11_1,
D3D_FEATURE_LEVEL_12_0,
D3D_FEATURE_LEVEL_12_1,
D3D_FEATURE_LEVEL_12_2
} ;
이 녀석을 사용하는 이유는 다음과 같다.
우리가 만드는 프로그램이 어떤 기능을 사용할 때 해당 기능이 어떤 GPU에서는 지원하지 않는 기능일 수 있기에 ‘이 프로그램을 사용하기 위해서는 최소한 이정도의 기능은 갖고 있어야 한다!’
라고 지정해주는 것이다.
이 개념은 Direct3D를 초기화 할 때 사용되며 응용 프로그램은 높은 수준에서 낮은 수준으로
Level을 점검하며 마지막에는 우리가 지정한 최소 Level까지 점검하고 해당 Level까지 지원하지 않는다면 장치 초기화가 실패하게 될 것이다.
그렇기 때문에 만약 게임을 만든다고 한다면 어디까지의 기능을 사용 할 것인지, 어디까지의 사용자까지 고려하여 프로그램을 만들 것 인지 생각해야한다.
참고 자료
Feature levels in Direct3D
Direct3D feature levels
D3D_FEATURE_LEVEL enumeration (d3dcommon.h)
- 책
DirectX 12를 이용한 3D 게임 프로그래밍 입문