D3D12_HEAP_FLAGS enumeração (d3d12.h)

Especifica opções de heap, como se o heap pode conter texturas e se os recursos são compartilhados entre adaptadores.

Syntax

typedef enum D3D12_HEAP_FLAGS {
  D3D12_HEAP_FLAG_NONE = 0,
  D3D12_HEAP_FLAG_SHARED = 0x1,
  D3D12_HEAP_FLAG_DENY_BUFFERS = 0x4,
  D3D12_HEAP_FLAG_ALLOW_DISPLAY = 0x8,
  D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER = 0x20,
  D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES = 0x40,
  D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES = 0x80,
  D3D12_HEAP_FLAG_HARDWARE_PROTECTED = 0x100,
  D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH = 0x200,
  D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS = 0x400,
  D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT = 0x800,
  D3D12_HEAP_FLAG_CREATE_NOT_ZEROED = 0x1000,
  D3D12_HEAP_FLAG_TOOLS_USE_MANUAL_WRITE_TRACKING,
  D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0,
  D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = 0xc0,
  D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = 0x44,
  D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = 0x84
} ;

Constantes

 
D3D12_HEAP_FLAG_NONE
Valor: 0
Nenhuma opção foi especificada.
D3D12_HEAP_FLAG_SHARED
Valor: 0x1
O heap é compartilhado. Consulte Heaps Compartilhados.
D3D12_HEAP_FLAG_DENY_BUFFERS
Valor: 0x4
O heap não tem permissão para conter buffers.
D3D12_HEAP_FLAG_ALLOW_DISPLAY
Valor: 0x8
O heap tem permissão para conter superfícies de cadeia de troca.
D3D12_HEAP_FLAG_SHARED_CROSS_ADAPTER
Valor: 0x20
O heap tem permissão para compartilhar recursos entre adaptadores. Consulte Heaps Compartilhados. Uma sessão protegida não pode ser misturada com recursos compartilhados entre adaptadores.
D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES
Valor: 0x40
O heap não tem permissão para armazenar texturas rt (destino de renderização) e/ou Depth-Stencil (DS).
D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES
Valor: 0x80
O heap não tem permissão para conter recursos com D3D12_RESOURCE_DIMENSION_TEXTURE1D, D3D12_RESOURCE_DIMENSION_TEXTURE2D ou D3D12_RESOURCE_DIMENSION_TEXTURE3D, a menos que D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ou D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL estejam presentes. Consulte D3D12_RESOURCE_DIMENSION e D3D12_RESOURCE_FLAGS.
D3D12_HEAP_FLAG_HARDWARE_PROTECTED
Valor: 0x100
Incompatível. Não use.
D3D12_HEAP_FLAG_ALLOW_WRITE_WATCH
Valor: 0x200
O heap dá suporte à funcionalidade MEM_WRITE_WATCH, o que faz com que o sistema acompanhe as páginas gravadas na região de memória confirmada. Esse sinalizador não pode ser combinado com os sinalizadores D3D12_HEAP_TYPE_DEFAULT ou D3D12_CPU_PAGE_PROPERTY_UNKNOWN. Os aplicativos não são desencorajados a usar esse sinalizador por conta própria porque impedem que as ferramentas usem essa funcionalidade.
D3D12_HEAP_FLAG_ALLOW_SHADER_ATOMICS
Valor: 0x400
Garante que as operações atômicas serão atômicas na memória desse heap, de acordo com componentes capazes de ver a memória.

A criação de um heap com esse sinalizador falhará em qualquer uma dessas condições.
– O tipo de heap é D3D12_HEAP_TYPE_DEFAULT e o heap pode estar visível em vários nós, mas o dispositivo não dá suporte a D3D12_CROSS_NODE_SHARING_TIER_3.
- O heap é visível para CPU, mas o tipo de heap não é D3D12_HEAP_TYPE_CUSTOM.

Observe que heaps com esse sinalizador podem ser um recurso limitado em alguns sistemas.
D3D12_HEAP_FLAG_CREATE_NOT_RESIDENT
Valor: 0x800
O heap é criado em um estado não residente e deve ser feito residente usando ID3D12Device::MakeResident ou ID3D12Device3::EnqueueMakeResident.

Por padrão, a etapa final da criação do heap é tornar o heap residente, portanto, esse sinalizador ignora essa etapa e permite que o aplicativo decida quando fazer isso.
D3D12_HEAP_FLAG_CREATE_NOT_ZEROED
Valor: 0x1000
Permite que o sistema operacional não zero o heap criado. Por padrão, os heaps e os recursos confirmados são quase sempre zerados após a criação. Esse sinalizador permite que isso seja ignorado em alguns cenários. No entanto, isso não garante isso. Por exemplo, a memória proveniente de outros processos ainda precisa ser zerado para proteção de dados e isolamento de processo. Isso pode reduzir a sobrecarga de criação do heap.
D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES
Valor: 0
O heap tem permissão para armazenar todos os tipos de buffers e/ou texturas. Este é um alias; para obter mais detalhes, consulte "Aliases" na seção Comentários.
D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS
Valor: 0xc0
O heap só tem permissão para armazenar buffers. Este é um alias; para obter mais detalhes, consulte "Aliases" na seção Comentários.
D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES
Valor: 0x44
O heap só tem permissão para armazenar texturas não RT, não DS. Este é um alias; para obter mais detalhes, consulte "Aliases" na seção Comentários.
D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES
Valor: 0x84
O heap só tem permissão para armazenar texturas RT e/ou DS. Este é um alias; para obter mais detalhes, consulte "Aliases" na seção Comentários.

Comentários

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

Os sinalizadores de heap a seguir devem ser usados com ID3D12Device::CreateHeap, mas serão definidos automaticamente para heaps implícitos criados por ID3D12Device::CreateCommittedResource. Os adaptadores que dão suporte apenas à camada de heap 1 devem definir dois dos três sinalizadores a seguir.
Valor Descrição
D3D12_HEAP_FLAG_DENY_BUFFERS O heap não tem permissão para conter recursos com D3D12_RESOURCE_DIMENSION_BUFFER (que é uma constante de enumeração D3D12_RESOURCE_DIMENSION ).
D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES O heap não tem permissão para conter recursos com D3D12_RESOURCE_DIMENSION_TEXTURE1D, D3D12_RESOURCE_DIMENSION_TEXTURE2D ou D3D12_RESOURCE_DIMENSION_TEXTURE3D junto com D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET ou D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL. (Os dois últimos itens são D3D12_RESOURCE_FLAGS constantes de enumeração.)
D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES O heap não tem permissão para conter recursos com D3D12_RESOURCE_DIMENSION_TEXTURE1D, D3D12_RESOURCE_DIMENSION_TEXTURE2D ou D3D12_RESOURCE_DIMENSION_TEXTURE3D, a menos que D3D12_RESOURCE_FLAG_ALLOW_RENDER_TARGET e D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL estejam ausentes.

Aliases

Os adaptadores que dão suporte à camada de heap 2 ou superior também têm permissão para definir nenhum dos sinalizadores acima. Os aliases para esses sinalizadores estão disponíveis para aplicativos que preferem pensar apenas em quais recursos têm suporte.

Os aliases a seguir existem, portanto, tenha cuidado ao fazer manipulações de bits:

  • D3D12_HEAP_FLAG_ALLOW_ALL_BUFFERS_AND_TEXTURES = 0 e só tem suporte na camada de heap 2 e superior.
  • D3D12_HEAP_FLAG_ALLOW_ONLY_BUFFERS = D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES | D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES
  • D3D12_HEAP_FLAG_ALLOW_ONLY_NON_RT_DS_TEXTURES = D3D12_HEAP_FLAG_DENY_BUFFERS | D3D12_HEAP_FLAG_DENY_RT_DS_TEXTURES
  • D3D12_HEAP_FLAG_ALLOW_ONLY_RT_DS_TEXTURES = D3D12_HEAP_FLAG_DENY_BUFFERS | D3D12_HEAP_FLAG_DENY_NON_RT_DS_TEXTURES

Heaps exibicionáveis

Heaps exibicionáveis são mais comumente criados pela cadeia de troca para apresentação, para habilitar a verificação em um monitor.

Heaps exibicionáveis são especificados com o membro D3D12_HEAP_FLAG_ALLOW_DISPLAY da enumeração D3D12_HEAP_FLAGS .

Os aplicativos podem criar heaps exibicionáveis fora de uma cadeia de troca; mas não pode realmente apresentar com eles. Esse sinalizador não é compatível com CreateHeap e só pode ser usado com CreateCommittedResource com D3D12_HEAP_TYPE_DEFAULT.

Restrições adicionais à D3D12_RESOURCE_DESC se aplicam ao recurso criado com heaps exibicionáveis.

  • O formato não só deve ser compatível com o dispositivo, mas deve ter suporte para verificação. Consulte o uso do membro D3D12_FORMAT_SUPPORT1_DISPLAY do D3D12_FORMAT_SUPPORT1.
  • A dimensão deve ser D3D12_RESOURCE_DIMENSION_TEXTURE2D.
  • O alinhamento deve ser 0.
  • ArraySize pode ser 1 ou 2.
  • MipLevels deve ser 1.
  • SampleDesc deve ter Contagem definida como 1 e Qualidade definida como 0.
  • O layout deve ser D3D12_TEXTURE_LAYOUT_UNKNOWN.
  • D3D12_RESOURCE_FLAG_ALLOW_DEPTH_STENCIL e D3D12_RESOURCE_FLAG_ALLOW_CROSS_ADAPTER são sinalizadores inválidos.

Requisitos

Requisito Valor
Cabeçalho d3d12.h

Confira também

CD3DX12_HEAP_DESC

Enumerações principais

Heaps de descritores