enumerazione D3D12_HEAP_TYPE (d3d12.h)

Specifica il tipo di heap. Quando residente, gli heap risiedono in un determinato pool di memoria fisica con determinate proprietà della cache della CPU.

Sintassi

typedef enum D3D12_HEAP_TYPE {
  D3D12_HEAP_TYPE_DEFAULT = 1,
  D3D12_HEAP_TYPE_UPLOAD = 2,
  D3D12_HEAP_TYPE_READBACK = 3,
  D3D12_HEAP_TYPE_CUSTOM = 4,
  D3D12_HEAP_TYPE_GPU_UPLOAD
} ;

Costanti

 
D3D12_HEAP_TYPE_DEFAULT
Valore: 1
Specifica l'heap predefinito. Questo tipo di heap presenta la maggior parte della larghezza di banda per la GPU, ma non può fornire l'accesso alla CPU. La GPU può leggere e scrivere nella memoria da questo pool e le barriere di transizione delle risorse possono essere modificate. La maggior parte degli heap e delle risorse dovrebbe trovarsi qui e viene in genere popolata tramite risorse negli heap di caricamento.
D3D12_HEAP_TYPE_UPLOAD
Valore: 2
Specifica un heap utilizzato per il caricamento. Questo tipo di heap ha accesso alla CPU ottimizzato per il caricamento nella GPU, ma non verifica la quantità massima di larghezza di banda per la GPU. Questo tipo di heap è ideale per i dati CPU-write-once, GPU-read-once; ma gpu-read-once è più rigoroso del necessario. GPU-read-once-or-from-cache è un caso d'uso accettabile per i dati; ma tali utilizzi sono difficili da valutare a causa di diverse progettazioni e dimensioni della cache GPU. In caso di dubbio, attenersi alla definizione gpu-read-once o profilare la differenza in molte GPU tra la copia dei dati in un heap _DEFAULT e la lettura dei dati da un heap _UPLOAD.

Le risorse in questo heap devono essere create con D3D12_RESOURCE_STATE_GENERIC_READ e non possono essere modificate da questo. L'indirizzo della CPU per tali heap in genere non è efficiente per le letture della CPU.

Di seguito sono riportati gli utilizzi tipici per gli heap _UPLOAD:

  • Inizializzazione delle risorse in un heap _DEFAULT con i dati della CPU.

  • Caricamento di dati dinamici in un buffer costante letto, ripetutamente, da ogni vertice o pixel.



Di seguito è probabile che non siano validi utilizzi per _UPLOAD heap:

  • Inizializzare nuovamente il contenuto di una risorsa ogni frame.

  • Caricamento di dati costanti utilizzati solo ogni altra chiamata Draw, in cui ogni disegno utilizza una quantità non semplice di altri dati.

D3D12_HEAP_TYPE_READBACK
Valore: 3
Specifica un heap utilizzato per la lettura. Questo tipo di heap ha l'accesso alla CPU ottimizzato per la lettura dei dati dalla GPU, ma non presenta la quantità massima di larghezza di banda per la GPU. Questo tipo di heap è ideale per i dati leggibili con GPU-write-once e CPU. Il comportamento della cache della CPU è writeback, che è favorevole per più letture della CPU della riga di cache secondaria.

Le risorse in questo heap devono essere create con D3D12_RESOURCE_STATE_COPY_DEST e non possono essere modificate da questo.
D3D12_HEAP_TYPE_CUSTOM
Valore: 4
Specifica un heap personalizzato. L'applicazione può specificare direttamente le proprietà del pool di memoria e della cache della CPU, che possono essere utili per le ottimizzazioni UMA, multi-engine, multi-adapter o altri casi speciali. A tale scopo, l'applicazione dovrebbe comprendere l'architettura dell'adattatore per fare la scelta corretta. Per altri dettagli, vedere

D3D12_FEATURE_ARCHITECTURE,
D3D12_FEATURE_DATA_ARCHITECTUREe
GetCustomHeapProperties.

Osservazioni

Questa enumerazione viene usata dagli elementi dell'API seguenti:

I tipi heap rientrano in due categorie: tipi heap astratti e tipi heap personalizzati.

Di seguito sono riportati i tipi heap astratti:

  • D3D12_HEAP_TYPE_DEFAULT
  • D3D12_HEAP_TYPE_UPLOAD
  • D3D12_HEAP_TYPE_READBACK
Di seguito è riportato un tipo di heap personalizzato:
  • D3D12_HEAP_TYPE_CUSTOM
I tipi heap astratti (_DEFAULT, _UPLOAD e _READBACK) sono utili per semplificare la scrittura di applicazioni indipendenti dagli adattatori, perché tali applicazioni non devono essere consapevoli dell'architettura della memoria dell'adattatore. Per usare un tipo heap astratto per semplificare la scrittura di applicazioni indipendenti dall'adattatore, l'applicazione considera essenzialmente l'adattatore come se fosse un adattatore discreto o NUMA. Tuttavia, l'uso dei tipi heap consente una traduzione efficiente per gli adattatori UMA. Le applicazioni neutre dell'architettura degli adattatori devono presupporre che siano disponibili due pool di memoria, in cui il pool con la larghezza di banda gpu più elevata non può fornire l'accesso alla CPU. Il pool con la larghezza di banda minima della GPU può avere accesso alla CPU; ma deve essere ottimizzato per il caricamento in GPU o il readback dalla GPU.

Si noti che le trame (a differenza dei buffer) non possono essere di tipo HEAP UPLOAD o READBACK.

Fabbisogno

Requisito Valore
intestazione d3d12.h

Vedere anche

core enumerationi

heap descrittore