Direct3D9 和 WPF 互通性的效能考量
您可以使用 D3DImage 類別來裝載 Direct3D9 內容。 裝載 Direct3D9 內容可能會影響應用程式的效能。 本主題描述在 Windows Presentation Foundation (WPF) 應用程式中裝載 Direct3D9 內容時,將效能最佳化的最佳做法。 這些最佳做法包括當您使用 Windows Vista、Windows XP 和多監視器顯示器時,如何使用 D3DImage 和最佳做法。
注意
如需示範這些最佳做法的程式碼範例,請參閱 WPF 和 Direct3D9 互通 (英文)。
謹慎使用 D3DImage
裝載於 D3DImage 執行個體的 Direct3D9 內容不會如在單純 Direct3D 應用程式中轉譯一樣快。 複製介面並排清命令緩衝區可能是所費不貲的作業。 當 D3DImage 執行個體的數目增加時,就會發生更多排清,而效能會降低。 因此,您應該謹慎使用 D3DImage。
Windows Vista 上的最佳做法
為了在 Windows Vista 搭配設定為使用 Windows 顯示驅動程式模型 (WDDM) 的顯示器獲得最佳效能,請在 IDirect3DDevice9Ex
裝置上建立您的 Direct3D9 表面。 這可啟用表面共用。 顯示卡必須支援 Windows Vista 上的 D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES
和 D3DCAPS2_CANSHARERESOURCE
驅動程式功能。 任何其他設定都會使表面透過軟體複製,進而大幅降低效能。
注意
如果 Windows Vista 的顯示器已設定為使用 Windows XP 顯示驅動程式模型 (XDDM),則不論設定為何,一律會透過軟體複製表面。 在使用適當設定和顯示卡的情況下,當您使用 WDDM 時,會在 Windows Vista 上獲得更好的效能,因為表面複本是在硬體中執行。
Windows XP 的最佳做法
為了在使用 Windows XP 顯示驅動程式模型 (XDDM) 的 Windows XP 上獲得最佳效能,請建立在呼叫 IDirect3DSurface9::GetDC
方法時可正確運作的可鎖定表面。 在內部,BitBlt
方法會在硬體中跨裝置傳輸介面。 GetDC
方法一律可在 XRGB 介面上運作。 不過,如果用戶端電腦以 SP3 或 SP2 執行 Windows XP,且用戶端也有分層視窗功能的 Hotfix,則此方法只能在 ARGB 介面上運作。 顯示卡必須支援 D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES
驅動程式功能。
16 位元桌面顯示器深度可能會大幅降低效能。 建議使用 32 位元桌面。
如果您要針對 Windows Vista 和 Windows XP 進行開發,請在 Windows XP 上測試效能。 Windows XP 上的圖形記憶體不足是個問題。 此外,Windows XP 上的 D3DImage 圖形記憶體和頻寬比 Windows Vista WDDM 多,因為需要額外的圖形記憶體複本。 因此,您可以預期 Windows XP 上的效能會較 Windows Vista 上相同的視訊硬體更差。
注意
XDDM 可在 Windows XP 和 Windows Vista 上使用;不過,WDDM 僅適用於 Windows Vista。
一般最佳做法
當您建立裝置時,請使用 D3DCREATE_MULTITHREADED
建立旗標。 這會降低效能,但 WPF 轉譯系統會從另一個執行緒呼叫此裝置上的方法。 請務必正確遵循鎖定通訊協定,使兩個執行緒無法同時存取裝置。
如果您的轉譯是在 WPF 受控執行緒上執行,強烈建議您使用 D3DCREATE_FPU_PRESERVE
建立旗標建立裝置。 如果沒有此設定,則 D3D 轉譯可以降低 WPF 雙精確度作業的精確度,並引入轉譯問題。
除非您在沒有硬體支援的情況下並排顯示非 pow2 表面,或者如果您並排顯示包含 D3DImage 的 DrawingBrush 或 VisualBrush,否則並排顯示 D3DImage 會很快速。
多監視器顯示器的最佳做法
如果您使用具有多個監視器的電腦,則應遵循先前所述的最佳做法。 多監視器組態也有一些額外的效能考量。
當您建立背景緩衝區時,其會建立在特定裝置和介面卡上,但 WPF 可能會在任何介面卡上顯示前端緩衝區。 跨介面卡複製以更新前端緩衝區可能會非常昂貴。 在設定為使用 WDDM 搭配多個顯示卡和 IDirect3DDevice9Ex
裝置的 Windows Vista 上,如果前端緩衝區位於不同的介面卡上,但仍是相同的顯示卡,則不會降低效能。 不過,在具有多個顯示卡的 Windows XP 和 XDDM 上,當前端緩衝區顯示在與背景緩衝區不同的介面卡上時,會發生顯著的降低效能。 如需詳細資訊,請參閱 WPF 和 Direct3D9 互通。
效能摘要
下表顯示前端緩衝區更新做為作業系統、像素格式和表面鎖定功能的效能。 前端緩衝區和背景緩衝區會假設位於相同的介面卡上。 根據介面卡組態,硬體更新通常較軟體更新快得多。
表面像素格式 | Windows Vista、WDDM 和 9Ex | 其他 Windows Vista 設定 | Windows XP SP3 或 SP2 與 Hotfix | Windows XP SP2 |
---|---|---|---|---|
D3DFMT_X8R8G8B8 (不可鎖定) | 硬體更新 | 軟體更新 | 軟體更新 | 軟體更新 |
D3DFMT_X8R8G8B8 (可鎖定) | 硬體更新 | 軟體更新 | 硬體更新 | 硬體更新 |
D3DFMT_A8R8G8B8 (不可鎖定) | 硬體更新 | 軟體更新 | 軟體更新 | 軟體更新 |
D3DFMT_A8R8G8B8 (可鎖定) | 硬體更新 | 軟體更新 | 硬體更新 | 軟體更新 |