enumerasi D3D11_USAGE (d3d11.h)
Mengidentifikasi penggunaan sumber daya yang diharapkan selama penyajian. Penggunaan secara langsung mencerminkan apakah sumber daya dapat diakses oleh CPU dan/atau unit pemrosesan grafis (GPU).
Sintaks
typedef enum D3D11_USAGE {
D3D11_USAGE_DEFAULT = 0,
D3D11_USAGE_IMMUTABLE = 1,
D3D11_USAGE_DYNAMIC = 2,
D3D11_USAGE_STAGING = 3
} ;
Konstanta
D3D11_USAGE_DEFAULT Nilai: 0 Sumber daya yang memerlukan akses baca dan tulis oleh GPU. Ini kemungkinan menjadi pilihan penggunaan yang paling umum. |
D3D11_USAGE_IMMUTABLE Nilai: 1 Sumber daya yang hanya dapat dibaca oleh GPU. Ini tidak dapat ditulis oleh GPU, dan tidak dapat diakses sama sekali oleh CPU. Jenis sumber daya ini harus diinisialisasi saat dibuat, karena tidak dapat diubah setelah pembuatan. |
D3D11_USAGE_DYNAMIC Nilai: 2 Sumber daya yang dapat diakses oleh GPU (baca saja) dan CPU (tulis saja). Sumber daya dinamis adalah pilihan yang baik untuk sumber daya yang akan diperbarui oleh CPU setidaknya sekali per bingkai. Untuk memperbarui sumber daya dinamis, gunakan metode Peta . Untuk informasi tentang cara menggunakan sumber daya dinamis, lihat Cara: Menggunakan sumber daya dinamis. |
D3D11_USAGE_STAGING Nilai: 3 Sumber daya yang mendukung transfer data (salin) dari GPU ke CPU. |
Keterangan
Aplikasi mengidentifikasi cara sumber daya dimaksudkan untuk digunakan (penggunaannya) dalam deskripsi sumber daya. Ada beberapa struktur untuk membuat sumber daya termasuk: D3D11_TEXTURE1D_DESC, D3D11_TEXTURE2D_DESC, D3D11_TEXTURE3D_DESC, dan D3D11_BUFFER_DESC.
Perbedaan antara Direct3D 9 dan Direct3D 10/11: Di Direct3D 9, Anda menentukan jenis memori yang harus dibuat sumber daya pada waktu pembuatan sumber daya (menggunakan D3DPOOL). Ini adalah tugas aplikasi untuk memutuskan kumpulan memori apa yang akan memberikan kombinasi fungsionalitas dan performa terbaik. Di Direct3D 10/11, aplikasi tidak lagi menentukan jenis memori apa (kumpulan) untuk membuat sumber daya. Sebagai gantinya, Anda menentukan penggunaan sumber daya yang dimaksudkan, dan membiarkan runtime (bersama dengan driver dan manajer memori) memilih jenis memori yang akan mencapai performa terbaik. |
Pembatasan Penggunaan Sumber Daya
Setiap penggunaan menentukan tradeoff antara aksesibilitas untuk CPU dan aksesibilitas untuk GPU. Secara umum, akses berkinerja lebih tinggi untuk salah satu dari dua prosesor ini berarti akses berkinerja lebih rendah untuk prosesor lainnya. Pada kedua ekstrem adalah penggunaan D3D11_USAGE_DEFAULT dan D3D11_USAGE_STAGING . D3D11_USAGE_DEFAULT membatasi akses hampir seluruhnya ke GPU. D3D11_USAGE_STAGING membatasi akses hampir seluruhnya ke CPU dan hanya mengizinkan transfer data (salinan) sumber daya antara GPU dan CPU. Anda dapat melakukan operasi salin ini melalui metode ID3D11DeviceContext::CopySubresourceRegion dan ID3D11DeviceContext::CopyResource . Anda juga dapat menggunakan metode salin ini untuk menyalin data antara dua sumber daya dengan penggunaan yang sama. Anda juga dapat menggunakan metode ID3D11DeviceContext::UpdateSubresource untuk menyalin memori langsung dari pointer yang disediakan CPU ke sumber daya apa pun, yang paling berguna sumber daya dengan D3D11_USAGE_DEFAULT.D3D11_USAGE_DYNAMIC penggunaan adalah kasus khusus yang mengoptimalkan aliran data dari CPU ke GPU ketika CPU menghasilkan data tersebut dengan cepat dan mengirim data tersebut dengan frekuensi tinggi. D3D11_USAGE_DYNAMIC biasanya digunakan pada sumber daya dengan data vertex dan pada buffer konstan. Gunakan metode ID3D11DeviceContext::Map dan ID3D11DeviceContext::Unmap untuk menulis data ke sumber daya ini. Untuk mencapai performa tertinggi untuk data yang dikonsumsi secara serial, seperti data vertex, gunakan urutan D3D11_MAP_WRITE_NO_OVERWRITE dan D3D11_MAP_WRITE_DISCARD . Untuk informasi selengkapnya tentang urutan ini, lihat Penggunaan Umum D3D11_MAP_WRITE_DISCARD dengan D3D11_MAP_WRITE_NO_OVERWRITE.
D3D11_USAGE_IMMUTABLE penggunaan adalah kasus khusus lain yang menyebabkan GPU menghasilkan data hanya sekali saat Anda membuat sumber daya. D3D11_USAGE_IMMUTABLE sangat cocok untuk data seperti tekstur karena data tersebut biasanya dibaca ke dalam memori dari beberapa format file. Oleh karena itu, ketika Anda membuat tekstur dengan D3D11_USAGE_IMMUTABLE, GPU langsung membaca tekstur tersebut ke dalam memori.
Gunakan tabel berikut untuk memilih penggunaan yang paling tepat menggambarkan bagaimana sumber daya perlu diakses oleh CPU dan/atau GPU. Tentu saja, akan ada tradeoff performa.
Penggunaan Sumber Daya | Default | Dinamis | Tak bisa diubah | Staging |
---|---|---|---|---|
GPU-Read | ya | ya | ya | Ya¹ |
GPU-Write | ya | Ya¹ | ||
CPU-Read | Ya¹ | |||
CPU-Write | ya | Ya¹ |
1 - GPU membaca atau menulis sumber daya dengan penggunaan D3D11_USAGE_STAGING dibatasi untuk menyalin operasi. Anda menggunakan ID3D11DeviceContext::CopySubresourceRegion dan ID3D11DeviceContext::CopyResource untuk operasi salin ini. Selain itu, karena format stensil kedalaman dan tata letak multisample adalah detail implementasi dari desain GPU tertentu, sistem operasi tidak dapat mengekspos format dan tata letak ini ke CPU secara umum. Oleh karena itu, sumber daya penahapan tidak dapat menjadi buffer stensil kedalaman atau target render multisampled.
Opsi Pengikatan Sumber Daya
Untuk memaksimalkan performa, tidak semua opsi penggunaan sumber daya dapat digunakan sebagai sumber daya input atau output ke alur. Tabel ini mengidentifikasi batasan ini.Sumber daya dapat terikat sebagai | Default | Dinamis | Tak bisa diubah | Staging |
---|---|---|---|---|
Input ke Tahap | ya² | Ya³ | ya | |
Output dari Tahap | ya² |
- 2 - Jika terikat sebagai input dan output menggunakan tampilan yang berbeda, setiap tampilan harus menggunakan subresource yang berbeda.
- 3 - Sumber daya hanya dapat dibuat dengan satu subsumber daya. Sumber daya tidak boleh berupa array tekstur. Sumber daya tidak boleh berupa rantai mipmap.
Persyaratan
Persyaratan | Nilai |
---|---|
Header | d3d11.h |