Quick Reference
constexpr D3D_FEATURE_LEVEL requested[] = {
D3D_FEATURE_LEVEL_11_1,
D3D_FEATURE_LEVEL_11_0,
};
UINT flags = D3D11_CREATE_DEVICE_BGRA_SUPPORT;
#if defined(_DEBUG)
flags |= D3D11_CREATE_DEVICE_DEBUG;
#endifFeature level은 설치된 Direct3D runtime 버전이 아니라 Device가 보장하는 GPU 기능 집합입니다. 생성 뒤 반환된 실제 level을 기준으로 shader와 resource 경계를 선택합니다.
Windows 7의 Direct3D 11.0 runtime처럼 11_1 상수를 모르는 runtime은 위 배열 전체를 E_INVALIDARG로 거부하며 11_0으로 자동 fallback하지 않습니다. 이 경우 requested + 1과 줄어든 count로 한 번 더 호출합니다.
주요 선택값
| 설정 | 언제 쓰는가 | 잘못 선택하면 |
|---|---|---|
D3D_DRIVER_TYPE_HARDWARE | pAdapter == nullptr에서 기본 GPU 렌더링 | 지원 adapter가 없으면 생성 실패 |
D3D_DRIVER_TYPE_WARP | software fallback·테스트 | 성능 특성이 실제 GPU와 다름 |
D3D11_CREATE_DEVICE_DEBUG | 개발 중 validation | Debug Layer 미설치 환경에서 생성 실패 가능 |
BGRA_SUPPORT | Direct2D interop 등 | 필요한 interop format 계약 불일치 |
특정 IDXGIAdapter*를 pAdapter에 직접 넘길 때 DriverType은 반드시 D3D_DRIVER_TYPE_UNKNOWN이어야 하며 다른 값이면 E_INVALIDARG입니다. 기본 adapter 선택과 고성능 GPU 선택 정책이 필요하면 DXGI adapter enumeration을 별도로 설계합니다.
실패 처리
Debug flag 때문에 DXGI_ERROR_SDK_COMPONENT_MISSING이 반환되면 개발 환경의 Graphics Tools 설치를 확인하거나 release 경로에서 debug flag 없이 생성합니다. 11_1 포함 호출이 E_INVALIDARG이면 11_1 항목 없이 재시도합니다. Device가 성공한 뒤 반환 level이 제품 최소 사양보다 낮으면 조용히 기능을 끄기보다 명확한 지원 오류로 종료합니다.
자주 틀리는 점
D3D_FEATURE_LEVEL_11_0과 Shader Model 숫자를 무조건 같은 값으로 읽지 않습니다.- WARP 성공을 실제 GPU 호환성 검증으로 대체하지 않습니다.
- Debug Layer가 production 성능 측정에 켜져 있지 않도록 합니다.
- 반환된 feature level을 무시하고 최고 기능을 바로 사용하지 않습니다.
참고 링크
2 sources