Jenis Perangkat dan Persyaratan Pemrosesan Vertex (Direct3D 9)
Performa operasi pemrosesan vertex, termasuk transformasi dan pencahayaan, sangat bergantung pada di mana buffer vertex ada dalam memori dan jenis perangkat penyajian apa yang digunakan. Aplikasi mengontrol alokasi memori untuk buffer vertex saat dibuat. Ketika bendera memori D3DPOOL_SYSTEMMEM diatur, buffer vertex dibuat dalam memori sistem. Ketika bendera memori D3DPOOL_DEFAULT digunakan, driver perangkat menentukan di mana memori untuk buffer vertex paling baik dialokasikan, sering disebut sebagai memori optimal driver. Memori optimal driver dapat berupa memori video lokal, memori video nonlokal, atau memori sistem.
Mengatur konstanta D3DUSAGE_SOFTWAREPROCESSING dengan IDirect3DDevice9::CreateVertexBuffer memungkinkan pemrosesan vertex perangkat lunak pada data buffer vertex. Bendera ini diperlukan untuk pemrosesan vertex perangkat lunak saat dalam mode campuran. Bendera mungkin tidak digunakan untuk mode pemrosesan puncak perangkat keras. Buffer vertex yang digunakan dengan pemrosesan vertex perangkat lunak meliputi hal berikut:
- Semua aliran input untuk IDirect3DDevice9::P rocessVertices.
- Semua aliran input untuk IDirect3DDevice9::D rawPrimitive dan IDirect3DDevice9::D rawIndexedPrimitive.
Penalaran yang Anda gunakan untuk menentukan lokasi memori - sistem atau driver optimal - untuk buffer vertex sama dengan untuk tekstur. Pemrosesan vertex, termasuk transformasi dan pencahayaan, dalam perangkat keras bekerja paling baik ketika buffer vertex dialokasikan dalam memori optimal driver, sementara pemrosesan vertex perangkat lunak bekerja paling baik dengan buffer vertex yang dialokasikan dalam memori sistem. Untuk tekstur, rasterisasi perangkat keras berfungsi paling baik ketika tekstur dialokasikan dalam memori optimal driver, sementara rasterisasi perangkat lunak berfungsi paling baik dengan tekstur memori sistem.
Microsoft Direct3D 9 mendukung pemrosesan simpul mandiri, tanpa merender primitif apa pun dengan metode IDirect3DDevice9::P rocessVertices . Pemrosesan vertex mandiri ini selalu dilakukan dalam perangkat lunak pada prosesor host. Karena itu, buffer vertex yang digunakan sebagai sumber yang diatur dengan IDirect3DDevice9::SetStreamSource harus dibuat dengan bendera D3DUSAGE_SOFTWAREPROCESSING. Fungsionalitas yang disediakan oleh IDirect3DDevice9::P rocessVertices identik dengan metode IDirect3DDevice9::D rawPrimitive dan IDirect3DDevice9::D rawIndexedPrimitive saat menggunakan pemrosesan verteks perangkat lunak.
Jika aplikasi Anda melakukan pemrosesan puncaknya sendiri dan melewati simpul yang diubah, dinyalakan, dan diklip ke metode penyajian, maka aplikasi dapat langsung menulis simpul ke buffer puncak yang dialokasikan dalam memori optimal driver. Teknik ini mencegah operasi salinan yang berlebihan nanti. Perhatikan bahwa teknik ini tidak akan berfungsi dengan baik jika aplikasi Anda membaca data kembali dari buffer vertex, karena operasi baca yang dilakukan oleh host dari memori optimal driver bisa sangat lambat. Oleh karena itu, jika aplikasi Anda perlu membaca selama pemrosesan atau menulis data ke buffer secara erratis, buffer vertex memori sistem adalah pilihan yang lebih baik.
Saat menggunakan fitur pemrosesan vertex Direct3D (dengan meneruskan simpul yang tidak ditransformasi ke metode penyajian vertex-buffer), pemrosesan dapat terjadi di perangkat keras atau perangkat lunak tergantung pada jenis perangkat dan bendera pembuatan perangkat. Disarankan agar buffer vertex dialokasikan di kumpulan D3DPOOL_DEFAULT untuk performa terbaik dalam hampir semua kasus. Saat perangkat menggunakan pemrosesan puncak perangkat keras, ada sejumlah pengoptimalan tambahan yang dapat dilakukan berdasarkan bendera D3DUSAGE_DYNAMIC dan D3DUSAGE_WRITEONLY. Lihat IDirect3DDevice9::CreateVertexBuffer untuk informasi selengkapnya tentang menggunakan bendera ini.
Topik terkait