D3D11_MAP enumeração (d3d11.h)

Identifica um recurso a ser acessado para leitura e gravação pela CPU. Os aplicativos podem combinar um ou mais desses sinalizadores.

Syntax

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
} ;

Constantes

 
D3D11_MAP_READ
Valor: 1
O recurso é mapeado para leitura. O recurso deve ter sido criado com acesso de leitura
(consulte D3D11_CPU_ACCESS_READ).
D3D11_MAP_WRITE
Valor: 2
O recurso é mapeado para gravação. O recurso deve ter sido criado com gravação
access (consulte D3D11_CPU_ACCESS_WRITE).
D3D11_MAP_READ_WRITE
Valor: 3
O recurso é mapeado para leitura e gravação. O recurso deve ter sido criado com leitura e gravação
access (consulte D3D11_CPU_ACCESS_READ e D3D11_CPU_ACCESS_WRITE).
D3D11_MAP_WRITE_DISCARD
Valor: 4
O recurso é mapeado para gravação; o conteúdo anterior do recurso será indefinido. O recurso deve ter sido criado com acesso de gravação
e uso dinâmico (consulte D3D11_CPU_ACCESS_WRITE e D3D11_USAGE_DYNAMIC).
D3D11_MAP_WRITE_NO_OVERWRITE
Valor: 5
O recurso é mapeado para gravação; o conteúdo existente do recurso não pode ser substituído (consulte Comentários). Esse sinalizador só é válido no vértice e
buffers de índice. O recurso deve ter sido criado com acesso de gravação (consulte D3D11_CPU_ACCESS_WRITE).
Não pode ser usado em um recurso criado com o sinalizador D3D11_BIND_CONSTANT_BUFFER .

Nota O runtime do Direct3D 11.1, que está disponível a partir do Windows 8, permite mapear buffers constantes dinâmicos e SRVs (exibições de recursos de sombreador) de buffers dinâmicos com D3D11_MAP_WRITE_NO_OVERWRITE. O direct3D 11 e runtimes anteriores limitaram o mapeamento para buffers de vértice ou índice. Para determinar se um dispositivo Direct3D dá suporte a esses recursos, chame ID3D11Device::CheckFeatureSupport com D3D11_FEATURE_D3D11_OPTIONS. CheckFeatureSupport preenche membros de uma estrutura D3D11_FEATURE_DATA_D3D11_OPTIONS com os recursos do dispositivo. Os membros relevantes aqui são MapNoOverwriteOnDynamicConstantBuffer e MapNoOverwriteOnDynamicBufferSRV.

 

Comentários

Essa enumeração é usada em ID3D11DeviceContext::Map.

Significado de D3D11_MAP_WRITE_NO_OVERWRITE

D3D11_MAP_WRITE_NO_OVERWRITE significa que o aplicativo promete não gravar nos dados que o estágio do assembler de entrada (IA) está usando. Em troca, a GPU permite que o aplicativo escreva em outras partes do mesmo buffer. O aplicativo deve garantir que ele não escreva sobre nenhum dado em uso pelo estágio IA.

Por exemplo, considere o buffer ilustrado no diagrama a seguir. Se uma chamada de Desenho tiver sido emitida que usa vértices 4-6, um aplicativo que chama Mapa nesse buffer deverá garantir que ele não escreva nos vértices que a chamada de Desenho acessará durante a renderização.

Diagrama de um buffer que inclui vértices em diferentes estágios de utilização No entanto, garantir que isso possa ser difícil, pois a GPU geralmente está muitos quadros atrás da CPU em termos de qual quadro está sendo processada no momento. Manter o controle de quais seções de um recurso estão sendo usadas devido a chamadas feitas de 2 a 5 quadros atrás é difícil e propenso a erros. Por isso, é recomendável que os aplicativos só escrevam nas partes não inicializadas de um recurso ao usar D3D11_MAP_WRITE_NO_OVERWRITE.

Uso comum de D3D11_MAP_WRITE_DISCARD com D3D11_MAP_WRITE_NO_OVERWRITE

D3D11_MAP_WRITE_DISCARD e D3D11_MAP_WRITE_NO_OVERWRITE normalmente são usados em conjunto com buffers dinâmicos de índice/vértice. D3D11_MAP_WRITE_DISCARD também pode ser usado com texturas dinâmicas. No entanto, D3D11_MAP_WRITE_NO_OVERWRITE não pode ser usado com texturas dinâmicas.

Um uso comum desses dois sinalizadores envolve o preenchimento de buffers dinâmicos de índice/vértice com geometria que pode ser vista na posição atual da câmera. Na primeira vez que os dados são inseridos no buffer em um determinado quadro, Map é chamado com D3D11_MAP_WRITE_DISCARD; Isso invalida o conteúdo anterior do buffer. Em seguida, o buffer é preenchido com todos os dados disponíveis.

As gravações subsequentes no buffer dentro do mesmo quadro devem usar D3D11_MAP_WRITE_NO_OVERWRITE. Isso permitirá que a CPU acesse um recurso que está potencialmente sendo usado pela GPU, desde que as restrições descritas anteriormente sejam respeitadas.

Requisitos

Requisito Valor
Cabeçalho d3d11.h

Confira também

Enumerações de recursos