Pertimbangan Performa untuk Interoperabilitas Direct3D9 dan WPF

Anda dapat menghosting konten Direct3D9 dengan menggunakan kelas D3DImage. 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 serta praktik saat Anda menggunakan Windows Vista, Windows XP, dan layar multi-monitor.

Nota

Untuk contoh kode yang menunjukkan praktik terbaik ini, lihat WPF dan Interoperasi Direct3D9.

Gunakan D3DImage secukupnya

Konten Direct3D9 yang dihosting dalam instans D3DImage tidak disajikan secepat dalam aplikasi Direct3D murni. Menyalin permukaan dan mengosongkan buffer perintah dapat menjadi operasi yang mahal. Seiring meningkatnya jumlah instans D3DImage, semakin banyak pembilasan, dan performa menurun. 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 perangkat IDirect3DDevice9Ex. Ini memungkinkan berbagi layar. Kartu video harus mendukung kemampuan driver D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES dan D3DCAPS2_CANSHARERESOURCE pada Windows Vista. Pengaturan lainnya menyebabkan permukaan disalin melalui perangkat lunak, yang mengurangi kinerja secara signifikan.

Nota

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 IDirect3DSurface9::GetDC dipanggil. Secara internal, metode BitBlt mentransfer permukaan antar perangkat dengan menggunakan perangkat keras. Metode 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 kemampuan driver D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES.

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.

Nota

XDDM tersedia di Windows XP dan Windows Vista; namun, WDDM hanya tersedia di Windows Vista.

Praktik Terbaik Umum

Saat Anda membuat perangkat, gunakan bendera pembuatan D3DCREATE_MULTITHREADED. 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 bendera pembuatan D3DCREATE_FPU_PRESERVE. Tanpa pengaturan ini, penyajian D3D dapat mengurangi akurasi operasi presisi ganda WPF dan memperkenalkan masalah penyajian.

Memetakan ubin D3DImage cepat, kecuali jika Anda menyusun permukaan yang bukan pangkat dua tanpa dukungan perangkat keras, atau jika Anda menyusun 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 perangkat IDirect3DDevice9Ex, 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 penurunan kinerja yang signifikan ketika buffer depan ditampilkan pada adaptor yang berbeda dengan buffer belakang. Untuk informasi selengkapnya, lihat interoperabilitas WPF dan Direct3D9.

Ringkasan Kinerja

Tabel berikut menunjukkan performa pembaruan buffer tampilan depan sebagai fungsi sistem operasi, format piksel, dan kemampuan 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 Microsoft 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

Lihat juga