Share via


Direct3D9 和 WPF 互通性的效能考量

您可以使用 類別來裝載 Direct3D9 內容 D3DImage 。 裝載 Direct3D9 內容可能會影響應用程式的效能。 本主題描述在 Windows Presentation Foundation (WPF) 應用程式中裝載 Direct3D9 內容時將效能優化的最佳作法。 這些最佳做法包括當您使用 D3DImage Windows Vista、Windows XP 和多監視器顯示器時,如何使用 和最佳做法。

注意

如需示範這些最佳做法的程式碼範例,請參閱 WPF 和 Direct3D9 交互操作

使用 D3DImage 疏散

裝載于 實例的 D3DImage Direct3D9 內容不會像純 Direct3D 應用程式中一樣快轉譯。 複製介面並排清命令緩衝區可能是成本高昂的作業。 當實例數目 D3DImage 增加時,就會發生更多排清,而效能會降低。 因此,您應該謹慎使用 D3DImage

Windows Vista 上的最佳做法

為了在 Windows Vista 上使用設定為使用 Windows 顯示器驅動程式模型 (WDDM) 的顯示器獲得最佳效能,請在裝置上 IDirect3DDevice9Ex 建立您的 Direct3D9 表面。 這可啟用表面共用。 視訊卡必須支援 D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES Windows Vista 上的 和 D3DCAPS2_CANSHARERESOURCE 驅動程式功能。 任何其他設定都會讓表面透過軟體複製,進而大幅降低效能。

注意

如果 Windows Vista 的顯示器已設定為使用 Windows XP 顯示驅動程式模型 (XDDM),則不論設定為何,表面一律會透過軟體複製。 使用適當的設定和視訊卡時,當您使用 WDDM 時,您會在 Windows Vista 上看到更好的效能,因為表面複本是在硬體中執行。

Windows XP 的最佳做法

為了在 Windows XP 上使用 Windows XP 顯示驅動程式模型 (XDDM) 的最佳效能,請建立可在呼叫 方法時 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 上的視訊記憶體不足是個問題。 此外, D3DImage Windows XP 上的視訊記憶體和頻寬比 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 表面沒有硬體支援,或者如果您磚或包含 的 D3DImageVisualBrush ,否則拼 D3DImageDrawingBrush 是快速的。

多監視器顯示器的最佳做法

如果您使用具有多個監視器的電腦,您應該遵循先前所述的最佳做法。 多監視器組態也有一些額外的效能考慮。

當您建立後端緩衝區時,它會在特定裝置和配接器上建立,但 WPF 可能會在任何介面卡上顯示前端緩衝區。 跨介面卡複製以更新前端緩衝區可能非常昂貴。 在設定為使用 WDDM 搭配多個視訊卡和 IDirect3DDevice9Ex 裝置的 Windows Vista 上,如果前端緩衝區位於不同的介面卡上,但仍是相同的視訊卡,則不會降低效能。 不過,在具有多個視訊卡的 Windows XP 和 XDDM 上,當前端緩衝區顯示在與後端緩衝區不同的介面卡上時,會有顯著的效能損失。 如需詳細資訊,請參閱 WPF 和 Direct3D9 交互操作

效能摘要

下表顯示前端緩衝區更新作為作業系統、像素格式和表面鎖定功能的效能。 前端緩衝區和後端緩衝區會假設位於相同的配接器上。 根據配接器組態,硬體更新通常比軟體更新快得多。

Surface 像素格式 Windows Vista、WDDM 和 9Ex 其他 Windows Vista 設定 Windows XP SP3 或 SP2 w/ Hotfix Windows XP SP2
D3DFMT_X8R8G8B8 (不可鎖定) 硬體更新 軟體更新 軟體更新 軟體更新
D3DFMT_X8R8G8B8 (可鎖定) 硬體更新 軟體更新 硬體更新 硬體更新
D3DFMT_A8R8G8B8 (不可鎖定) 硬體更新 軟體更新 軟體更新 軟體更新
D3DFMT_A8R8G8B8 (可鎖定) 硬體更新 軟體更新 硬體更新 軟體更新

另請參閱