Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

codingfarm

기본지식 - 기능수준(feature level) 본문

computer graphics/DirectX11

기본지식 - 기능수준(feature level)

scarecrow1992 2020. 11. 28. 16:21

Direct3D 11은 기능수준(feature level) 이라는 개념을 도입했다. 코드에서 D3D_FEATURE_LEVEL 이라는 열거형으로 대표되는 이 기능 수준은, 대략적으로 버전 9에서 11까지의 여러 Direct3D 버전들에 대응된다.

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

 

기능 수준들은 GPU가 지원하는 기능들의 엄격한 집합을 정의한다(각 기능들이 지원하는 구체적인 내용은 SDK를 참고). 예를들어 기능 수준 11을 지원하는 GPU는 반드시 Direct3D 11의 기능 집합 전체를 지원해야 한다. 

 

이러한 기능 수준은 응용 프로그램 개발을 편하게 해주는 요인이다. 현재 GPU의 기능 수준을 파악하기만 하면, 구체적으로 어떤 기능을 사용할 수 있는지를 확실히 알 수 있기 때문이다.

 

사용자의 하드웨어가 특정 기능 수준을 지원하지 않는 경우 응용 프로그램이 실행을 아예 포기하는 대신 더 낮은 기능 수준으로 후퇴하는 전략을 사용할 수도 있다

 

D3D_FEATURE_LEVEL featureLevels[4] = 
{
    D3D_FEATURE_LEVEL_11_0,
    D3D_FEATURE_LEVEL_10_1,
    D3D_FEATURE_LEVEL_10_0,
    D3D_FEATURE_LEVEL_9_0
};

 

위 배열의 의미는 우선 D3D 11 지원 여부를 점검하고, 다음으로 D3D 10.1 지원 여부를 점검 한 후에 D3D 10 지원 여부를 점검하고, 마지막으로 D3D 0.3 지원여부를 점검하는 식으로 진행할 수 있음을 나타낸다.

 

위와 같은 배열을 Direct3D 초기화 함수에서 사용하여, 배열에서 가장 먼저 지원되는 기능 수준을 선택하도록 하면 된다. 가령 사용자의 장치가 지원하는 첫 번째 기능 수준이 D3D_FEATURE_LEVEL_10_0 이라면 응용 프로그램은 Direct3D 11과 10.1의 기능들은 비활성화하고 Direct3D 10의 렌더링 경로를 사용하면 된다. 이 카테고리의 포스팅은 Direct3D 11에 대한 책의 내용이므로 항상 D3D_FEATURE_LEVEL_11_0 기능 수준이 지원된다고 가정한다.

하지만 실제 응용 프로그램이라면 대상 사용자층을 최대화하기 위해 구현 하드웨어의 지원에도 신경을 써야 할 것이다.

Comments