Pertimbangan Performa untuk Interoperabilitas Direct3D9 dan WPF
Anda dapat menghosting konten Direct3D9 dengan menggunakan D3DImage kelas . Hosting konten Direct3D9 dapat memengaruhi performa aplikasi Anda. Topik ini menjelaskan praktik terbaik untuk mengoptimalkan performa saat menghosting konten Direct3D9 dalam aplikasi Windows Presentation Foundation (WPF). Praktik terbaik ini termasuk cara menggunakan D3DImage dan praktik terbaik saat Anda menggunakan tampilan Windows Vista, Windows XP, dan multi-monitor.
Catatan
Untuk contoh kode yang menunjukkan praktik terbaik ini, lihat Interoperasi WPF dan Direct3D9.
Gunakan D3DImage Sparingly
Konten Direct3D9 yang D3DImage dihosting dalam instans tidak disajikan secepat dalam aplikasi Direct3D murni. Menyalin permukaan dan menyiram buffer perintah dapat menjadi operasi yang mahal. Ketika jumlah D3DImage instans meningkat, lebih banyak pembilasan terjadi, dan penurunan performa. Oleh karena itu, Anda harus menggunakan D3DImage dengan hemat.
Praktik Terbaik di Windows Vista
Untuk performa terbaik pada Windows Vista dengan tampilan yang dikonfigurasi untuk menggunakan Windows Display Driver Model (WDDM), buat permukaan Direct3D9 Anda pada IDirect3DDevice9Ex
perangkat. Ini memungkinkan berbagi permukaan. Kartu video harus mendukung D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES
kemampuan dan D3DCAPS2_CANSHARERESOURCE
driver pada Windows Vista. Pengaturan lain menyebabkan permukaan disalin melalui perangkat lunak, yang mengurangi performa secara signifikan.
Catatan
Jika Windows Vista memiliki tampilan yang dikonfigurasi untuk menggunakan Windows XP Display Driver Model (XDDM), permukaan selalu disalin melalui perangkat lunak, terlepas dari pengaturannya. Dengan pengaturan dan kartu video yang tepat, Anda akan melihat performa yang lebih baik pada Windows Vista ketika Anda menggunakan WDDM karena salinan permukaan dilakukan di perangkat keras.
Praktik Terbaik di Windows XP
Untuk performa terbaik pada Windows XP, yang menggunakan Windows XP Display Driver Model (XDDM), buat permukaan yang dapat dikunci yang berperilaku dengan benar ketika metode dipanggil IDirect3DSurface9::GetDC
. Secara internal, metode mentransfer BitBlt
permukaan di seluruh perangkat dalam perangkat keras. Metode ini GetDC
selalu berfungsi pada permukaan XRGB. Namun, jika komputer klien menjalankan Windows XP dengan SP3 atau SP2, dan jika klien juga memiliki perbaikan untuk fitur jendela berlapis, metode ini hanya berfungsi pada permukaan ARGB. Kartu video harus mendukung D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES
kemampuan driver.
Kedalaman tampilan desktop 16-bit dapat mengurangi performa secara signifikan. Desktop 32-bit disarankan.
Jika Anda mengembangkan untuk Windows Vista dan Windows XP, uji performa pada Windows XP. Kehabisan memori video pada Windows XP menjadi perhatian. Selain itu, D3DImage pada Windows XP menggunakan lebih banyak memori video dan bandwidth daripada Windows Vista WDDM, karena salinan memori video tambahan yang diperlukan. Oleh karena itu, Anda dapat mengharapkan performa menjadi lebih buruk pada Windows XP daripada pada Windows Vista untuk perangkat keras video yang sama.
Catatan
XDDM tersedia di Windows XP dan Windows Vista; namun, WDDM hanya tersedia di Windows Vista.
Praktik Terbaik Umum
Saat Anda membuat perangkat, gunakan D3DCREATE_MULTITHREADED
bendera pembuatan. Ini mengurangi performa, tetapi sistem penyajian WPF memanggil metode pada perangkat ini dari utas lain. Pastikan untuk mengikuti protokol penguncian dengan benar, sehingga tidak ada dua utas yang mengakses perangkat secara bersamaan.
Jika penyajian Anda dilakukan pada utas yang dikelola WPF, sangat disarankan agar Anda membuat perangkat dengan D3DCREATE_FPU_PRESERVE
bendera pembuatan. Tanpa pengaturan ini, penyajian D3D dapat mengurangi akurasi operasi presisi ganda WPF dan memperkenalkan masalah penyajian.
Ubin D3DImage cepat, kecuali Anda petak permukaan non-pow2 tanpa dukungan perangkat keras, atau jika Anda petak peta DrawingBrush atau VisualBrush yang berisi D3DImage.
Praktik Terbaik untuk Tampilan Multi-Monitor
Jika Anda menggunakan komputer yang memiliki beberapa monitor, Anda harus mengikuti praktik terbaik yang dijelaskan sebelumnya. Ada juga beberapa pertimbangan performa tambahan untuk konfigurasi multi-monitor.
Saat Anda membuat buffer belakang, buffer tersebut dibuat pada perangkat dan adaptor tertentu, tetapi WPF dapat menampilkan buffer depan pada adaptor apa pun. Menyalin di seluruh adaptor untuk memperbarui buffer depan bisa sangat mahal. Pada Windows Vista yang dikonfigurasi untuk menggunakan WDDM dengan beberapa kartu video dan dengan IDirect3DDevice9Ex
perangkat, jika buffer depan berada pada adaptor yang berbeda tetapi masih kartu video yang sama, tidak ada penalti performa. Namun, pada Windows XP dan XDDM dengan beberapa kartu video, ada penalti performa yang signifikan ketika buffer depan ditampilkan pada adaptor yang berbeda dari buffer belakang. Untuk informasi selengkapnya, lihat Interoperatur WPF dan Direct3D9.
Ringkasan Performa
Tabel berikut menunjukkan performa pembaruan buffer depan sebagai fungsi sistem operasi, format piksel, dan penguncian permukaan. Buffer depan dan buffer belakang diasumsikan berada pada adaptor yang sama. Bergantung pada konfigurasi adaptor, pembaruan perangkat keras umumnya jauh lebih cepat daripada pembaruan perangkat lunak.
Format piksel Surface | Windows Vista, WDDM, dan 9Ex | Konfigurasi Windows Vista lainnya | Windows XP SP3 atau SP2 w/ hotfix | Windows XP SP2 |
---|---|---|---|---|
D3DFMT_X8R8G8B8 (tidak dapat dikunci) | Pembaruan Perangkat Keras | Pembaruan Perangkat Lunak | Pembaruan Perangkat Lunak | Pembaruan Perangkat Lunak |
D3DFMT_X8R8G8B8 (dapat dikunci) | Pembaruan Perangkat Keras | Pembaruan Perangkat Lunak | Pembaruan Perangkat Keras | Pembaruan Perangkat Keras |
D3DFMT_A8R8G8B8 (tidak dapat dikunci) | Pembaruan Perangkat Keras | Pembaruan Perangkat Lunak | Pembaruan Perangkat Lunak | Pembaruan Perangkat Lunak |
D3DFMT_A8R8G8B8 (dapat dikunci) | Pembaruan Perangkat Keras | Pembaruan Perangkat Lunak | Pembaruan Perangkat Keras | Pembaruan Perangkat Lunak |
Baca juga
.NET Desktop feedback