Důležité informace o výkonu pro interoperabilitu Direct3D9 a WPF
Obsah Direct3D9 můžete hostovat pomocí třídy D3DImage. Hostování obsahu Direct3D9 může ovlivnit výkon vaší aplikace. Toto téma popisuje osvědčené postupy pro optimalizaci výkonu při hostování obsahu Direct3D9 v aplikaci WINDOWS Presentation Foundation (WPF). Mezi tyto osvědčené postupy patří použití D3DImage a osvědčených postupů při používání displejů se systémem Windows Vista, Windows XP a více monitorů.
Poznámka
Příklady kódu, které demonstrují tyto osvědčené postupy, najdete v tématu WPF a Direct3D9 Interoperation.
Použití D3DImage střídmě
Obsah Direct3D9 hostovaný v instanci D3DImage se nevykresluje tak rychle jako v čistě direct3D aplikaci. Kopírování povrchu a vyprázdnění vyrovnávací paměti příkazů může být nákladné operace. S rostoucím počtem instancí D3DImage dochází k častějšímu vyprázdnění paměti a snížení výkonu. Proto byste měli používat D3DImage střídmě.
Osvědčené postupy ve Windows Vista
Pro zajištění nejlepšího výkonu v systému Windows Vista s displejem nakonfigurovaným pro použití modelu ovladače zobrazení Windows (WDDM) vytvořte povrch Direct3D9 na zařízení IDirect3DDevice9Ex
. To umožňuje sdílení povrchu. Grafická karta musí podporovat možnosti ovladače D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES
a D3DCAPS2_CANSHARERESOURCE
v systému Windows Vista. Jakékoli další nastavení způsobí, že se povrch zkopíruje prostřednictvím softwaru, což výrazně snižuje výkon.
Poznámka
Pokud systém Windows Vista má displej nakonfigurovaný tak, aby používal model ovladače zobrazení systému Windows XP (XDDM), povrch se vždy kopíruje prostřednictvím softwaru bez ohledu na nastavení. Se správným nastavením a grafickou kartou uvidíte lepší výkon v systému Windows Vista při použití WDDM, protože kopie povrchu se provádějí v hardwaru.
Osvědčené postupy ve Windows XP
Pro zajištění nejlepšího výkonu v systému Windows XP, který používá model ovladače zobrazení systému Windows XP (XDDM), vytvořte zamknutelnou plochu, která se chová správně při zavolání metody IDirect3DSurface9::GetDC
. Interně metoda BitBlt
přenáší povrch mezi zařízeními v hardwaru. Metoda GetDC
vždy funguje na povrchu XRGB. Pokud však klientský počítač používá systém Windows XP s aktualizací SP3 nebo SP2 a pokud má klient také opravu hotfix pro funkci vrstvené okno, tato metoda funguje pouze na plochách ARGB. Grafická karta musí podporovat schopnost ovladače D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES
.
16bitová hloubka barev displeje na pracovní ploše může výrazně snížit výkon. Doporučuje se 32bitový systém.
Pokud vyvíjíte pro systém Windows Vista a Windows XP, otestujte výkon v systému Windows XP. Nedostatek paměti videa v systému Windows XP je problém. Kromě toho D3DImage v systému Windows XP využívá více paměti videa a šířky pásma než windows Vista WDDM, protože je nutné dodatečné kopírování paměti videa. Proto můžete očekávat, že výkon bude horší v systému Windows XP než v systému Windows Vista pro stejný video hardware.
Poznámka
XDDM je k dispozici v systému Windows XP i Windows Vista; wdDM je však k dispozici pouze v systému Windows Vista.
Obecné osvědčené postupy
Při vytváření zařízení použijte příznak D3DCREATE_MULTITHREADED
vytvoření. To snižuje výkon, ale vykreslovací systém WPF volá metody na tomto zařízení z jiného vlákna. Ujistěte se, že se správně řídíte zamykacím protokolem, aby žádná dvě vlákna nepřistupovala k zařízení současně.
Pokud je vaše renderování prováděno ve spravovaném vlákně WPF, důrazně doporučujeme vytvořit zařízení s příznakem vytvoření D3DCREATE_FPU_PRESERVE
. Bez tohoto nastavení může vykreslování D3D snížit přesnost operací s dvojitou přesností WPF a zavést problémy s vykreslováním.
Dlaždicování D3DImage je rychlé, pokud nedlaždicujete povrch, který není mocninou dvou a nemá hardwarovou podporu, nebo pokud dlaždicujete DrawingBrush nebo VisualBrush, které obsahují D3DImage.
Osvědčené postupy pro displeje s více monitory
Pokud používáte počítač s více monitory, měli byste postupovat podle výše popsaných osvědčených postupů. Existuje také několik dalších aspektů výkonu konfigurace s více monitory.
Když vytvoříte vyrovnávací paměť zpět, vytvoří se na konkrétním zařízení a adaptéru, ale WPF může zobrazit přední vyrovnávací paměť na jakémkoli adaptéru. Kopírování mezi adaptéry za účelem aktualizace frontové vyrovnávací paměti může být velmi nákladné. V systému Windows Vista, který je nakonfigurován pro použití WDDM s více grafickými kartami a se zařízením IDirect3DDevice9Ex
, pokud je přední vyrovnávací paměť na jiném adaptéru stejné grafické karty, nedochází ke zhoršení výkonu. V systémech Windows XP a XDDM s více grafickými kartami dochází k významné penalizaci výkonu, když je přední buffer zobrazen na jiném adaptéru než zadní buffer. Další informace naleznete v tématu WPF a Direct3D9 Interoperation.
Souhrn výkonu
Následující tabulka ukazuje výkon aktualizace front bufferu jako funkci operačního systému, formátu pixelů a zamykatelnosti povrchu. Předpokládá se, že přední vyrovnávací paměť a zadní vyrovnávací paměť jsou na stejném adaptéru. V závislosti na konfiguraci adaptéru jsou aktualizace hardwaru obecně mnohem rychlejší než aktualizace softwaru.
Formát pixelu Surface | Windows Vista, WDDM a 9Ex | Další konfigurace systému Windows Vista | Windows XP SP3 nebo SP2 s opravou hotfix | Windows XP SP2 |
---|---|---|---|---|
D3DFMT_X8R8G8B8 (nezamknutelné) | aktualizace hardwaru | Aktualizace softwaru | Aktualizace softwaru | Aktualizace softwaru |
D3DFMT_X8R8G8B8 (zamknutelné) | aktualizace hardwaru | Aktualizace softwaru | Aktualizace hardwaru | Aktualizace hardwaru |
D3DFMT_A8R8G8B8 (nelze zamknout) | aktualizace hardwaru | Aktualizace softwaru | Aktualizace softwaru | Aktualizace softwaru |
D3DFMT_A8R8G8B8 (zamknutelné) | Aktualizace hardwaru | Aktualizace softwaru | Aktualizace hardwaru | Aktualizace softwaru |
Viz také
.NET Desktop feedback