dcl_interface (sm5 - asm)

Deklarasikan penunjuk tabel fungsi (antarmuka).

dcl_interface fp#[arraySize][numCallSites] = {ft#, ft#, ...}
Item Deskripsi
Fp #
[in] Penunjuk tabel fungsi.

Keterangan

Setiap antarmuka harus terikat dari API sebelum shader dapat digunakan. Pengikatan memberikan referensi ke salah satu tabel fungsi sehingga slot metode dapat diisi. Pengkompilasi tidak akan menghasilkan pointer untuk objek yang tidak direferensikan.

Penunjuk tabel fungsi memiliki sekumpulan slot metode lengkap untuk menghindari tingkat tidak langsung tambahan yang diperlukan oleh representasi pointer-to-vtable C++. Itu juga akan mengharuskan pointer ini menjadi 5-tuple. Dalam model inlining virtual HLSL, selalu diketahui variabel/input global apa yang digunakan untuk panggilan sehingga kita dapat menyiapkan tabel per objek root.

Deklarasi penunjuk fungsi menunjukkan tabel fungsi mana yang legal untuk digunakan bersamanya. Ini juga memungkinkan turunan informasi korelasi metode.

[] pertama dari deklarasi antarmuka adalah ukuran array. Jika pengindeksan dinamis digunakan, deklarasi akan menunjukkan bahwa seperti yang ditunjukkan. Array penunjuk antarmuka juga dapat diindeks secara statis, tidak diperlukan bahwa array penunjuk antarmuka berarti pengindeksan dinamis.

Penomoran penunjuk antarmuka dimulai pada 0 untuk deklarasi pertama dan kemudian memperhitungkan ukuran array, sehingga penunjuk pertama setelah empat array entri fp0[4][1] akan menjadi fp4[][].

[] kedua dari deklarasi antarmuka adalah jumlah situs panggilan, yang harus cocok dengan jumlah isi dalam setiap tabel yang direferensikan dalam deklarasi.

Tidak ada batasan berapa banyak pilihan tabel fungsi (ft#) yang dapat dicantumkan dalam deklarasi antarmuka.

Tabel fungsi tertentu (ft#) dapat muncul lebih dari sekali dalam satu atau beberapa deklarasi antarmuka.

Batasan

  • Jumlah situs objek dalam shader, yang merupakan jumlah di semua deklarasi fp# dari deklarasi [arraySize] mereka, tidak boleh lebih dari 253. Angka ini sesuai dengan berapa banyak pointer ini yang dapat ada. Runtime memberlakukan batas 253 ini untuk menjaga batas ukuran DDI untuk mengkomunikasikan data pointer ini.

  • Jumlah situs panggilan dalam shader, yang merupakan jumlah di semua pernyataan fcall dari jumlah target cabang potensial, tidak boleh lebih dari 4096.

    Misalnya, fcall yang menggunakan indeks statis untuk dimensi fp[][] pertama dihitung sebagai satu:

    fcall fp0[0][0] // +1

    Fcall yang menggunakan indeks dinamis dihitung sebagai jumlah elemen dalam array ([] pertama dcl_interface):

    dcl_interface_dynamicindexed fp1[2][1] = {ft2, ft3, ft4} ...

    fcall fp1[r0.z + 0][1] // +2

    Batas ini membantu beberapa implementasi dengan mudah menyesuaikan tabel pilihan isi fungsi dalam penyimpanan seperti buffer yang konstan.

Instruksi ini berlaku untuk tahap shader berikut:

Puncak Hull Domain Geometri Pixel Compute
X X X X X X

Minimum Shader Model

Instruksi ini didukung dalam model shader berikut:

Shader Model Didukung
Model Shader 5 ya
Model Shader 4.1 tidak
Model Shader 4 tidak
Shader Model 3 (DirectX HLSL) tidak
Shader Model 2 (DirectX HLSL) tidak
Shader Model 1 (DirectX HLSL) tidak

cs_4_0 dan cs_4_1 mendukung instruksi ini untuk UAV dan SRV.

Shader Model 5 Assembly (DirectX HLSL)