共用方式為


WDDM 2.1 功能

本文提供 Windows Display Driver Model (WDDM) 2.1 版的功能和增強功能詳細數據,從 Windows 10 年度版 (Windows 10 版本 1607) 開始提供。

WDDM 2.1 本身是選擇性的。 如果實作,它是強制和選擇性驅動程式功能的集合。 支援上述任一 WDDM 2.1 功能的驅動程序必須支援所有必要功能。 Windows 硬體實驗室套件 (HLK) 測試可以驗證支援,但 Dxgkrnl 會檢查功能和 DIS 中的一致性。

WDDM 2.1 需求數據表

功能 適用性
供應專案和回收改善 必要
視訊記憶體管理 選擇性
受 HW 保護的內容可靠性改善 選取硬體
Windows GameDVR 的應用程式支援 必要
間接顯示 選取硬體
驅動程式存放區和並存安裝 必要
相機/擷取案例的 DirectX 記憶體表面共用 必要

WDDM 2.1 支援下列 D3D 版本:D3D9、D3D10、D3D10.1、D3D11、D3D11.x、D3D12

供應專案和回收改善

新增PFND3DDDI_RECLAIMALLOCATIONS3CB 回呼函式,以減少在背景模式中執行之應用程式的記憶體使用量。 此介面可讓應用程式在進入背景時提供可完全認可的資源。 因此,進程存留期管理員能夠從使用 DirectX 的背景應用程式回收更多記憶體,這會導致在記憶體壓力下減少背景應用程式終止。

其他 DDI 變更:

如需供應專案和回收資源的詳細資訊,請參閱 供應專案和回收變更

Windows GameDVR 的應用程式支援

Windows 10 年度版包含改善使用 Windows 遊戲列和 GameDVR 與全螢幕遊戲的能力。

需要WDDM 2.1 驅動程式才能支援稱為 「目前批處理」的效能功能,以新增對翻轉模型交換鏈的多線程支援。 這項基本功能可確保具有遊戲列的全螢幕遊戲在與舊版 Windows 上執行的效能相同。

已新增下列 DIS 以啟用這項功能:

間接顯示

在WDDM 2.1 中,間接顯示可讓USB連接的顯示器參與與任何其他監視器相同的所有用戶體驗。 此外,間接顯示驅動程式 (IDD) 是使用者模式驅動程式,比核心模式驅動程式更容易開發,因此有助於提高整體系統可靠性。

在 WDDM 2.1 中,已啟用下列 USB 顯示功能/體驗:

  • 當USB顯示器連線到Windows平臺或升級作業系統時,會從Windows Update 下載並安裝適當的驅動程式。

  • 將監視器連線到 USB 顯示器硬體會偵測並設定正確的監視器拓撲、解析度和 DPI。

  • 用戶可以變更監視器的解析度和調整。

  • 使用者可以中斷 USB 顯示器和重新連線顯示器的連線,而不會造成非預期的副作用。

  • 監視拓撲會透過中斷連線並重新連線到相同的監視器來保留。

  • USB 會以各種電源狀態正確顯示功能,包括睡眠和休眠。

如需間接顯示的詳細資訊,請參閱 間接顯示驅動程式模型概觀

驅動程式存放區和並存驅動程序安裝

WDDM 2.1 透過驅動程式存放區引進圖形驅動程序的安裝。 安裝圖形驅動程序的這個機制可改善 Windows Update 中驅動程式更新的復原能力。 它可排除驅動程式檔案版本不符,導致系統不穩定和使用者起始重新啟動。 每個後續的驅動程式更新都會直接從驅動程式存放區中的唯一位置執行, System32\DriverStore\FileRepository\[…]因此避免驅動程式檔案覆寫和不相符。

驅動程式存放區的功能實作需要變更圖形驅動程式 INF 檔案,以確保驅動程式檔案會複製到唯一的驅動程式存放庫。 INF 變更會在 INF 需求詳細說明。

DXIL

WDDM 2.1 將 GPU 著色器編譯程式堆疊從 DirectX Byte Code (DXBC) 轉換為 DirectX 中繼語言 (DXIL),這是將著色器指令傳輸至 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 運行時間在未來的實例中從連結庫擷取預先建立的 POS,進而減少 PSO 擷取時間。 例如,在第一次或重新啟動計算機之後執行遊戲時,內容將會從實體連結庫載入為已儲存的 PSO。

管線 GPU 時間戳的開頭

在WDDM 2.1 中,引進了擷取 GPU 管線中圖形事件開始時間戳的功能。 這項功能與管線時間戳結尾搭配使用,可讓開發人員清楚且精細地呈現其應用程式活動在 GPU 上發生的平行處理、管線和時間。 開發人員可以在每個事件運行時間提供時,進一步優化其程序代碼,並調查效率不佳和其他效能問題。

這項功能有助於啟用「即時、低負荷」GPU 效能數據收集,同時提供足夠的資訊來可視化和測量 GPU 上的工作負載。 功能的目標是提供足夠的資訊,以重新建構 GPU 所執行之作業的確切順序和持續時間。 利用這項資訊,工具可以使用引擎可視化平行處理原則和管線、測量 GPU 工作負載,以及找出潛在的同步處理問題。

檢視 GPU 微碼

WDDM 2.1 可讓開發人員藉由呈現 GPU 微碼檢視,進一步優化其著色器。 開發人員會藉由以高階著色器語言 (HLSL) 建立著色器來設計圖形管線,然後編譯為 GPU 驅動程式的中繼語言。 驅動程式會執行其他編譯和優化,將此程式代碼轉換成 GPU 特定指示,而指令仍不透明給開發人員。 透過這項功能,開發人員會看到可讀取的 GPU 特定程式代碼,以評估其著色器優化和速度的程度。

這項功能可讓使用者模式驅動程式 (UMD) 對圖形管線(著色器)的每個可程式化階段發表評論,並傳回程式設計人員使用這些著色器使用或誤用的可操作資訊。 GPU 特定的微碼會反組譯,並以可讀取的字串格式以及 UMD 批注呈現。 開發人員可以並排檢視其 HLSL 程式代碼對應至可讀取的 GPU 程式代碼,以便動態修改其程式碼,並在 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 所需的上限或 DIS 存在,而且如果不是,就無法建立配接器。 不一致的上限會導致無法建立配接器或區段。

注意

應用程式,現有或更新版本,不一定要查詢驅動程式模型,以利用任何透過平臺改進啟用的 Windows 10 年度版功能,例如這裡所述的功能。 任何功能變更都必須透過個別的運行時間呈現。

已新增下列常數以符合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 需求:

  1. WDDM 2.1 必須具有與 WDDM 2.0 圖形驅動程式相同的功能分數 (D1)。

  2. WDDM 2.1 圖形驅動程序必須使用不同的 OS INF 安裝區段。

  3. 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 區段中識別 [SignatureAttributes] 為PETrust二進位檔之任何檔案的版本信息必須符合 .inf。 建議驅動程式套件中其他二進位檔的檔案版本資訊符合 .inf。

若要與舊版作業系統的現行檔案版本設定需求一致,檔案版本格式必須遵循 AA.BB.CCCCC.DDDDD 下列模式:

  • AA 指出 .inf 中列出的最有能力裝置的驅動程式型號版本

  • BB (適用於 WDDM 1.2 驅動程式和更高版本)表示 .inf 中所列最有能力裝置的最高可用 D3D 功能等級

  • BB (針對 WDDM 1.1 驅動程式和較低版本)表示 .inf 中所列最有能力的裝置所支援的最高可用 DDI 版本

  • CCCCC 是廠商選擇的最多 0 到 65535 的數位

  • DDDDD 是廠商所選 0 到 65535 的五位數

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

範例

注意

不需要以前置零填補數位,亦即 123 不需要以 CCCCC 或 DDDDD 欄位的 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.99999
    • 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.99999
    • 具有FL_10_0驅動程式的 D3D11 DDI 可以使用 8.16.0000.0000 到 8.16.9999.99999
    • 具有FL_11_0驅動程式的 D3D11 DDI 可以使用 8.17.0000.0000 到 8.17.9999.99999
  • 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 組建高於 10586 的 HLK 認證播放清單中的強制測試會強制執行本文中指定的規則。 測試對於較舊的OS版本而言是選擇性的。 針對 10586 之後的 Windows 10 組建,WDDM 版本已更新為 2.1。 另一個檢視方式是,強制需求僅適用於針對WDDM 2.1 或更新版本所建置的驅動程式。