Share via


D3D12_HEAP_TYPE enumeração (d3d12.h)

Especifica o tipo de heap. Quando residentes, os heaps residem em um pool de memória física específico com determinadas propriedades de cache de CPU.

Syntax

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

Constantes

 
D3D12_HEAP_TYPE_DEFAULT
Valor: 1
Especifica o heap padrão. Esse tipo de heap tem a maior largura de banda para a GPU, mas não pode fornecer acesso à CPU. A GPU pode ler e gravar na memória desse pool, e as barreiras de transição de recursos podem ser alteradas. Espera-se que a maioria dos heaps e recursos esteja localizada aqui e normalmente sejam populadas por meio de recursos em heaps de carregamento.
D3D12_HEAP_TYPE_UPLOAD
Valor: 2
Especifica um heap usado para upload. Esse tipo de heap tem acesso de CPU otimizado para upload para a GPU, mas não experimenta a quantidade máxima de largura de banda para a GPU. Esse tipo de heap é melhor para dados CPU-write-once, GPU-read-once; mas GPU-read-once é mais rigorosa do que o necessário. GPU-read-once-or-from-cache é um caso de uso aceitável para os dados; mas esses usos são difíceis de julgar devido a diferentes designs e tamanhos de cache de GPU. Em caso de dúvida, mantenha a definição gpu-read-once ou crie o perfil da diferença em muitas GPUs entre copiar os dados para um heap de _DEFAULT versus ler os dados de um heap de _UPLOAD.

Os recursos nesse heap devem ser criados com D3D12_RESOURCE_STATE_GENERIC_READ e não podem ser alterados para longe disso. O endereço da CPU para esses heaps normalmente não é eficiente para leituras de CPU.

Veja a seguir os usos típicos para heaps de _UPLOAD:

  • Inicializar recursos em um heap _DEFAULT com dados da CPU.

  • Carregar dados dinâmicos em um buffer constante que é lido, repetidamente, por cada vértice ou pixel.



Os seguintes provavelmente não são bons usos para heaps de _UPLOAD:

  • Reinicializando o conteúdo de um recurso a cada quadro.

  • Carregando dados constantes que são usados apenas em todas as outras chamadas de Desenho, em que cada Desenho usa uma quantidade não trivial de outros dados.

D3D12_HEAP_TYPE_READBACK
Valor: 3
Especifica um heap usado para leitura de volta. Esse tipo de heap tem acesso de CPU otimizado para ler dados de volta da GPU, mas não experimenta a quantidade máxima de largura de banda para a GPU. Esse tipo de heap é melhor para dados legíveis por CPU e gpu-write-once. O comportamento do cache de CPU é write-back, que é propício para várias leituras de CPU de linha de sub-cache.

Os recursos nesse heap devem ser criados com D3D12_RESOURCE_STATE_COPY_DEST e não podem ser alterados.
D3D12_HEAP_TYPE_CUSTOM
Valor: 4
Especifica um heap personalizado. O aplicativo pode especificar o pool de memória e as propriedades de cache da CPU diretamente, o que pode ser útil para otimizações de UMA, vários mecanismos, vários adaptadores ou outros casos especiais. Para fazer isso, espera-se que o aplicativo entenda a arquitetura do adaptador para fazer a escolha certa. Para obter mais detalhes, consulte

D3D12_FEATURE_ARCHITECTURE,
D3D12_FEATURE_DATA_ARCHITECTURE e
GetCustomHeapProperties.

Comentários

Essa enumeração é usada pelos seguintes itens de API:

Os tipos de heap se enquadram em duas categorias: tipos de heap abstraídos e tipos de heap personalizados.

Estes são os tipos de heap abstraídos:

  • D3D12_HEAP_TYPE_DEFAULT
  • D3D12_HEAP_TYPE_UPLOAD
  • D3D12_HEAP_TYPE_READBACK
Veja a seguir um tipo de heap personalizado:
  • D3D12_HEAP_TYPE_CUSTOM
Os tipos de heap abstraídos (_DEFAULT, _UPLOAD e _READBACK) são úteis para simplificar a gravação de aplicativos neutros do adaptador, pois esses aplicativos não precisam estar cientes da arquitetura de memória do adaptador. Para usar um tipo de heap abstraído para simplificar a gravação de aplicativos neutros do adaptador, o aplicativo trata essencialmente o adaptador como se fosse um adaptador NUMA ou discreto. Porém, o uso dos tipos de heap permite uma tradução eficiente para adaptadores UMA. Os aplicativos neutros da arquitetura do adaptador devem assumir que há dois pools de memória disponíveis, em que o pool com mais largura de banda de GPU não pode fornecer acesso à CPU. O pool com menor largura de banda de GPU pode ter acesso à CPU; mas deve ser otimizado para upload para GPU ou readback da GPU.

Observe que texturas (ao contrário dos buffers) não podem ser do tipo heap UPLOAD ou READBACK.

Requisitos

Requisito Valor
Cabeçalho d3d12.h

Confira também

Enumerações principais

Heaps de descritores