enumerazione D3D11_MAP (d3d11.h)

Identifica una risorsa a cui accedere per la lettura e la scrittura dalla CPU. Le applicazioni possono combinare uno o più flag.

Sintassi

typedef enum D3D11_MAP {
  D3D11_MAP_READ = 1,
  D3D11_MAP_WRITE = 2,
  D3D11_MAP_READ_WRITE = 3,
  D3D11_MAP_WRITE_DISCARD = 4,
  D3D11_MAP_WRITE_NO_OVERWRITE = 5
} ;

Costanti

 
D3D11_MAP_READ
Valore: 1
La risorsa viene mappata per la lettura. La risorsa deve essere stata creata con l'accesso in lettura
(vedere D3D11_CPU_ACCESS_READ).
D3D11_MAP_WRITE
Valore: 2
La risorsa viene mappata per la scrittura. La risorsa deve essere stata creata con scrittura
accesso (vedere D3D11_CPU_ACCESS_WRITE).
D3D11_MAP_READ_WRITE
Valore: 3
La risorsa viene mappata per la lettura e la scrittura. La risorsa deve essere stata creata con lettura e scrittura
accesso (vedere D3D11_CPU_ACCESS_READ e D3D11_CPU_ACCESS_WRITE).
D3D11_MAP_WRITE_DISCARD
Valore: 4
La risorsa viene mappata per la scrittura; il contenuto precedente della risorsa verrà non definito. La risorsa deve essere stata creata con l'accesso in scrittura
e utilizzo dinamico (vedere D3D11_CPU_ACCESS_WRITE e D3D11_USAGE_DYNAMIC).
D3D11_MAP_WRITE_NO_OVERWRITE
Valore: 5
La risorsa viene mappata per la scrittura; il contenuto esistente della risorsa non può essere sovrascritto (vedere Osservazioni). Questo flag è valido solo sul vertice e
buffer di indice. La risorsa deve essere stata creata con l'accesso in scrittura (vedere D3D11_CPU_ACCESS_WRITE).
Impossibile usare in una risorsa creata con il flag di D3D11_BIND_CONSTANT_BUFFER .

Nota Il runtime Direct3D 11.1, disponibile a partire da Windows 8, consente di eseguire il mapping di buffer costanti dinamiche e viste delle risorse shader (SRV) di buffer dinamici con D3D11_MAP_WRITE_NO_OVERWRITE. Direct3D 11 e versioni precedenti limitano il mapping ai vertici o ai buffer di indice. Per determinare se un dispositivo Direct3D supporta queste funzionalità, chiamare ID3D11Device::CheckFeatureSupport con D3D11_FEATURE_D3D11_OPTIONS. CheckFeatureSupport riempie i membri di una struttura D3D11_FEATURE_DATA_D3D11_OPTIONS con le funzionalità del dispositivo. I membri pertinenti sono MapNoOverwriteOnDynamicConstantBuffer e MapNoOverwriteOnDynamicBufferSRV.

 

Commenti

Questa enumerazione viene usata in ID3D11DeviceContext::Map.

Significato di D3D11_MAP_WRITE_NO_OVERWRITE

D3D11_MAP_WRITE_NO_OVERWRITE indica che l'applicazione promette di non scrivere nei dati usati dalla fase di assemblyer di input (IA). In cambio, la GPU consente all'applicazione di scrivere in altre parti dello stesso buffer. L'applicazione deve assicurarsi che non scrive i dati in uso dalla fase IA.

Si consideri ad esempio il buffer illustrato nel diagramma seguente. Se viene emessa una chiamata Draw che usa vertici 4-6, un'applicazione che chiama Map in questo buffer deve assicurarsi che non venga scritta nei vertici a cui accede la chiamata Draw durante il rendering.

Diagramma di un buffer che include vertici in diverse fasi di utilizzo Tuttavia, assicurarsi che questo possa essere difficile, perché la GPU spesso è molti fotogrammi dietro la CPU in termini di quale frame è attualmente in elaborazione. Tenere traccia delle sezioni di una risorsa usate a causa delle chiamate effettuate da 2 a 5 fotogrammi fa è difficile e soggetto a errori. A causa di questo, è consigliabile che le applicazioni scrivono solo nelle parti non inizializzate di una risorsa quando si usa D3D11_MAP_WRITE_NO_OVERWRITE.

Utilizzo comune di D3D11_MAP_WRITE_DISCARD con D3D11_MAP_WRITE_NO_OVERWRITE

D3D11_MAP_WRITE_DISCARD e D3D11_MAP_WRITE_NO_OVERWRITE vengono normalmente usati insieme ai buffer di indice/vertice dinamici. D3D11_MAP_WRITE_DISCARD può essere usato anche con trame dinamiche. Tuttavia, non è possibile usare D3D11_MAP_WRITE_NO_OVERWRITE con trame dinamiche.

Un uso comune di questi due flag implica il riempimento di buffer di indice/vertice dinamici con geometria che può essere vista dalla posizione corrente della fotocamera. La prima volta che i dati vengono immessi nel buffer in un determinato frame, viene chiamato Map con D3D11_MAP_WRITE_DISCARD; in questo modo invalida il contenuto precedente del buffer. Il buffer viene quindi riempito con tutti i dati disponibili.

Le scritture successive nel buffer all'interno dello stesso frame devono usare D3D11_MAP_WRITE_NO_OVERWRITE. In questo modo la CPU potrà accedere a una risorsa potenzialmente usata dalla GPU, purché vengano rispettate le restrizioni descritte in precedenza.

Requisiti

Requisito Valore
Intestazione d3d11.h

Vedi anche

Enumerazioni delle risorse