WDDM 2.1 기능
이 문서에서는 Windows 10 1주년 버전(Windows 10 버전 1607)부터 사용할 수 있는 WDDM(Windows Display Driver Model) 버전 2.1의 기능 및 향상된 기능에 대해 자세히 설명합니다.
WDDM 2.1 자체는 선택 사항입니다. 구현된 경우 필수 및 선택적 드라이버 기능의 컬렉션입니다. 이러한 WDDM 2.1 기능을 지원하는 드라이버는 모든 필수 기능을 지원해야 합니다. Windows HLK(하드웨어 랩 키트) 테스트는 지원의 유효성을 검사할 수 있지만 Dxgkrnl은 기능 및 DDI의 일관성을 확인합니다.
WDDM 2.1 요구 사항 테이블
기능 | 적용 가능성 |
---|---|
향상된 제품 및 회수 | 필수 |
비디오 메모리 관리 | 선택 사항 |
HW 보호 콘텐츠 안정성 향상 | 하드웨어 선택 |
Windows GameDVR을 사용하는 애플리케이션 지원 | 필수 |
간접 표시 | 하드웨어 선택 |
드라이버 저장소 및 병렬 설치 | 필수 |
카메라/캡처 시나리오에 대한 DirectX 메모리 표면 공유 | 필수 |
WDDM 2.1은 D3D9, D3D10, D3D10.1, D3D11, D3D11.x, D3D12 D3D 버전을 지원합니다.
향상된 제품 및 회수
백그라운드 모드에서 실행되는 애플리케이션의 메모리 공간을 줄이기 위해 PFND3DDDI_RECLAIMALLOCATIONS3CB 콜백 함수가 추가되었습니다. 이 인터페이스를 사용하면 애플리케이션이 백그라운드로 전환할 때 완전히 커밋 해제할 수 있는 리소스를 제공할 수 있습니다. 따라서 프로세스 수명 관리자는 DirectX를 사용하는 백그라운드 앱에서 더 많은 메모리를 회수할 수 있으므로 메모리 부족 시 백그라운드 애플리케이션 종료가 줄어듭니다.
기타 DDI 변경 내용:
- 콜백 PFND3DDDI_UPDATEALLOCATIONPROPERTYCB
- 콜백 PFND3DDDI_OFFERALLOCATIONS2CB
- D3DDDICB_OFFERALLOCATIONS2 구조체
- D3DDDICB_RECLAIMALLOCATIONS3 구조체
제품 및 리소스 회수에 대한 자세한 내용은 제품 및 회수 변경 내용을 참조하세요.
Windows GameDVR을 사용하는 애플리케이션 지원
Windows 10 Anniversary Edition에는 Windows 게임 바 및 GameDVR을 전체 화면 게임과 함께 사용할 수 있는 향상된 기능이 포함되어 있습니다.
WDDM 2.1 드라이버는 대칭 이동 모델 스왑 체인에 대한 다중 스레딩 지원을 추가하는 현재 일괄 처리라는 성능 기능을 지원해야 합니다. 이 필수 기능은 게임 바가 있는 전체 화면 게임이 이전 버전의 Windows와 동일한 수준의 성능으로 실행되도록 합니다.
이 기능을 사용하도록 설정하기 위해 다음 DPI가 추가되었습니다.
간접 표시
WDDM 2.1에서 간접 디스플레이를 사용하면 USB 연결 디스플레이가 다른 모니터와 동일한 모든 사용자 환경에 참여할 수 있습니다. 또한 IDD(간접 디스플레이 드라이버)는 커널 모드 드라이버보다 개발이 더 간단한 사용자 모드 드라이버이므로 전반적인 시스템 안정성이 향상됩니다.
WDDM 2.1에서는 다음과 같은 USB 디스플레이 기능/환경을 사용할 수 있습니다.
USB 디스플레이가 Windows 플랫폼에 연결되거나 운영 체제를 업그레이드하면 Windows 업데이트에서 적절한 드라이버가 다운로드되고 설치됩니다.
모니터를 USB 디스플레이 하드웨어에 연결하면 올바른 모니터 토폴로지, 해상도 및 DPI가 검색되고 설정됩니다.
사용자는 모니터 해상도 및 모니터 크기 조정을 변경할 수 있습니다.
사용자는 예기치 않은 부작용 없이 USB 디스플레이의 연결을 끊고 디스플레이를 다시 연결할 수 있습니다.
모니터 토폴로지는 연결을 끊고 동일한 모니터에 다시 연결하여 유지됩니다.
USB는 절전 모드 및 최대 절전 모드를 비롯한 다양한 전원 상태에서 제대로 기능을 표시합니다.
간접 디스플레이에 대한 자세한 내용은 간접 디스플레이 드라이버 모델 개요를 참조 하세요.
드라이버 저장소 및 Side-by-Side 드라이버 설치
WDDM 2.1에서는 드라이버 저장소를 통해 그래픽 드라이버를 설치합니다. 그래픽 드라이버를 설치하는 이 메커니즘은 Windows 업데이트 드라이버 업데이트의 복원력을 향상시킵니다. 드라이버 파일 버전 불일치를 제거하여 시스템 불안정을 초래하고 사용자가 다시 부팅을 시작합니다. 이후의 각 드라이버 업데이트는 드라이버 저장소의 고유한 위치(즉, System32\DriverStore\FileRepository\[…]
드라이버 파일 덮어쓰기 및 불일치 방지)에서 직접 실행됩니다.
드라이버 저장소의 기능 구현에는 드라이버 파일이 고유한 드라이버 리포지토리에 복사되도록 하기 위해 그래픽 드라이버 INF 파일을 변경해야 합니다. INF 변경 내용은 INF 요구 사항의 자세한 내용에 설명되어 있습니다.
DXIL
WDDM 2.1에서는 GPU 셰이더 명령을 GPU로 전송하기 위한 최신 형식인 DXBC(DirectX Byte Code)에서 DXIL(DirectX Intermediate Language)로 GPU 셰이더 컴파일러 스택을 전환합니다. DXIL로 전환하면 개발자에게 다음과 같은 이점이 제공됩니다.
프로그래밍. 개발자는 GPU 프로그래밍 구문과 개발자가 잘 알고 있는 CPU 언어 간의 차이를 최소화하여 개발 용이성을 개선하고 셰이더 만들기 프로세스의 복잡성을 줄입니다.
고성능 컴파일러:
- 런타임 셰이더 성능 은 향상된 성능을 제공하도록 설정됩니다.
- DXIL은 GPU에서 SIMD 프로세서의 레인에서 데이터를 공유할 수 있도록 하는 내장 함수 집합을 제공합니다.
워크플로 유연성 - DXIL을 사용하면 개발자가 고유한 사용자 지정 도구 및 최적화 패스를 제어하고 빌드 시간 및 런타임에 적용되는 컴파일 단계를 선택할 수 있습니다.
고급 언어 기능 - 진화된 언어는 GPU 코드와 CPU 코드 간의 차이를 제거하고 GPU 프로그래머의 학습 곡선을 평면화하는 주요 기능을 제공합니다.
개발자에게 혜택을 제공하는 데 중점을 둔 이러한 기능을 통해 최종 사용자는 기존 하드웨어에서 실행되는 경우에도 신규 또는 업데이트된 게임의 성능이 향상되는 이점을 볼 수 있습니다.
카메라/캡처 시나리오에 대한 DirectX 메모리 표면 공유
WDDM 2.1에서는 여러 프로세스에서 동시에 카메라를 공유하거나 디바이스를 캡처하기 위해 프레임 서버 구성 요소가 도입되었습니다. 캡처된 프레임은 프로세스와 공동 프로세스 간에 이미지 데이터를 여러 번 복사하는 것이 아니라 여러 애플리케이션에서 읽을 수 있는 하나의 메모리 위치에 저장할 수 있습니다. 이 기능은 WDDM 2.1 규격 하드웨어 및 드라이버에 대한 여러 프로세스, 전력 절약, 대역폭 감소 및 대기 시간 감소에 걸쳐 캡처된 그림을 보다 효율적으로 관리할 수 있도록 합니다. 최종 결과는 애플리케이션 및 사용자의 성능 향상입니다.
프레임 서버는 캡처된 이미지를 크로스 프로세스 공유 가능한 메모리로 할당하고 이 메모리를 액세스를 요청하는 프로세스에 공유합니다. 프레임 서버는 텍스처를 여러 클라이언트 프로세스로 브로드캐스트하므로 텍스처는 동시 읽기를 지원해야 합니다. 현재 NV12 텍스처는 이 용도로 지원됩니다.
PSO(파이프라인 상태 개체) 캐싱 및 라이브러리
PSO(파이프라인 상태 개체)는 그래픽 파이프라인 지침 및 리소스(상태라고도 함)를 통합 개체로 나타내는 인터페이스로, D3D와 상태의 드라이버 분해 간의 불일치를 줄입니다. 그래픽으로 까다로운 애플리케이션 및 게임을 실행하려면 방대한 수의 PSO를 만들어야 합니다. PSO는 D3D12에서 도입되었습니다.
WDDM 2.1 PSO 라이브러리 및 캐싱을 사용하면 게임 애플리케이션이 초기 실행 중에 생성된 후 실제 스토리지에 PSO를 저장할 수 있습니다. 이 기능을 사용하면 D3D 런타임이 향후 인스턴스의 라이브러리에서 미리 생성된 PSO를 검색하여 PSO 추출 시간을 줄일 수 있습니다. 예를 들어 처음 게임을 실행하거나 PC를 다시 부팅한 후에는 물리적 라이브러리에서 저장된 PSO로 콘텐츠가 로드됩니다.
파이프라인 GPU 타임스탬프 시작
WDDM 2.1에서는 GPU 파이프라인에서 그래픽 이벤트 시작의 타임스탬프를 검색하는 기능이 도입되었습니다. 파이프라인 타임스탬프의 끝부분에서 사용되는 이 기능은 GPU에서 발생하는 애플리케이션 작업의 병렬화, 파이프라인 및 타이밍을 명확하고 세분화된 시각화로 개발자에게 제공합니다. 개발자는 코드를 추가로 최적화하고 각 이벤트의 실행 시간이 제공될 때 비효율성 및 기타 성능 문제를 조사할 수 있습니다.
이 기능은 "실시간, 낮은 오버헤드" GPU 성능 데이터 수집을 가능하게 하는 동시에 GPU의 워크로드를 시각화하고 측정하기에 충분한 정보를 제공합니다. 이 기능의 목표는 GPU에서 실행하는 작업의 정확한 순서와 기간을 재구성할 수 있는 충분한 정보를 제공하는 것입니다. 이 정보를 통해 도구는 엔진을 사용하여 병렬 처리 및 파이프라닝을 시각화하고, GPU 워크로드를 측정하고, 잠재적인 동기화 문제를 식별할 수 있습니다.
GPU 마이크로코드 보기
WDDM 2.1을 사용하면 개발자가 GPU 마이크로코드 보기를 제공하여 셰이더를 더욱 최적화할 수 있습니다. 개발자는 HLSL(상위 수준 셰이더 언어)로 셰이더를 만들어 그래픽 파이프라인을 프로그래밍한 다음 GPU 드라이버의 중간 언어로 컴파일합니다. 드라이버는 추가 컴파일 및 최적화를 실행하여 이 코드를 개발자에게 불투명하게 유지된 GPU 관련 지침으로 변환합니다. 이 기능을 통해 개발자는 셰이더 최적화 및 속도의 정도를 평가하기 위해 읽을 수 있는 GPU 관련 코드를 제공합니다.
이 기능을 사용하면 UMD(사용자 모드 드라이버)가 그래픽 파이프라인(셰이더)의 프로그래밍 가능한 각 단계에 대해 주석을 달고 프로그래머의 셰이더 사용 또는 오용에 대한 실행 가능한 정보를 반환할 수 있습니다. GPU 관련 마이크로코드는 UMD 주석과 함께 디스어셈블되고 읽을 수 있는 문자열 형식으로 표시됩니다. 개발자는 읽을 수 있는 GPU 코드에 대한 HLSL 코드 매핑을 나란히 볼 수 있으므로 코드를 동적으로 수정하고 GPU 코드 쪽에서 컴파일러 최적화 결과를 볼 수 있습니다.
WDDM 버전 확인
WDDM 2.1 Caps
드라이버는 버전 상수와 함께 DXGK_DRIVERCAPS::WDDMVersion을 통해 WDDM 2.1 지원을 보고합니다.
DXGK_WDDMVERSION::DXGKDDI_WDDMv2_1 = 0x2100
Dxgkrnl은 지원되는 기능을 결정하는 방법으로 WDDMVersion 한도를 사용하지 않습니다. 해당 작업은 다른 대문자 또는 DDI 현재 상태로 남아 있습니다. 그러나 드라이버가 WDDMVersion 상한을 통해 WDDM 2.1 지원을 보고하는 경우 Dxgkrnl은 WDDM 2.1에 필요한 대문자 또는 DDI가 있는지 확인하고 그렇지 않은 경우 어댑터를 만들지 못합니다. 캡이 일치하지 않으면 어댑터 또는 세그먼트를 만들지 못했습니다.
참고 항목
기존 또는 최신 애플리케이션은 여기에 설명된 것과 같은 플랫폼 개선을 통해 사용하도록 설정된 Windows 10 Anniversary Edition 기능을 활용하기 위해 드라이버 모델을 쿼리할 필요가 없습니다. 모든 기능 변경 내용은 해당 런타임을 통해 표시되어야 합니다.
다음 상수가 KMT_DRIVERVERSION_WDDM_2_1 일치하도록 추가되었습니다.
typedef enum _DXGIDRIVERMODELVERSION
{
DXGIDMVERSION_1_0 = 1000,
DXGIDMVERSION_1_1_PRERELEASE = 1102,
DXGIDMVERSION_1_1 = 1105,
DXGIDMVERSION_1_2 = 1200,
DXGIDMVERSION_1_3 = 1300,
DXGIDMVERSION_2_0 = 2000,
DXGIDMVERSION_2_1 = 2100,
} DXGIDRIVERMODELVERSION;
KMD(커널 모드 드라이버)의 DDI 인터페이스 버전은 다음과 같습니다.
#define DXGKDDI_INTERFACE_VERSION_VISTA 0x1052
#define DXGKDDI_INTERFACE_VERSION_VISTA_SP1 0x1053
#define DXGKDDI_INTERFACE_VERSION_WIN7 0x2005
#define DXGKDDI_INTERFACE_VERSION_WIN8 0x300E
#define DXGKDDI_INTERFACE_VERSION_WDDM1_3 0x4002
#define DXGKDDI_INTERFACE_VERSION_WDDM1_3_PATH_INDEPENDENT_ROTATION 0x4003
#define DXGKDDI_INTERFACE_VERSION_WDDM2_0 0x5023
#define DXGKDDI_INTERFACE_VERSION_WDDM2_1 0x6002
그래픽 INF 요구 사항
WDDM 2.1 그래픽 드라이버는 WDDM 2.0 또는 이전 드라이버와 비교하여 INF 요구 사항이 다릅니다.
WDDM 2.1은 WDDM 2.0 그래픽 드라이버(D1)와 동일한 기능 점수를 가져야 합니다.
WDDM 2.1 그래픽 드라이버는 다른 OS INF 설치 섹션을 사용해야 합니다.
WDDM 2.1 그래픽 드라이버 INF에서 "드라이버 저장소" 설치를 변경합니다.
자세한 내용은 INF 파일 섹션 및 지시문을 참조 하세요.
32비트 및 64비트 드라이버 파일은 모두 남아 있고 드라이버 저장소에서 로드됩니다. WoW64 파일 시스템 리디렉션은 드라이버 저장소에 적용되지 않습니다. IHV는 표준 INF 구문을 사용하여 하위 폴더를 지정할 수 있습니다(예: 원하는 경우 고유한 드라이버 저장소 폴더 아래에 WoW64 폴더).
다음 예제에서는 드라이버 저장소에서 INF 지원 실행이 이전 동작과 어떻게 다른지 보여 줍니다.
WINDOWS 10 ANNIVERSARY EDITION APPROACH: RUNNING DRIVERS FROM THE DRIVER STORE
[DestinationDirs]
KMDCopyFiles = 13
UMDCopyFiles = 13
UMDWoW64CopyFiles = 13
[DDInstall]
CopyFiles=KMDCopyFiles
CopyFiles=UMDCopyFiles
CopyFiles=UMDWoW64CopyFile
[KMDCopyFiles]
myKMD.sys
[UMDCopyFiles]
myUMD64.dll
myOpenCL64.dll
myOpenGL64.dll
[UMDWow64CopyFiles]
myUMD32.dll
myOpenCL32.dll
myOpenGL32.dll
[DDInstall.Services]
AddService = serviceName, 0x00000002, serviceName_Service_Inst
[serviceName_Service_Inst]
ServiceBinary = %13%\serviceName.sys
[regAdd]
HKR,,UserModeDriverName,%REG_MULTI_SZ%,%13%\myUMD64.dll, %13%\myUMD64.dll, %13%\myUMD64.dll, %13%\myUMD64.dll
HKR,,UserModeDriverNameWoW,%REG_MULTI_SZ%, %13%\myUMD32.dll, %13%\myUMD32.dll, %13%\myUMD32.dll, %13%\myUMD32.dll
HKLM,"Software\Khronos\OpenCL\Vendors",%13%\myOpenCL64.dll,%REG_DWORD%,0x00000000
HKLM,"Software\Wow6432Node\Khronos\OpenCL\Vendors",%13%\ myOpenCL32.dll,%REG_DWORD%,0x00000000
HKR,,OpenGLDriverName,%REG_MULTI_SZ%,%13%\myOpenGL64.dll
HKR,,OpenGLDriverNameWoW,%REG_MULTI_SZ%,%13%\myOpenGL32.dll
하위 폴더를 지정하기 위해 드라이버는 다음 예제와 같이 구문을 사용할 수 있습니다.
...
[DestinationDirs]
...
UMDWoW64CopyFiles = 13,WoW64
...
[regAdd]
...
HRK,, UserModeDriverNameWoW,%REG_MULTI_SZ%, %13%\WoW64\myUMD.dll, %13%\WoW64\myUMD.dll, %13%\
The manufacturer install section decoration for Windows 10 Anniversary edition WDDM 2.1 drivers is as follows:
...
[Manufacturer]
%Grfx_Manf% = IHVGfx, NTamd64.10.0…14310
...
[IHVGfx.NTamd64.10.0…14310]
; HW ID list
[list of HW IDs]
드라이버 버전 관리
그래픽 어댑터 또는 칩 집합에 대한 드라이버 DLL 및 SYS 파일의 형식이 올바른 파일 버전이어야 합니다.
드라이버 정보 파일(.inf), 커널 모드 드라이버(.sys) 및 .dll(사용자 모드 드라이버) 파일 버전 정보가 일치해야 합니다. 또한 .inf 섹션에서 PETrust 이진 파일로 식별되는 [SignatureAttributes]
모든 파일에 대한 버전 정보는 .inf와 일치해야 합니다. 드라이버 패키지의 추가 이진 파일에 대한 파일 버전 정보가 .inf와 일치하는 것이 좋습니다.
레거시 운영 체제에 대한 일반적인 파일 버전 관리 요구 사항과 일치하려면 파일 버전 서식이 다음 패턴을 따라 AA.BB.CCCCC.DDDDD
야 합니다.
AA는 .inf에 나열된 가장 지원되는 디바이스의 드라이버 모델 버전을 나타냅니다.
BB(WDDM 1.2 드라이버 이상)는 .inf에 나열된 가장 지원 가능한 디바이스의 사용 가능한 가장 높은 D3D 기능 수준을 나타냅니다.
BB(WDDM 1.1 드라이버 이하)는 .inf에 나열된 가장 지원 가능한 디바이스에서 지원하는 가장 높은 사용 가능한 DDI 버전을 나타냅니다.
CCCCC는 공급업체에서 선택한 0에서 65535까지 최대 5자리 숫자입니다.
DDDDD는 공급업체에서 선택한 0에서 65535까지 최대 5자리 숫자입니다.
AA 필드의 값:
드라이버 모델 | AA 값 |
---|---|
WDDM v2.1 | 21 |
WDDM v2.0 | 20 |
WDDM v1.3 | 10 |
WDDM v1.2 | 9 |
WDDM v1.1 | 8 |
WDDM v1.0 | 7 |
XDDM | 6 |
BB 필드 값(WDDM 1.2 이상):
DirectX 기능 수준 | BB 값 |
---|---|
12_x | 21 |
12_1 | 20 |
12_0 | 19 |
11_1 | 18 |
11_0 | 17 |
10_1 | 16 |
10_0 | 15 |
9_3 | 14 |
9_2 | 14 |
9_1 | 14 |
BB 필드 값(WDDM 1.1 이하):
DDI 버전 | BB 값 |
---|---|
기능 수준 11_0의 D3D11-DDI | 17 |
기능 수준 10의 D3D11-DDI | 16 |
D3D10-DDI | 15 |
D3D9 DDI | 14 |
예제
참고 항목
앞에 오는 0으로 숫자를 채우지 않아도 됩니다. 즉, CCCCC 또는 DDDD 필드에 대해 123을 00123으로 나타낼 필요가 없습니다. 이전 버전의 Windows OS에서는 마지막 두 필드가 4자리 숫자(예: CCCC.DDDD)였습니다. 따라서 Windows 10 및 WDDM 2.0 이전의 드라이버 버전 예제에는 4자리 숫자만 있습니다.
Windows Vista WDDM 1.0:
- D3D9 DDI 드라이버는 7.14.0000.0000 ~7.14.9999.9999를 사용할 수 있습니다.
- D3D10 DDI 드라이버는 7.15.0000.0000 ~7.15.9999.9999를 사용할 수 있습니다.
Windows 7 WDDM 1.1:
- D3D9 DDI 드라이버는 8.14.0000.0000~8.14.9999.9999를 사용할 수 있습니다.
- D3D10 DDI 드라이버는 8.15.0000.0000 ~8.15.9999.9999를 사용할 수 있습니다.
- FL_10_0 드라이버가 있는 D3D11 DDI는 8.16.0000.0000에서 8.16.9999.9999까지 사용할 수 있습니다.
- FL_11_0 드라이버가 있는 D3D11 DDI는 8.17.0000.0000 ~ 8.17.9999.9999를 사용할 수 있습니다.
Windows 8 WDDM 1.2:
- FL_10_0 HW는 9.15.0000.0000 ~ 9.15.9999.9999를 사용할 수 있습니다.
- FL_10_1 HW는 9.16.0000.0000에서 9.16.9999.9999까지 사용할 수 있습니다.
- FL_11_0 HW는 9.17.0000.0000에서 9.17.9999.9999까지 사용할 수 있습니다.
- FL_11_1 HW는 9.18.0000.0000에서 9.18.9999.9999까지 사용할 수 있습니다.
Windows 8.1 WDDM 1.3:
- FL_10_0 HW는 10.15.0000.0000 ~ 10.15.9999.9999를 사용할 수 있습니다.
- FL_10_1 HW는 10.16.0000.0000 ~ 10.16.9999.9999를 사용할 수 있습니다.
- FL_11_0 HW는 10.17.0000.0000 ~ 10.17.9999.9999를 사용할 수 있습니다.
- FL_11_1 HW는 10.18.0000.0000 ~ 10.18.9999.9999를 사용할 수 있습니다.
Windows 10 WDDM 2.0:
- FL_11_1 HW는 20.18.0000.0000 ~ 20.18.65535.65535를 사용할 수 있습니다.
- FL_12_0 HW는 20.19.0000.0000 ~ 20.19.65535.65535를 사용할 수 있습니다.
- FL_12_1 HW는 20.20.0000.0000 ~ 20.20.65535.65535를 사용할 수 있습니다.
Windows 10 WDDM 2.1:
- FL_11_1 HW는 20.18.0000.0000 ~21.18.65535.65535를 사용할 수 있습니다.
- FL_12_0 HW는 20.19.0000.0000 ~ 21.19.65535.65535를 사용할 수 있습니다.
- FL_12_1 HW는 20.20.0000.0000 ~ 21.20.65535.65535를 사용할 수 있습니다.
적용
Windows 10용 HLK 인증 재생 목록의 필수 테스트는 10586보다 높은 빌드로 이 문서에 지정된 규칙을 적용합니다. 테스트는 이전 OS 버전에 대한 선택 사항입니다. 10586 이후 Windows 10 빌드의 경우 WDDM 버전이 2.1로 업데이트되었습니다. 이를 보는 또 다른 방법은 필수 요구 사항이 WDDM 2.1 이상용으로 빌드된 드라이버에만 적용된다는 것입니다.