Bagikan melalui


Penggunaan lanjutan Tabel Deskriptor

Bagian berikut ini menyediakan informasi tentang penggunaan lanjutan tabel deskriptor.

Mengubah Entri Tabel Deskriptor antara Penyajian Panggilan

Setelah daftar perintah yang mengatur tabel deskriptor telah dikirimkan ke antrean untuk eksekusi, aplikasi tidak boleh mengedit dari CPU bagian tumpukan deskriptor yang mungkin direferensikan GPU sampai aplikasi tahu bahwa GPU telah selesai menggunakan referensi.

Penyelesaian pekerjaan dapat ditentukan pada batas yang ketat menggunakan pagar API untuk melacak kemajuan GPU, atau mekanisme yang lebih kasar seperti menunggu untuk melihat bahwa penyajian telah dikirim untuk ditampilkan - apa pun yang sesuai dengan aplikasi. Jika aplikasi tahu bahwa hanya subset wilayah yang ditunjukkan tabel deskriptor yang akan diakses (katakanlah karena kontrol alur di shader), deskriptor lain yang tidak direferensikan masih bebas untuk diubah. Jika aplikasi perlu beralih di antara tabel deskriptor yang berbeda antara panggilan penyajian, ada beberapa pendekatan yang dapat dipilih aplikasi:

  • Penerapan Versi Tabel Deskriptor: Membuat (atau menggunakan kembali) tabel deskriptor terpisah untuk setiap kumpulan deskriptor unik yang akan direferensikan oleh daftar perintah. Saat mengedit dan menggunakan kembali area yang diisi sebelumnya pada tumpukan deskriptor, aplikasi harus terlebih dahulu memastikan bahwa GPU telah selesai menggunakan bagian mana pun dari tumpukan deskriptor yang akan didaur ulang.
  • Pengindeksan Dinamis: Aplikasi dapat mengatur objek yang bervariasi di seluruh gambar/pengiriman (atau bahkan bervariasi dalam gambar) dalam rentang tumpukan deskriptor, menentukan tabel deskriptor yang mencakup semuanya, dan dari shader, menggunakan pengindeksan dinamis tabel selama eksekusi shader untuk memilih objek mana yang akan digunakan.
  • Menempatkan deskriptor di tanda tangan akar secara langsung. Hanya sejumlah kecil deskriptor yang dapat dikelola dengan cara ini karena ruang tanda tangan akar terbatas.

Implikasi penggunaan penerapan versi tabel deskriptor adalah bahwa memori deskriptor dari tumpukan deskriptor harus dibakar untuk setiap set deskriptor unik yang direferensikan oleh alur grafis untuk setiap daftar perintah yang dapat dijalankan, diantrekan untuk eksekusi, atau direkam pada waktu tertentu.

D3D12 meninggalkan tanggung jawab mengelola penerapan versi ke aplikasi untuk jenis objek yang dikelola melalui tumpukan deskriptor dan tabel deskriptor. Salah satu manfaatnya adalah bahwa aplikasi dapat memilih untuk menggunakan kembali konten tabel deskriptor sebanyak mungkin daripada selalu mendefinisikan versi tabel deskriptor baru untuk setiap pengiriman daftar perintah. Tanda tangan akar adalah ruang yang versi driver D3D12 secara otomatis.

Kemampuan untuk mengikat beberapa tabel deskriptor ke tanda tangan akar (dan dengan demikian ke alur) pada satu waktu memungkinkan aplikasi untuk mengelompokkan dan mengalihkan set referensi deskriptor pada frekuensi yang berbeda jika diinginkan. Misalnya, aplikasi dapat menggunakan sejumlah kecil (mungkin hanya satu) tabel deskriptor statis besar yang jarang berubah, atau di wilayah mana dalam memori tumpukan deskriptor yang mendasarinya diisi sesuai kebutuhan, dengan penggunaan pengindeksan dinamis dari shader untuk memilih tekstur. Pada saat yang sama, aplikasi dapat mempertahankan kelas sumber daya lain di mana set yang direferensikan oleh setiap panggilan gambar dialihkan dari CPU menggunakan teknik penerapan versi tabel deskriptor.

Pengindeksan Di Luar Batas

Di luar batas pengindeksan tabel deskriptor apa pun dari shader menghasilkan akses memori yang sebagian besar tidak terdefinisi, termasuk kemungkinan membaca memori dalam proses yang seadanya seolah-olah itu adalah deskriptor status perangkat keras dan hidup dengan konsekuensi dari apa yang dilakukan perangkat keras dengan itu. Ini dapat menghasilkan reset perangkat, tetapi tidak akan crash Windows.

Derivatif Shader dan Pengindeksan Divergent

Jika pemanggilan shader piksel yang dijalankan dalam stempel 2x2 (untuk mendukung perhitungan turunan) pilih indeks tekstur yang berbeda untuk diambil sampelnya dari tabel deskriptor, dan jika konfigurasi dan tekstur sampler yang dipilih untuk piksel tertentu memerlukan perhitungan LOD dari turunan koordinat tekstur, maka penghitungan LOD dan proses pengambilan sampel tekstur dilakukan oleh perangkat keras secara independen untuk setiap pencarian tekstur dalam stempel 2x2, yang akan berdampak pada performa.

Tabel Deskriptor