Bagikan melalui


Mengatur dan Mengisi Kumpulan Deskriptor

Jenis kumpulan deskriptor yang dapat diatur dalam daftar perintah adalah yang berisi deskriptor di mana tabel deskriptor dapat digunakan (paling banyak satu dari masing-masing dalam 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

Heap yang diatur pada daftar perintah juga harus dibuat agar terlihat oleh shader. 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 timbunan deskriptor diubah pada daftar perintah. Mengatur tumpukan deskriptor yang sama secara berlebihan tidak menyebabkan pengaturan tabel deskriptor tidak ditentukan.

Dalam bundel, sebaliknya, heap deskriptor hanya dapat diatur sekali (panggilan redundan mengatur heap yang sama dua kali tidak menimbulkan kesalahan); jika tidak, perilaku menjadi tidak terdefinisi. Tumpukan deskriptor yang diatur harus sesuai dengan keadaan ketika daftar perintah apa pun memanggil bundel; jika tidak, perilaku tidak ditentukan. 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 diatur sebelumnya dilepaskan oleh panggilan). Paling banyak satu timbunan dari setiap jenis yang tercantum di atas dapat diatur dalam panggilan.

Menyiapkan kumpulan 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 ditentukan seperti reset perangkat.

Jika aplikasi mengonfigurasi tumpukan deskriptor agar dapat dilihat CPU, maka CPU dapat memanggil metode untuk membuat deskriptor ke dalam tumpukan dan menyalin dari satu tempat ke tempat lain (termasuk di seluruh tumpukan) secara langsung dan dengan cara bebas utas. Jika tumpukan telah dikonfigurasi sebagai SHADER_VISIBLE, pembacaan oleh CPU tidak diizinkan.

Tumpuk Deskriptor