dcl_interface (sm5 - asm)

Dichiarare i puntatori alla tabella delle funzioni (interfacce).

dcl_interface fp#[arraySize][numCallSites] = {ft#, ft#, ...}
Elemento Descrizione
Fp #
[in] Puntatori alla tabella delle funzioni.

Commenti

Ogni interfaccia deve essere associata dall'API prima che lo shader sia utilizzabile. L'associazione fornisce un riferimento a una delle tabelle delle funzioni in modo che gli slot del metodo possano essere compilati. Il compilatore non genererà puntatori per gli oggetti non referenziati.

Un puntatore alla tabella di funzione ha un set completo di slot di metodo per evitare il livello aggiuntivo di indiretto che una rappresentazione da puntatore a vtable C++ richiederebbe. Ciò richiederebbe anche che questi puntatori siano 5 tupla. Nel modello di inlining virtuale HLSL è sempre noto quale variabile/input globale viene usato per una chiamata in modo da poter configurare tabelle per ogni oggetto radice.

Le dichiarazioni di puntatore alla funzione indicano quali tabelle delle funzioni sono legali per usarle. Ciò consente anche la derivazione delle informazioni sulla correlazione dei metodi.

Il primo [] di una dichiarazione di interfaccia è la dimensione della matrice. Se viene usato l'indicizzazione dinamica, la dichiarazione indicherà che come illustrato. Una matrice di puntatori di interfaccia può essere indicizzata in modo statico, non è necessario che le matrici di puntatori di interfaccia mediano l'indicizzazione dinamica.

Il numero di puntatori di interfaccia inizia a 0 per la prima dichiarazione e successivamente prende in considerazione le dimensioni della matrice, quindi il primo puntatore dopo una matrice di quattro voci fp0[4][1] sarebbe fp4[][].

Il secondo [] di una dichiarazione di interfaccia è il numero di siti di chiamata, che devono corrispondere al numero di corpi in ogni tabella a cui fa riferimento nella dichiarazione.

Non sono presenti limiti al numero di scelte della tabella delle funzioni (ft#) elencate in una dichiarazione di interfaccia.

Una determinata tabella di funzioni (ft#) può essere visualizzata più volte in una o più dichiarazioni di interfaccia.

Restrizioni

  • Il numero di siti di oggetti in uno shader, ovvero la somma tra tutte le dichiarazioni fp# delle dichiarazioni [arraySize] non deve essere superiore a 253. Questo numero corrisponde al numero di puntatori presenti. Il runtime applica questo limite di 253 per mantenere un limite alle dimensioni dell'DDI per comunicare questi dati del puntatore.

  • Il numero di siti di chiamata in uno shader, ovvero la somma tra tutte le istruzioni fcall del numero di potenziali destinazioni del ramo, deve essere diverso da 4096.

    Ad esempio, una fcall che usa un indice statico per la prima dimensione fp[][] viene conteggiata come una:

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

    Una chiamata fcall che usa un indice dinamico viene conteggiata come numero di elementi nella matrice (prima [] di dcl_interface):

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

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

    Questo limite consente ad alcune implementazioni di adattarsi facilmente alle tabelle di selezioni del corpo delle funzioni nell'archiviazione costante del buffer.

Questa istruzione si applica alle fasi dello shader seguenti:

Vertice Scafo Dominio Geometria Pixel Calcolo
X X X X X X

Modello di shader minimo

Questa istruzione è supportata nei modelli shader seguenti:

Modello di shader Supportato
Modello shader 5
Modello shader 4.1 no
Modello shader 4 no
Modello shader 3 (DirectX HLSL) no
Modello shader 2 (DirectX HLSL) no
Modello shader 1 (DirectX HLSL) no

cs_4_0 e cs_4_1 supportano questa istruzione per UAV e SRV.

Shader Model 5 Assembly (DirectX HLSL)