Bagikan melalui


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

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.

Sumber daya (Direct3D 10)