enumerazione D3D11_USAGE (d3d11.h)
Identifica l'uso previsto delle risorse durante il rendering. L'utilizzo riflette direttamente se una risorsa è accessibile dalla CPU e/o dall'unità di elaborazione grafica (GPU).
Sintassi
typedef enum D3D11_USAGE {
D3D11_USAGE_DEFAULT = 0,
D3D11_USAGE_IMMUTABLE = 1,
D3D11_USAGE_DYNAMIC = 2,
D3D11_USAGE_STAGING = 3
} ;
Costanti
D3D11_USAGE_DEFAULT Valore: 0 Risorsa che richiede l'accesso in lettura e scrittura dalla GPU. Questa è probabilmente la scelta di utilizzo più comune. |
D3D11_USAGE_IMMUTABLE Valore: 1 Risorsa che può essere letto solo dalla GPU. Non può essere scritto dalla GPU e non può essere accessibile a tutti dalla CPU. Questo tipo di risorsa deve essere inizializzato quando viene creato, poiché non può essere modificato dopo la creazione. |
D3D11_USAGE_DYNAMIC Valore: 2 Risorsa accessibile sia dalla GPU (sola lettura) che dalla CPU (solo scrittura). Una risorsa dinamica è una scelta ottimale per una risorsa che verrà aggiornata dalla CPU almeno una volta per frame. Per aggiornare una risorsa dinamica, usare un metodo Map . Per informazioni su come usare le risorse dinamiche, vedere Procedura: Usare le risorse dinamiche. |
D3D11_USAGE_STAGING Valore: 3 Risorsa che supporta il trasferimento dei dati (copia) dalla GPU alla CPU. |
Commenti
Un'applicazione identifica il modo in cui una risorsa deve essere usata (il relativo utilizzo) in una descrizione della risorsa. Esistono diverse strutture per la creazione di risorse, tra cui: D3D11_TEXTURE1D_DESC, D3D11_TEXTURE2D_DESC, D3D11_TEXTURE3D_DESC e D3D11_BUFFER_DESC.
Differenze tra Direct3D 9 e Direct3D 10/11: In Direct3D 9 specificare il tipo di memoria in cui deve essere creata una risorsa in fase di creazione delle risorse (usando D3DPOOL). È stato un processo dell'applicazione per decidere quale pool di memoria fornirebbe la migliore combinazione di funzionalità e prestazioni. In Direct3D 10/11 un'applicazione non specifica più il tipo di memoria (il pool) in cui creare una risorsa. Si specifica invece l'utilizzo previsto della risorsa e si consente al runtime (in concerto con il driver e un gestore memoria) di scegliere il tipo di memoria che otterrà le migliori prestazioni. |
Restrizioni relative all'utilizzo delle risorse
Ogni utilizzo determina un compromesso tra l'accessibilità per la CPU e l'accessibilità per la GPU. In generale, l'accesso con prestazioni più elevate per uno di questi due processori significa un accesso più basso alle prestazioni per l'altro. A entrambi gli estremi sono i D3D11_USAGE_DEFAULTe D3D11_USAGE_STAGING utilizzo. D3D11_USAGE_DEFAULT limita quasi completamente l'accesso alla GPU. D3D11_USAGE_STAGING limita l'accesso quasi interamente alla CPU e consente solo un trasferimento dati (copia) di una risorsa tra la GPU e la CPU. È possibile eseguire queste operazioni di copia tramite i metodi ID3D11DeviceContext::CopySubresourceRegion e ID3D11DeviceContext::CopyResource. È anche possibile usare questi metodi di copia per copiare i dati tra due risorse dello stesso utilizzo. È anche possibile usare il metodo ID3D11DeviceContext::UpdateSubresource per copiare la memoria direttamente da un puntatore fornito dalla CPU a qualsiasi risorsa, più utilemente una risorsa con D3D11_USAGE_DEFAULT.D3D11_USAGE_DYNAMIC l'utilizzo è un caso speciale che ottimizza il flusso di dati dalla CPU alla GPU quando la CPU genera i dati sul volo e invia tali dati con frequenza elevata. D3D11_USAGE_DYNAMIC viene in genere usato sulle risorse con i dati dei vertici e sui buffer costanti. Usare i metodi ID3D11DeviceContext::Map e ID3D11DeviceContext::Unmap per scrivere dati in queste risorse. Per ottenere le prestazioni più elevate per i dati utilizzati in modo seriale, ad esempio i dati dei vertici, usare la sequenza di D3D11_MAP_WRITE_NO_OVERWRITE e D3D11_MAP_WRITE_DISCARD . Per altre informazioni su questa sequenza, vedere Utilizzo comune delle D3D11_MAP_WRITE_DISCARD con D3D11_MAP_WRITE_NO_OVERWRITE.
D3D11_USAGE_IMMUTABLE l'utilizzo è un altro caso speciale che causa la generazione di dati da parte della GPU una sola volta quando si crea una risorsa. D3D11_USAGE_IMMUTABLE è adatto ai dati, ad esempio trame, perché tali dati vengono in genere letti in memoria da un formato di file. Pertanto, quando si crea una trama con D3D11_USAGE_IMMUTABLE, la GPU legge direttamente tale trama in memoria.
Usare la tabella seguente per scegliere l'utilizzo migliore che descrive in che modo la risorsa deve essere accessibile dalla CPU e/o dalla GPU. Naturalmente, ci saranno compromessi sulle prestazioni.
Resource Usage | Default | Dynamic | Non modificabile | Gestione temporanea |
---|---|---|---|---|
GPU-Read | Sì | Sì | Sì | Sì¹ |
GPU-Write | Sì | Sì¹ | ||
CPU-Read | Sì¹ | |||
CPU-Write | Sì | Sì¹ |
1 : la lettura o la scrittura della GPU di una risorsa con l'utilizzo di D3D11_USAGE_STAGING è limitata alle operazioni di copia. Si usa ID3D11DeviceContext::CopySubresourceRegion e ID3D11DeviceContext::CopyResource per queste operazioni di copia. Inoltre, poiché i formati di profondità e i layout multisample sono dettagli di implementazione di una determinata progettazione GPU, il sistema operativo non può esporre questi formati e layout alla CPU in generale. Pertanto, le risorse di staging non possono essere un buffer a stencil di profondità o una destinazione di rendering multicampionato.
Opzioni di associazione risorse
Per ottimizzare le prestazioni, non tutte le opzioni di utilizzo delle risorse possono essere usate come risorse di input o output nella pipeline. Questa tabella identifica queste limitazioni.La risorsa può essere associata come | Default | Dynamic | Non modificabile | Gestione temporanea |
---|---|---|---|---|
Input in una fase | Sì² | Sì³ | Sì | |
Output da una fase | Sì² |
- 2 : se associato come input e un output usando visualizzazioni diverse, ogni visualizzazione deve usare origini secondarie diverse.
- 3: la risorsa può essere creata solo con una singola sottoresource. La risorsa non può essere una matrice di trama. La risorsa non può essere una catena mipmap.
Requisiti
Requisito | Valore |
---|---|
Intestazione | d3d11.h |