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_TEXTURESD3DCAPS2_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 表面,或者如果您並排顯示包含 D3DImageDrawingBrushVisualBrush,否則並排顯示 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 (可鎖定) 硬體更新 軟體更新 硬體更新 軟體更新

另請參閱