Memilih Sumber Daya (Direct3D 10)
Sumber daya adalah kumpulan data yang digunakan oleh alur 3D. Membuat sumber daya dan menentukan perilakunya adalah langkah pertama menuju pemrograman aplikasi Anda. Panduan ini mencakup topik dasar untuk memilih sumber daya yang diperlukan oleh aplikasi Anda.
- Mengidentifikasi Tahapan Alur yang Membutuhkan Sumber Daya
- Mengidentifikasi bagaimana setiap sumber daya akan digunakan
- Mengikat Sumber Daya ke Tahapan Alur
- Topik terkait
Mengidentifikasi Tahapan Alur yang Membutuhkan Sumber Daya
Langkah pertama adalah memilih tahap alur (atau tahapan) yang akan menggunakan sumber daya. Artinya, identifikasi setiap tahap yang akan membaca data dari sumber daya serta tahapan yang akan menulis data ke sumber daya. Mengetahui tahapan alur tempat sumber daya akan digunakan menentukan API yang akan dipanggil untuk mengikat sumber daya ke tahap.
Tabel ini mencantumkan jenis sumber daya yang dapat terikat ke setiap tahap alur. Ini termasuk apakah sumber daya dapat diikat sebagai input atau output, serta API ikatan.
Tahap Alur | Masuk/Keluar | Sumber daya | Jenis Sumber Daya | Ikat API |
---|---|---|---|---|
Perakitan Input | Dalam | Buffer Puncak | Buffer | IASetVertexBuffers |
Perakitan Input | Dalam | Penyangga Indeks | Buffer | IASetIndexBuffer |
Tahapan Shader | Dalam | Shader-ResourceView | Buffer, Texture1D, Texture2D, Texture3D | VSSetShaderResources, GSSetShaderResources, PSSetShaderResources |
Tahapan Shader | Dalam | Buffer Shader-Constant | Buffer | VSSetConstantBuffers, GSSetConstantBuffers, PSSetConstantBuffers |
Output Aliran | Keluar | Buffer | Buffer | SOSetTargets |
Penggabungan Output | Keluar | Tampilan target render | Buffer, Texture1D, Texture2D, Texture3D | OMSetRenderTargets |
Penggabungan Output | Keluar | Tampilan Kedalaman/Stensil | Texture1D, Texture2D | OMSetRenderTargets |
Mengidentifikasi bagaimana setiap sumber daya akan digunakan
Setelah Anda memilih tahapan alur yang akan digunakan aplikasi Anda (dan oleh karena itu sumber daya yang akan diperlukan setiap tahap), langkah selanjutnya adalah menentukan bagaimana setiap sumber daya akan digunakan, yaitu, apakah sumber daya dapat diakses oleh CPU atau GPU.
Perangkat keras yang dijalankan aplikasi Anda akan memiliki minimal satu CPU dan satu GPU. Untuk memilih nilai penggunaan, pertimbangkan jenis prosesor mana yang perlu dibaca atau ditulis ke sumber daya dari opsi berikut (lihat D3D10_USAGE).
Penggunaan Sumber Daya | Dapat diperbarui oleh | Frekuensi Pembaruan |
---|---|---|
Default | GPU | Jarang |
Dinamis | CPU | Sering |
Staging | GPU | n/a |
Tak bisa diubah | CPU (hanya pada waktu pembuatan sumber daya) | n/a |
Penggunaan default harus digunakan untuk sumber daya yang diharapkan jarang diperbarui oleh CPU (kurang dari sekali per bingkai). Idealnya, CPU tidak akan pernah menulis langsung ke sumber daya dengan penggunaan default sehingga menghindari potensi penalti performa.
Penggunaan dinamis harus digunakan untuk sumber daya yang relatif sering diperbarui CPU (sekali atau lebih per bingkai). Skenario umum untuk sumber daya dinamis adalah membuat puncak dinamis dan buffer indeks yang akan diisi pada runtime dengan data tentang geometri yang terlihat dari sudut pandang pengguna untuk setiap bingkai. Buffer ini hanya akan digunakan untuk merender geometri yang terlihat oleh pengguna untuk bingkai tersebut.
Penggunaan penahapan harus digunakan untuk menyalin data ke dan dari sumber daya lain. Skenario umum adalah menyalin data dalam sumber daya dengan penggunaan default (yang tidak dapat diakses CPU) ke sumber daya dengan penggunaan penahapan (yang dapat diakses CPU).
Sumber daya yang tidak dapat diubah harus digunakan ketika data dalam sumber daya tidak akan pernah berubah.
Cara lain untuk melihat ide yang sama adalah dengan memikirkan apa yang dilakukan aplikasi dengan sumber daya.
Cara Aplikasi menggunakan Sumber Daya | Penggunaan Sumber Daya |
---|---|
Muat sekali dan jangan pernah perbarui | Tidak Dapat Diubah atau Default |
Aplikasi mengisi sumber daya berulang kali | Dinamis |
Merender ke tekstur | Default |
Akses CPU data GPU | Staging |
Jika Anda tidak yakin penggunaan apa yang harus dipilih, mulailah dengan penggunaan default karena diharapkan menjadi kasus yang paling umum. Buffer Shader-Constant adalah satu jenis sumber daya yang harus selalu memiliki penggunaan default.
Mengikat Sumber Daya ke Tahapan Alur
Sumber daya dapat terikat ke lebih dari satu tahap alur secara bersamaan selama pembatasan yang ditentukan saat sumber daya dibuat (bendera penggunaan, bendera ikatan, bendera akses cpu) terpenuhi. Lebih khusus lagi, sumber daya dapat diikat sebagai input dan output secara bersamaan selama membaca dan menulis bagian dari sumber daya tidak dapat terjadi pada saat yang sama.
Saat mengikat sumber daya, pikirkan tentang bagaimana GPU dan CPU akan mengakses sumber daya. Sumber daya yang dirancang untuk satu tujuan (tidak menggunakan beberapa bendera penggunaan, pengikatan, dan akses cpu) kemungkinan akan menghasilkan performa yang lebih baik.
Misalnya, pertimbangkan kasus target render yang digunakan sebagai tekstur beberapa kali. Mungkin lebih cepat untuk memiliki dua sumber daya: target render dan tekstur yang digunakan sebagai sumber daya shader. Setiap sumber daya hanya akan menggunakan satu bendera ikat (D3D10_BIND_RENDER_TARGET atau D3D10_BIND_SHADER_RESOURCE). Data akan disalin dari tekstur target render ke tekstur shader menggunakan CopyResource atau CopySubresourceRegion. Ini dapat meningkatkan performa dengan mengisolasi penulisan target render dari baca tekstur shader. Tentu saja, satu-satunya cara untuk memastikan adalah dengan menerapkan kedua pendekatan dan mengukur perbedaan performa dalam aplikasi khusus Anda.
Topik terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk