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.
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 |