Mengatur dan Mengisi Timbunan Deskriptor
Jenis heap deskriptor yang dapat diatur pada daftar perintah adalah yang berisi deskriptor yang tabel deskriptornya dapat digunakan (paling banyak satu dari masing-masing pada satu waktu).
Mengatur timbunan deskriptor
Jenis timbunan deskriptor yang dapat diatur pada daftar perintah adalah:
D3D12_DESCRIPTOR_HEAP_TYPE_CBV_SRV_UAV
D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER
Tumpukan yang diatur pada daftar perintah juga harus dibuat sebagai shader terlihat. Ada tiga jenis daftar perintah: DIRECT, BUNDLE, dan COMPUTE.
Setelah tumpukan deskriptor diatur pada daftar perintah, panggilan berikutnya yang menentukan tabel deskriptor merujuk ke tumpukan deskriptor saat ini. Status tabel deskriptor tidak terdefinisi di awal daftar perintah dan setelah heap deskriptor diubah pada daftar perintah. Mengatur tumpuk deskriptor yang sama secara berlebihan tidak menyebabkan pengaturan tabel deskriptor tidak terdefinis.
Dalam bundel, sebaliknya, tumpukan deskriptor hanya dapat diatur sekali (panggilan redundan mengatur tumpukan yang sama dua kali tidak menghasilkan kesalahan); jika tidak, perilaku tidak terdefinis. Tumpukan deskriptor yang diatur harus cocok dengan status ketika daftar perintah apa pun memanggil bundel; jika tidak, perilaku tidak terdefinis. Ini memungkinkan bundel untuk mewarisi dan mengedit pengaturan tabel deskriptor daftar perintah. Bundel yang tidak mengubah tabel deskriptor (hanya mewarisinya) tidak perlu mengatur tumpukan deskriptor sama sekali dan hanya akan mewarisi dari daftar perintah panggilan.
Ketika tumpukan deskriptor diatur (menggunakan ID3D12GraphicsCommandList::SetDescriptorHeaps), semua tumpukan yang digunakan diatur dalam satu panggilan (dan semua tumpukan yang ditetapkan sebelumnya tidak diatur oleh panggilan). Paling banyak satu timbunan dari setiap jenis yang tercantum di atas dapat diatur dalam panggilan.
Mengisi timbunan deskriptor
Setelah aplikasi membuat tumpukan deskriptor, aplikasi kemudian dapat menggunakan metode pada perangkat untuk menghasilkan deskriptor langsung ke tumpukan atau menyalin deskriptor dari satu tempat ke tempat lain.
Konten awal memori tumpukan deskriptor tidak terdefinisi, jadi meminta GPU atau driver untuk mereferensikan memori yang tidak diinisialisasi untuk penyajian dapat menyebabkan hasil yang tidak terdefinisi seperti reset perangkat.
Jika aplikasi mengonfigurasi tumpukan deskriptor agar terlihat CPU, maka CPU dapat memanggil metode untuk membuat deskriptor ke dalam tumpukan dan menyalin dari tempat ke tempat (termasuk di seluruh tumpukan) secara langsung dan bebas. Jika tumpukan telah dikonfigurasi sebagai SHADER_VISIBLE, pembacaan oleh CPU tidak diizinkan.
Topik terkait