Archiviazione di variabili e tipi per shader da condividere

L'oggetto di collegamento della classe è uno spazio dei nomi per variabili e tipi che possono condividere più shader. Quando si passa un oggetto di collegamento di classe in una chiamata per creare uno shader, il runtime raccoglie un elenco di variabili e tipi che possono implementare ogni interfaccia nello shader e archivia i nomi di tali variabili e tipi nell'oggetto di collegamento della classe.

Pertanto, quando si chiama il metodo ID3D11ClassLinkage::GetClassInstance per generare istanze di classe dall'oggetto di collegamento della classe, il runtime può recuperare la variabile o il tipo che corrisponde al nome fornito in ogni shader (se tale nome è valido per un determinato shader) e che viene creato con l'oggetto di collegamento alla classe specificato.

Si supponga, ad esempio, di avere una classe Light che implementa un'interfaccia Color e usare questa classe nel vertex shader e pixel shader. Quando si crea uno shader ,ad esempio chiamando ID3D11Device::CreatePixelShader, il runtime determina che il tipo di classe Light è disponibile sia nei vertici che negli shader pixel e aggiunge il tipo di classe Light all'oggetto di collegamento della classe. È quindi possibile creare un'istanza light in una posizione desiderata, associare le risorse per entrambi gli shader e passare questa istanza nella matrice delle istanze della classe quando si imposta lo shader sul dispositivo, ad esempio chiamando ID3D11DeviceContext::P SSetShader. Il runtime esegue quindi la sequenza seguente:

  1. Verifica che l'istanza sia stata creata con lo stesso oggetto di collegamento della classe.
  2. Verifica che il tipo di classe Light sia disponibile in vertex e pixel shader.
  3. Seleziona le tabelle delle funzioni corrette, che possono essere diverse per i vertici e i pixel shader.
  4. Invia gli offset forniti dall'istanza.

L'oggetto di collegamento della classe è in definitiva un repository di nomi di tipo e variabile. Il numero massimo di nomi disponibili per ogni elemento (tipo e variabile) è 64K. I nomi di tipo e variabile più lunghi sono, più alto è il requisito di archiviazione per i metadati dell'interfaccia archiviati per shader. Questo perché il runtime deve archiviare un mapping per questi nomi per ogni shader.

Collegamento dinamico

Collegamento dinamico