Windows 進階點陣化平臺 (WARP) 指南

本文說明 Windows 進階點陣化平臺 (WARP) 和 WARP 的下列層面。

什麼是 WARP?

WARP 是一種高速、完全合規的軟體轉譯器。 它是 Direct3D 11 運行時間引進的 DirectX 圖形技術元件。 Direct3D 11 運行時間安裝在 Windows 7、Windows Server 2008 R2 和 Windows Vista 上,並更新 [KB971644] 。 Windows 8、Windows 10、Windows Server 2012 及更新版本,以及 Windows RT 包含 Direct3D 11.1 運行時間,其具有更新版本的 WARP。 Windows 10 Fall Creators Update (1709) 包含支援 Direct3D 11 和 Direct3D 12 運行時間的 WARP 版本。

WARP 優點

WARP 提供下列優點:

拿掉自定義軟體轉譯程式的需求

WARP 藉由移除建置自定義軟體轉譯器的需求,並調整您的應用程式,而不是調整應用程式的硬體,藉以簡化開發。 藉由提供單一、一般用途的軟體轉譯器,您不再需要以多種方式撰寫影像轉譯演算法,以在具有不同特性和功能的硬體或軟體上執行。 您仍然可以以多種方式實作演算法,以達到更好的效能或調整;不過,您不需要變更用來實作這些演算法的 API 或轉譯架構。 相反地,您可以專注於建立絕佳的 Direct3D 10 或更新版本應用程式,以在硬體或軟體上運作良好。

從圖形硬體啟用最大效能

當應用程式調整為在硬體上有效率地執行時,它也會在 WARP 上有效率地執行。 相反的也是真的;任何已微調以在 WARP 上正常執行的應用程式,都會在硬體上執行良好。 使用 Direct3D 10 和更新版本效率不佳的應用程式可能無法在不同的硬體上有效率地調整。 WARP 與硬體有類似的效能配置檔,因此調整大型批次的應用程式、將狀態變更降至最低、移除同步處理點或鎖定將有利於硬體和 WARP。

在無法使用 Direct3D 硬體時啟用轉譯

WARP 允許在各種情況下快速轉譯,其中硬體實作不可取或無法使用,包括:

  • 當用戶沒有任何支援 Direct3D 的硬體時
  • 當應用程式以服務或伺服器環境中的形式執行時
  • 當應用程式想要保留 Direct3D 硬體資源供其他用途使用時
  • 未安裝視訊卡時
  • 當視訊驅動程式無法使用或無法正常運作時
  • 當視訊卡記憶體不足、停止回應或需要太多系統資源來初始化時

利用現有資源進行軟體轉譯

有許多社群、許多書籍、網站、SDK、範例、白皮書、郵件清單和其他資源,可協助您利用 Direct3D 10 和更新版本的著色器型影像轉譯。 使用 WARP 作為軟體後援,您可以使用現有的硬體知識,在應用程式使用硬體或軟體執行時改善應用程式的效能。 此外,來自圖形適配器廠商和 DirectX SDK 的許多優秀工具可協助您設計、建置、開發、偵錯和分析圖形應用程式的效能問題。 當您使用 WARP 時,這些工具和知識現在可以受益於以硬體和軟體為目標的應用程式開發。

啟用不需要圖形硬體的案例

各種演算法和應用程式(影像處理演算法、列印、遠端、虛擬電腦和其他模擬器、高品質的字型轉譯、圖表、圖表等)通常已針對 CPU 進行優化,因為它們不相依於硬體。 透過 WARP,您可以使用單一架構來執行這些演算法和應用程式,而且可以在軟體中完整執行;然而,如果硬體加速可用,您可以利用它。

完成 DirectX 圖形平臺

WARP 可讓您存取所有 Direct3D 10 和更新版本的圖形功能,即使在沒有 Direct3D 10 和更新版本的圖形硬體的情況下,也一直位於計算機上。 Direct3D 10 已移除功能位 (caps):也就是說,您不再需要確認圖形功能是否可從圖形硬體取得,因為 Direct3D 10 和更新版本可保證此可用性。 您現在可以使用各種視訊卡的所有功能,知道其應用程式在任何地方的行為和外觀相同。 只要停用低端視頻卡上的昂貴圖形功能,或轉譯為較小的目標,即可調整這些應用程式的效能。

WARP 功能和需求

WARP 完全支援所有 Direct3D 10 和 10.1 功能。 例如,WARP 支援下列最重要的功能:

  • Direct3D 10 和 10.1 規格的所有精確度需求
  • Direct3D 11 與功能層級 9_1、9_2、9_3、10_0 和 10_1 搭配使用時(如需功能層級的詳細資訊,請參閱 D3D_FEATURE_LEVEL
  • 所有選擇性紋理格式,例如多重取樣轉譯目標和從浮點數表面取樣
  • 反鋸齒,高品質轉譯高達 8 倍多重取樣反鋸齒 (MSAA)
  • Anisotropic 篩選
  • 32 位和64位應用程式和大型位址感知32位應用程式

當您 在 Windows 7 SP1 或 Windows Server 2008 R2 SP1 上安裝適用於 Windows 7 的平臺更新時,該操作系統接著會包含 Direct3D 11.1 運行時間,以及支援 Direct3D 11.x 的 WARP 版本,搭配功能層級 9_1、9_2、9_3、10_0、10_1 和 11_0。

Windows 8、Windows 10、Windows Server 2012 及更新版本,以及 Windows RT 包含 Direct3D 11.1 運行時間和新版本 WARP。 搭配功能層級 9_1、9_2、9_3、10_0、10_1、10_1、11_0 和 11_1 使用時,此版本支援 Direct3D 11.x。

Windows 10 Fall Creators Update (1709) 包含支援 Direct3D 12 功能層級 12_0 和 12_1 的新版本 WARP。

WARP 的最低電腦需求與 Windows Vista 相同,特別是:

  • 最小 800 MHz CPU
  • 不需要MMX、SSE或 SSE2
  • RAM 至少 512 MB

如何使用 WARP

針對 Direct3D 12,建立 WARP 裝置需要先識別 WARP 配接器。 為了方便起見,DXGI 1.4 提供 IDXGIFactory4::EnumWarpAdapter 方法。 然後,可以將 WARP 配接器提供給 D3D12CreateDevice 來建立 WARP 裝置。

Direct3D 10、10.1 和 11 元件可以使用可在建立裝置時指定的額外驅動程式類型(例如,當您呼叫 D3D11CreateDevice 函式時)。 該驅動程式類型為 D3D10_DRIVER_TYPE_WARPD3D_DRIVER_TYPE_WARP。 當您指定該驅動程式類型時,運行時間會建立 WARP 裝置,且不會初始化硬體裝置。

由於WARP使用與參考轉譯器相同的軟體介面至 Direct3D,因此可以使用 WARP 測試任何可支援使用參考轉譯器執行的 Direct3D 應用程式。 若要使用 WARP,請將 D3d10warp.dll 重新命名為 D3d10ref.dll,並將它放在與範例或應用程式相同的資料夾中。 接下來,當您切換至 ref 時,您會看到 WARP 轉譯。

如果您將 WARP 重新命名為 D3d10ref.dll,並將它放在 C:\Program Files (x86)\Microsoft DirectX SDK (2010 年 6 月)\Samples\C++\Direct3D\Bin\x86 中,您可以對 WARP 執行所有 DirectX 範例,方法是單擊範例中的 [切換 Ref] 按鈕,或在命令行上以指定的 /ref 執行範例。

所有可以使用 Direct3D 的應用程式都可以使用 WARP。 這包括下列類型的應用程式:

休閒遊戲

遊戲通常具有簡單的轉譯需求。 不過,它們也需要使用可能需要硬體加速的令人印象深刻的視覺效果。 Windows 最暢銷的遊戲標題是模擬或休閒遊戲,這兩者都不需要高效能圖形。 不過,這兩種遊戲樣式都受益於現代著色器型圖形,以及在硬體上調整的能力。

現有的非遊戲應用程式

大量的圖形化應用程式需要其轉譯層中最少的程式代碼路徑數目。 WARP 可讓這些應用程式實作單一 Direct3D 程式代碼路徑,以大量計算機設定為目標。

進階轉譯遊戲

遊戲開發人員可能想要隔離圖形卡或驅動程式特定的轉譯錯誤。 因此,所有遊戲,即使是非常圖形化的遊戲,都可以受益於能夠使用WARP轉譯其內容。 您可以使用 WARP 來驗證您發現的任何視覺成品是否呈現錯誤或硬體或驅動程式的問題。

其他應用程式

WARP 的目標應用程式也包含目前可能未使用 Direct3D 10 或 Direct3D 10.1 的目標應用程式。 這些目標應用程式包括必須一律在所有計算機上運作的應用程式、不會寫入 CPU 和 GPU 版本的影像處理演算法、速度或使用 GPU 的影像處理演算法,例如列印,以及顯示進階 3D 圖形的模擬器和虛擬環境。

WARP 架構和效能

WARP 是以參考轉譯器程式代碼基底為基礎。 因此,WARP 會使用相同的軟體介面來同時使用 Direct3D 10 和更新版本和 DXGI。 WARP 包含在 Windows 7 的 D3d10warp.dll 中,位於 Windows 系統資料夾中。 64 位電腦上已安裝兩個版本的 WARP,即 x86 和 x64 版本。 在某些情況下,x64 版本可能會執行得更快,因為 WARP 中包含的程式代碼產生器可以利用使用者執行 64 位應用程式時可用的額外快取器。

WARP 包含下列兩個高速實時編譯程式:

  • 將 HLSL 位元組程式代碼和目前轉譯狀態轉換成管線幾何著色器、頂點著色器 (VS) 和像素著色器 (PS) 階段之向量命令優化數據流的高階中繼語言編譯程式。
  • 高效能的 Just-In-Time 程式代碼產生器,可採用這些命令併產生優化的 SSE2、SSE4.1、x86、x64、arm 和 arm64 元件程式代碼。

WARP 使用 Windows Vista 中引進的複雜線程集區和複雜的工作管理和相依性追蹤,讓轉譯管線的所有部分都能有效率地分散到可用的 CPU 核心。

WARP 使用延後轉譯。 也就是說,WARP 可以批次轉譯命令,因此只有在有足夠的數據可供有效率地使用所有 CPU 資源時,才會進行點陣化。 主要應用程式線程上的工作會最小化,以允許應用程式儘快提交命令。 如果應用程式也是多線程,而且會使用線程集區,則工作會在WARP 與應用程式之間平均散發。

WARP 程式代碼產生器已經過微調,以充分利用新式 CPU 架構。 WARP 會在可執行 Windows Vista 和更新版本的作業系統的所有電腦上執行,即使電腦不支援 SSE 也一樣。 不過,WARP 已針對支援 SSE2 的電腦進行優化。 它也包含 AMD 和 Intel 處理器特定架構的優化,以及 SSE 4.1 擴充功能的支援。

WARP 不需要執行圖形硬體。 即使在硬體無法使用或無法初始化的情況下,它也可以執行。

設計和建置在 Direct3D 10 和更新版本硬體上執行的應用程式和範例,而不知道 WARP 可能會使用 WARP 運作良好。 不過,我們建議您盡可能降低品質設定和解析度,以達到可使用的幀速率。 您可以使用 WARP 來開發及調整在硬體和軟體上運作良好的應用程式。

因為 WARP 會使用多個 CPU 核心來進行平行執行,所以它在現代多核心 CPU 上表現最佳。 WARP 也會在已安裝 SSE4.1 延伸模組的電腦上大幅加快執行速度。 Microsoft 在具有 8 個或更多核心和 SSE4.1 的電腦上執行了顯著的測試和效能微調,因為這些高端計算機在 Windows 7 和更新版本的作業系統存留期內會變得更加常見。

當WARP在CPU上執行時,相較於圖形卡,其限制方式有數種。 CPU 的前端總線速度通常大約或低於 10 GB/秒。 相反地,圖形卡通常會有專用記憶體,其使用 20 到 100GB/秒以上的圖形頻寬。 圖形硬體也有固定函式單位,可執行複雜且昂貴的工作,例如紋理篩選、格式解壓縮或轉換,以異步方式執行很少的額外負荷或電源成本。 在一般 CPU 上執行這些作業在耗電量和效能週期方面都很昂貴。

Intel Penryn 型 3.0GHz 四核心計算機的一般效能數字顯示,在某些情況下,WARP 的表現優於低端整合 Direct3D 10 和更新版本的圖形 GPU。許多基準檢驗。 低端離散圖形硬體的執行速度通常比 WARP 快 4 到 5 倍。 這些低端整合式或離散 GPU 使用最少的 CPU 資源。 對於許多應用程式而言,中端或高端圖形卡的速度明顯快於WARP,特別是當應用程式可以利用這些圖形卡所提供的平行處理原則和記憶體頻寬時。

WARP 不是圖形硬體的替代專案,特別是因為合理執行低端 Direct3D 10 和更新版本的離散硬體現在便宜。 WARP 的目標是允許應用程式以 Direct3D 相容的層級硬體為目標,而不需要在硬體或軟體上執行程式碼路徑或測試需求。

下列兩個數據表顯示具有各種CPU和圖形卡的WARP範例數據。

第一個數據表顯示使用 Direct3D 10 Crysis 在 800x600 執行且其最低層級上所有質量設定的 WARP 範例數據:

CPU Time Ave FPS 最小 FPS 最小框架 最大 FPS 最大框架
Core i7 8 Core @ 3.0GHz 271.57 7.36 3.46 1966 15.01 995
Penryn 4 Core @ 3.0GHz 351.35 5.69 2.49 1967 10.95 980
Penryn 2 Core @ 3.0GHz 573.98 3.48 1.35 1964 6.61 988
Core 2 Duo @ 2.6GHz 707.19 2.83 0.81 1959 5.18 982
Core 2 Duo @ 2.4GHz 763.25 2.62 0.76 1964 4.70 984
Core 2 Duo @ 2.1GHz 908.87 2.20 0.64 1965 3.72 986
Xeon 8 Core @ 2.0GHz 424.04 4.72 1.84 1967 9.56 988
AMD FX74 4 Core @ 3.0GHz 583.12 3.43 1.41 1967 5.78 986
Phenom 9550 4 Core @ 2.2GHz 664.69 3.01 0.53 1959 5.46 987

第二個資料表顯示跨各種圖形卡執行相同測試的範例數據:

顯卡 Time Ave FPS 最小 FPS 最小框架 最大 FPS 最大框架
NVIDIA 8800 GTS 23.58 84.80 60.78 1957 130.83 1022
NVIDIA 8500 GT 47.63 41.99 25.67 1986 72.57 991
NVIDIA Quadro 290 67.16 29.78 18.19 1969 49.87 1017
NVIDIA 8400 GS 59.01 33.89 21.22 1962 51.82 1021
ATI 3400 53.79 37.18 22.97 618 59.77 1021
ATI 3200 67.19 29.77 18.91 1963 45.74 980
ATI 2400 PRO 67.04 29.83 17.97 606 45.91 987
Intel DX10 整合 386.94 5.17 1.74 1974 16.22 995

WARP 一致性

WARP 透過所有標準 Windows 硬體質量實驗室 (WHQL) 一致性測試,以驗證 Direct3D 硬體裝置。

WARP 已針對一套 Direct3D 10 和 Direct3D 10.1 應用程式和基準檢驗,以及針對來自 DirectX、NVIDIA 和 AMD 的 SDK 範例進行測試。

WARP 在其測試中使用適用於 Windows 的 PIX 偵錯與分析工具;Microsoft 有一個大型的單一框架擷取連結庫,可用來比較硬體與 WARP 的應用程式。 大部分映像在硬體與 WARP 之間幾乎完全相同;在有時發生小差異時,發現它們位於 Direct3D 10 規格所定義的容錯範圍內。