Bagikan melalui


Tumpukan Deskriptor Yang Terlihat Bayangan

Tumpukan deskriptor yang terlihat shader, adalah tumpukan deskriptor yang dapat dirujuk oleh shader melalui tabel deskriptor.

Gambaran Umum

Tumpukan deskriptor yang dapat direferensikan oleh shader melalui tabel deskriptor datang dalam beberapa rasa: Satu jenis heap, D3D12_SRV_UAV_CBV_DESCRIPTOR_HEAP, dapat menyimpan Tampilan Sumber Daya Shader, Tampilan Akses Tidak Berurut, dan Tampilan Buffer Konstanta, semuanya saling bergantian. Lokasi tertentu dalam tumpuk dapat menjadi salah satu jenis deskriptor yang tercantum. Jenis tumpukan lain, D3D12_DESCRIPTOR_HEAP_TYPE_SAMPLER, hanya menyimpan sampel, mencerminkan fakta bahwa untuk sebagian besar perangkat keras, sampler dikelola secara terpisah dari SRV, UAV, CBV.

Tumpukan deskriptor dari jenis ini dapat diminta untuk menjadi shader yang terlihat atau tidak ketika tumpukan dibuat (yang terakhir - tidak terlihat shader - dapat berguna untuk deskriptor penahapan pada CPU). Ketika diminta untuk terlihat shader, masing-masing jenis heap di atas mungkin memiliki batas ukuran perangkat keras untuk setiap alokasi tumpukan deskriptor individu.

Aplikasi dapat membuat sejumlah tumpukan deskriptor , dan tumpukan deskriptor yang terlihat non shader tidak dibatasi ukurannya. Jika tumpukan deskriptor yang terlihat shader yang dibuat oleh aplikasi lebih kecil dari batas ukuran perangkat keras, driver dapat memilih untuk mensub-alokasikan tumpukan deskriptor dari tumpukan deskriptor yang mendasarinya yang lebih besar sehingga beberapa tumpukan deskriptor API pas dalam satu tumpukan deskriptor perangkat keras. Alasan ini mungkin terjadi adalah bahwa untuk beberapa perangkat keras, beralih antara tumpukan deskriptor perangkat keras selama eksekusi memerlukan GPU menunggu diam (untuk memastikan bahwa referensi GPU ke tumpukan deskriptor sebelumnya selesai). Jika semua tumpukan deskriptor yang dibuat aplikasi sesuai dengan kapasitas maksimum tumpukan perangkat keras yang berlaku, maka tidak ada penantian seperti itu yang akan terjadi saat mengalihkan tumpukan deskriptor API selama penyajian. Aplikasi harus memungkinkan kemungkinan, bagaimanapun, bahwa mengalihkan tumpukan deskriptor saat ini dapat menimbulkan penantian diam.

Untuk menghindari terpengaruh oleh kemungkinan ini menunggu diam pada sakelar tumpukan deskriptor, aplikasi dapat memanfaatkan jeda dalam penyajian yang akan menyebabkan GPU menganggur karena alasan lain saat waktu untuk melakukan sakelar tumpukan deskriptor, karena tunggu menganggur tetap terjadi.

Mekanisme dan semantik untuk mengidentifikasi tumpukan deskriptor ke shader selama daftar perintah /perekaman bundel dijelaskan dalam referensi API.

Contohnya

Gambar di bawah ini menunjukkan dua tumpukan deskriptor yang mereferensikan dua tekstur 2D terpisah yang disimpan dalam dua slot timbunan default besar. Tumpukan deskriptor yang terlihat shader dapat diakses oleh alur grafis (termasuk shader), dan karenanya tekstur 2D tersedia untuk alur.

tumpuk deskriptor yang terlihat dan tidak terlihat

Catatan

Sering kali ada batasan pada perangkat keras GPU dari jumlah memori lokal GPU yang dapat ditulis oleh CPU (disebut sebagai memori gabungan tulis) untuk tumpukan deskriptor. Biasanya batas ini sekitar 96MB untuk semua proses. Satu juta tumpukan deskriptor anggota, dengan deskriptor 32byte, akan menggunakan hingga 32MB, misalnya. Driver akan kembali ke memori sistem jika diperlukan, meskipun itu adalah praktik yang baik untuk tidak membuat sejumlah besar timbunan deskriptor besar.

 

Tumpuk Deskriptor