Gambaran Umum Tanda Tangan Dasar
Tanda tangan akar dikonfigurasi oleh aplikasi dan menautkan daftar perintah ke sumber daya yang diperlukan shader. Daftar perintah grafis memiliki grafik dan tanda tangan akar komputasi. Daftar perintah komputasi hanya akan memiliki satu tanda tangan akar komputasi. Tanda tangan akar ini independen satu sama lain.
Parameter dan argumen utama
Tanda tangan akar mirip dengan tanda tangan fungsi API, ini menentukan jenis data yang harus diharapkan shader, tetapi tidak menentukan memori atau data aktual. Parameter akar adalah satu entri dalam tanda tangan akar. Nilai aktual parameter akar yang ditetapkan dan diubah pada runtime disebut argumen akar . Mengubah argumen akar mengubah data yang dibaca shader.
Konstanta akar, deskriptor, dan tabel
Tanda tangan akar dapat berisi tiga jenis parameter; konstanta akar (konstanta yang di-inlin dalam argumen akar), deskriptor akar (deskriptor yang di-inlin dalam argumen akar), dan tabel deskriptor (penunjuk ke rentang deskriptor dalam timbunan deskriptor).
Konstanta root adalah nilai 32-bit dalam baris yang muncul di shader sebagai penyangga konstanta.
Deskriptor root sebaris harus berisi deskriptor yang paling sering diakses, tetapi terbatas pada CBV, serta buffer UAV atau SRV mentah atau terstruktur. Jenis yang lebih kompleks, seperti SRV tekstur 2D, tidak dapat digunakan sebagai deskriptor akar. Deskriptor akar tidak menyertakan batas ukuran, sehingga tidak memungkinkan pemeriksaan batas, tidak seperti deskriptor dalam tumpukan deskriptor, yang menyertakan ukuran.
Entri tabel deskriptor dalam tanda tangan akar berisi deskriptor, nama ikat shader HLSL, dan bendera visibilitas. Lihat Shader Model 5.1 untuk detail nama shader. Pada beberapa perangkat keras, dapat diperoleh peningkatan performa dengan hanya membuat deskriptor terlihat pada tahap shader yang membutuhkannya (lihat D3D12_SHADER_VISIBILITY).
entri tabel deskriptor akar
Tata letak tanda tangan akar cukup fleksibel, dengan beberapa batasan yang diberlakukan pada perangkat keras yang kurang mampu. Terlepas dari tingkat perangkat keras, aplikasi harus selalu mencoba membuat tanda tangan akar sesingkat yang diperlukan untuk efisiensi maksimum. Aplikasi dapat memilih antara memiliki lebih banyak tabel deskriptor di root signature atau ruang yang lebih sedikit untuk konstanta akar, atau sebaliknya.
Isi dari tanda tangan root (tabel deskriptor, konstanta root, dan deskriptor root) yang telah diikat oleh aplikasi secara otomatis diperbarui versinya oleh driver D3D12 setiap kali ada bagian dari isi yang berubah antara panggilan draw (grafik) atau dispatch (komputasi). Jadi, setiap penggambaran/pengiriman mendapatkan serangkaian status tanda tangan root yang unik.
Idealnya, terdapat kelompok Objek Status Pipeline (PSO) yang memiliki tanda tangan akar yang sama. Setelah tanda tangan akar diatur pada alur, semua pengikatan yang ditentukannya (tabel deskriptor, deskriptor, konstanta) masing-masing dapat diatur atau diubah secara individual, termasuk warisan ke dalam bundel.
Aplikasi dapat membuat kompromi sendiri antara berapa banyak tabel deskriptor yang aplikasi inginkan versus deskriptor sebaris (yang membutuhkan lebih banyak ruang tetapi menghapus indirection) versus konstanta sebaris (yang tidak memiliki indirection) yang aplikasi inginkan pada tanda tangan root. Aplikasi harus menggunakan tanda tangan akar sesedikit mungkin, mengandalkan memori yang dikendalikan oleh aplikasi seperti tumpukan dan tumpukan deskriptor yang menunjuk ke dalamnya untuk mewakili data massal.
Topik terkait