Oggetti stato (Direct3D 10)

In Direct3D 10 lo stato del dispositivo viene raggruppato in oggetti di stato che riducono notevolmente il costo delle modifiche dello stato. Esistono diversi oggetti di stato e ognuno di essi è progettato per inizializzare un set di stato per una determinata fase della pipeline. È possibile creare fino a 4096 di ogni tipo di oggetto state.

Input-Layout stato

Questo gruppo di stato (vedere D3D10_INPUT_ELEMENT_DESC) determina come la fase dell'assembler di input legge i dati dai buffer di input e lo assembla per l'uso da parte del vertex shader. Questo include lo stato, ad esempio il numero di elementi nel buffer di input e la firma dei dati di input. La fase dell'assembler di input è una nuova fase nella pipeline il cui processo consiste nel trasmettere le primitive dalla memoria alla pipeline.

Per creare un oggetto input-layout-state, vedere CreateInputLayout.

Stato rasterizer

Questo gruppo di stato (vedere D3D10_RASTERIZER_DESC) inizializza la fase del rasterizer. Questo oggetto include lo stato, ad esempio le modalità riempimento o cull, l'abilitazione di un rettangolo scissor per il ritaglio e l'impostazione di parametri multisample. Questa fase rasterizza le primitive in pixel, eseguendo operazioni come ritaglio e mapping delle primitive al riquadro di visualizzazione.

Per creare un oggetto rasterizer-state, vedere CreateRasterizerState.

Depth-Stencil stato

Questo gruppo di stato (vedere D3D10_DEPTH_STENCIL_DESC) inizializza la parte profondità-stencil della fase di fusione di output. In particolare, questo oggetto inizializza il test di profondità e stencil.

Per creare un oggetto depth-stencil-state, vedere CreateDepthStencilState.

Stato di blend

Questo gruppo di stato (vedere D3D10_BLEND_DESC) inizializza la parte di fusione della fase di fusione di output.

Per creare un oggetto blend-state, vedere CreateBlendState.

Stato dell'esempio

Questo gruppo di stato (vedere D3D10_SAMPLER_DESC) inizializza un oggetto sampler. Un oggetto sampler viene usato dalle fasi dello shader per filtrare le trame in memoria.

Differenze tra Direct3D 9 e Direct3D 10:

  • In Direct3D 10 l'oggetto sampler non è più associato a una trama specifica, descrive semplicemente come filtrare in qualsiasi risorsa associata.

 

Per creare un oggetto sampler-state, vedere CreateSamplerState.

Considerazioni sulle prestazioni

La progettazione dell'API per l'uso di oggetti di stato crea diversi vantaggi per le prestazioni. Questi includono la convalida dello stato in fase di creazione dell'oggetto, l'abilitazione della memorizzazione nella cache degli oggetti nell'hardware e la riduzione notevolmente della quantità di stato passata durante una chiamata API di impostazione dello stato (passando un handle all'oggetto stato anziché lo stato).

Per ottenere questi miglioramenti delle prestazioni, è necessario creare gli oggetti di stato quando l'applicazione viene avviata, ben prima del ciclo di rendering. Gli oggetti state sono non modificabili, ovvero una volta creati, non è possibile modificarli. È invece necessario distruggere e ricrearli. Per affrontare questa restrizione, è possibile creare fino a 4096 di ogni tipo di oggetti di stato. Ad esempio, è possibile creare diversi oggetti sampler con varie combinazioni di stato sampler. La modifica dello stato dell'sampler viene quindi eseguita chiamando l'API Set appropriata che passa un handle all'oggetto (anziché allo stato dell'sampler). Ciò riduce significativamente la quantità di sovraccarico 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 effetto che gestirà automaticamente la creazione efficiente e la distruzione degli oggetti di stato per l'applicazione.

Funzionalità API (Direct3D 10)