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.

Sintaxe

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 experimenta 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 recurso podem ser alteradas. Espera-se que a maioria dos heaps e recursos esteja localizada aqui e normalmente seja preenchida por meio de recursos em heaps de upload.
D3D12_HEAP_TYPE_UPLOAD
Valor: 2
Especifica um heap usado para carregamento. Esse tipo de heap tem acesso à CPU otimizado para carregar na 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 rigoroso 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 tamanhos e designs 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 neste 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 geralmente 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.

  • Carregando 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:

  • Inicializando novamente 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 à 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 subconsulta.

Os recursos neste heap devem ser criados com D3D12_RESOURCE_STATE_COPY_DEST e não podem ser alterados para longe disso.
D3D12_HEAP_TYPE_CUSTOM
Valor: 4
Especifica um heap personalizado. O aplicativo pode especificar diretamente as propriedades do pool de memória e do cache da CPU, o que pode ser útil para otimizações de UMA, multi-engine, multi-adaptador 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_ARCHITECTUREe
GetCustomHeapProperties .

Observações

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.

Veja a seguir 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 de 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 de adaptador, o aplicativo essencialmente trata o adaptador como se fosse um adaptador NUMA ou discreto. No entanto, o uso dos tipos de heap permite uma tradução eficiente para adaptadores UMA. Os aplicativos neutros de 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 upload ou READBACK do tipo heap.

Requisitos

Requisito Valor
cabeçalho d3d12.h

Consulte também

Enumerações principais

heaps de descritor