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.

Catatan Anda dapat secara teknis menggunakan ID3D11DeviceContext::UpdateSubresource untuk menyalin ke sumber daya dengan penggunaan apa pun kecuali D3D11_USAGE_IMMUTABLE. Namun, sebaiknya gunakan ID3D11DeviceContext::UpdateSubresource untuk memperbarui sumber daya hanya dengan D3D11_USAGE_DEFAULT. Sebaiknya gunakan ID3D11DeviceContext::Map dan ID3D11DeviceContext::Unmap untuk memperbarui sumber daya dengan D3D11_USAGE_DYNAMIC karena itu adalah tujuan khusus sumber daya D3D11_USAGE_DYNAMIC , dan oleh karena itu merupakan jalur yang paling dioptimalkan.
 
PerhatikanD3D11_USAGE_DYNAMIC sumber daya menggunakan kemampuan perangkat keras tertentu. Oleh karena itu, gunakan dengan hemat. Driver tampilan biasanya mengalokasikan memori untuk sumber daya D3D11_USAGE_DYNAMIC dengan algoritma penembolokan yang mendukung penulisan CPU dan menghambat pembacaan CPU. Selain itu, memori di balik sumber daya D3D11_USAGE_DYNAMIC bahkan mungkin tidak sama untuk panggilan berturut-turut ke ID3D11DeviceContext::Map. Oleh karena itu, jangan mengharapkan performa tinggi atau bahkan pembacaan CPU yang konsisten dari sumber daya D3D11_USAGE_DYNAMIC .
 
CatatanID3D11DeviceContext::CopyStructureCount adalah kasus khusus salinan GPU-ke-CPU. Gunakan ID3D11DeviceContext::CopyStructureCount hanya dengan tampilan akses buffer (UAV) yang tidak diurutkan.
 

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

Lihat juga

Enumerasi Sumber Daya