Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Lo stato del dispositivo viene raggruppato in oggetti di stato che riducono notevolmente il costo delle modifiche dello stato. Sono disponibili diversi oggetti di stato e ognuno di essi è progettato per inizializzare un set di stato per una determinata fase della pipeline. Gli oggetti di stato variano in base alla versione di Direct3D.
Stato layout di input
Questo gruppo di stato determina il modo in cui la fase Input Assembler (IA) legge i dati dai buffer di input e lo assembla per l'uso da parte del vertex shader. Sono inclusi lo stato, ad esempio il numero di elementi nel buffer di input e la firma dei dati di input. La fase Input Assembler (IA) trasmette le primitive dalla memoria alla pipeline.
Stato rasterizzatore
Questo gruppo di stato inizializza la fase Rasterizzatore (RS). Questo oggetto include lo stato, ad esempio le modalità riempimento o null, l'abilitazione di un rettangolo di scissor per il ritaglio e l'impostazione di parametri multisample. Questa fase rasterizza le primitive in pixel, eseguendo operazioni come ritaglio e mapping di primitive alla viewport.
iStato stencil di profondità
Questo gruppo di stato inizializza la parte stencil di profondità della fase Output Merger (OM). In particolare, questo oggetto inizializza i test di profondità e stencil.
Stato blend
Questo gruppo di stato inizializza la parte di fusione della fase Output Merger (OM).
Stato sampler
Questo gruppo di stato inizializza un oggetto sampler. Un oggetto sampler viene usato dalle fasi dello shader per filtrare le texture in memoria.
In Direct3D, l'oggetto sampler non è associato a una texture specifica, descrive semplicemente come filtrare in base a qualsiasi risorsa associata.
Considerazioni sulle prestazioni
La progettazione dell'API per l'uso degli oggetti di stato crea diversi vantaggi in termini di prestazioni. Questi includono la convalida dello stato in fase di creazione dell'oggetto, l'abilitazione della memorizzazione nella cache degli oggetti di stato nell'hardware e la riduzione significativa della quantità di stato passata durante una chiamata API di impostazione dello stato (passando un handle all'oggetto di stato anziché lo stato).
Per ottenere questi miglioramenti delle prestazioni, è necessario creare gli oggetti di stato all'avvio dell'applicazione, ben prima del ciclo di rendering. Gli oggetti di stato non sono modificabili, ovvero una volta creati, non è possibile modificarli. È invece necessario distruggerli e ricrearli.
È possibile creare diversi oggetti sampler con varie combinazioni di stato sampler. La modifica dello stato del campionatore viene quindi eseguita richiamando l'API "Set" appropriata che passa un handle all'oggetto (anziché allo stato del campionatore). In questo modo si riduce significativamente la quantità di overhead durante ogni frame di rendering per modificare lo stato poiché il numero di chiamate e la quantità di dati sono notevolmente ridotti.
In alternativa, è possibile scegliere di usare il sistema di effetti che gestirà automaticamente la creazione efficiente e la distruzione degli oggetti di stato per l'applicazione.
Argomenti correlati