Menyimpan Variabel dan Jenis untuk Dibagikan Oleh Shader
Objek tautan kelas adalah namespace untuk variabel dan jenis yang dapat dibagikan oleh beberapa shader. Saat Anda meneruskan objek tautan kelas dalam panggilan untuk membuat shader, runtime mengumpulkan daftar variabel dan jenis yang dapat mengimplementasikan setiap antarmuka di shader dan menyimpan nama variabel dan jenis tersebut di objek tautan kelas.
Oleh karena itu, ketika Anda memanggil metode ID3D11ClassLinkage::GetClassInstance untuk menghasilkan instans kelas dari objek tautan kelas, runtime dapat mengambil variabel atau jenis yang sesuai dengan nama yang disediakan di setiap shader (jika nama tersebut valid untuk shader tertentu) dan yang dibuat dengan objek tautan kelas yang diberikan.
Misalnya, Anda memiliki kelas Cahaya yang mengimplementasikan antarmuka Color , dan Anda menggunakan kelas ini di shader vertex dan pixel shader Anda. Saat Anda membuat shader (misalnya, dengan memanggil ID3D11Device::CreatePixelShader), runtime menentukan bahwa jenis kelas Cahaya tersedia di vertex dan shader piksel dan menambahkan jenis kelas Cahaya ke objek tautan kelas. Anda kemudian dapat membuat instans Light di lokasi yang Anda inginkan, mengikat sumber daya untuk kedua shader, dan meneruskan instans ini di array instans kelas saat Anda mengatur shader ke perangkat (misalnya, dengan memanggil ID3D11DeviceContext::P SSetShader). Runtime kemudian melakukan urutan berikut:
- Memverifikasi bahwa instans dibuat dengan objek tautan kelas yang sama.
- Memverifikasi bahwa jenis kelas Ringan adalah availabe di vertex dan shader piksel.
- Memilih tabel fungsi yang benar, yang bisa berbeda untuk vertex dan shader piksel.
- Mengirimkan offset yang disediakan instans.
Objek tautan kelas pada akhirnya adalah repositori jenis dan nama variabel. Jumlah maksimum nama yang tersedia untuk setiap item (jenis dan variabel) adalah 64K. Semakin panjang jenis dan nama variabel, semakin tinggi persyaratan penyimpanan untuk metadata antarmuka yang disimpan per shader. Ini karena runtime harus menyimpan pemetaan untuk nama-nama ini untuk setiap shader.
Topik Terkait
Topik terkait