Share via


estrutura D3D12_FEATURE_DATA_ARCHITECTURE (d3d12.h)

Fornece detalhes sobre a arquitetura do adaptador para que seu aplicativo possa otimizar melhor determinadas propriedades do adaptador.

Nota Essa estrutura foi substituída pela estrutura D3D12_FEATURE_DATA_ARCHITECTURE1 . Se o aplicativo for direcionado Windows 10, versão 1703 (Atualização do Criador) ou superior, use D3D12_FEATURE_DATA_ARCHITECTURE1 (e D3D12_FEATURE_ARCHITECTURE1).
 

Sintaxe

typedef struct D3D12_FEATURE_DATA_ARCHITECTURE {
  UINT NodeIndex;
  BOOL TileBasedRenderer;
  BOOL UMA;
  BOOL CacheCoherentUMA;
} D3D12_FEATURE_DATA_ARCHITECTURE;

Membros

NodeIndex

Na operação de vários adaptadores, isso indica qual adaptador físico do dispositivo é relevante. Confira Sistemas multi-adaptadores. NodeIndex é preenchido pelo aplicativo antes de chamar CheckFeatureSupport, pois o aplicativo pode recuperar detalhes sobre a arquitetura de cada adaptador.

TileBasedRenderer

Especifica se o hardware e o driver dão suporte a um renderizador baseado em bloco. O runtime define esse membro como TRUE se o hardware e o driver derem suporte a um renderizador baseado em bloco.

UMA

Especifica se o hardware e o driver dão suporte a UMA. O runtime define esse membro como TRUE se o hardware e o driver deem suporte a UMA.

CacheCoherentUMA

Especifica se o hardware e o driver dão suporte à UMA coerente de cache. O runtime define esse membro como TRUE se o hardware e o driver deem suporte à UMA coerente de cache.

Comentários

Como usar UMA e CacheCoherentUMA

Os aplicativos D3D12 devem se preocupar em gerenciar a residência de memória e fornecer as propriedades de heap ideais. Os aplicativos D3D12 podem permanecer simplificados e executados razoavelmente bem em várias arquiteturas de GPU gerenciando apenas a residência de recursos em heaps D3D12_HEAP_TYPE_DEFAULT. Esses aplicativos só precisam chamar IDXGIAdapter3::QueryVideoMemoryInfo para DXGI_MEMORY_SEGMENT_GROUP_LOCAL e devem ser tolerantes a que D3D12_HEAP_TYPE_UPLOAD e D3D12_HEAP_TYPE_READBACK venham desse mesmo grupo de segmentos de memória.

No entanto, um design tão simples é muito restrito para aplicativos que efetuam push dos limites. Portanto, D3D12_FEATURE_DATA_ARCHITECTURE ajuda os aplicativos a otimizar melhor as propriedades subjacentes do adaptador.

Alguns aplicativos podem querer otimizar melhor para adaptadores discretos e assumir a complexidade adicional de gerenciar orçamentos de memória do sistema e de memória de vídeo. Se o tamanho dos heaps de upload rivalizar com o tamanho das texturas padrão, uma quase duplicação da utilização de memória estará disponível. Ao dar suporte a essas otimizações, um aplicativo pode detectar dois orçamentos de residência ou reconhecer que UMA é falsa.

Alguns aplicativos podem querer otimizar melhor para adaptadores integrados/UMA, especialmente aqueles que estão interessados em estender a vida útil da bateria em dispositivos móveis. Aplicativos D3D12 simples são forçados a copiar dados entre heaps com atribuições diferentes, quando nem sempre são necessários na UMA. No entanto, a propriedade UMA, por si só, abrange uma área cinza razoavelmente vaga de designs de GPU. Não suponha que UMA significa que toda a memória acessível por GPU pode ser livremente tornada acessível à CPU, porque não faz isso. Há uma propriedade que se alinha mais de perto a esse tipo de pensamento: CacheCoherentUMA.

Quando CacheCoherentUMA é falso, um único orçamento de residência está disponível, mas o design de UMA geralmente se beneficia das três atribuições de heap. Existem oportunidades para remover a cópia de recursos por meio do uso inteligente de heaps e recursos de upload e readback, que fornecem acesso à CPU à memória. Tais oportunidades não são claras, no entanto. Portanto, os aplicativos devem ser cautelosos; e a experimentação em uma variedade de sistemas "UMA" é aconselhável, pois é recomendável recorrer a habilitar ou impedir determinadas IDs de dispositivo. É recomendável entender a arquitetura de memória da GPU e como os tipos de heap são convertidos em propriedades de cache. A viabilidade do sucesso provavelmente depende da frequência com que cada processador lê ou grava os dados, o tamanho e a localidade dos acessos a dados etc. Para desenvolvedores avançados: quando UMA é true e CacheCoherentUMA é false, a característica mais exclusiva para esses adaptadores é que os heaps de upload ainda são combinados por gravação. No entanto, alguns adaptadores UMA se beneficiam das propriedades sem acesso à CPU e write-combine de heaps padrão e de upload. Consulte GetCustomHeapProperties para obter mais detalhes.

Quando CacheCoherentUMA é true, os aplicativos podem entreter mais fortemente abandonar a atribuição de heaps e usar o heap personalizado equivalente de heaps de upload em todos os lugares. As otimizações DE UMA de cópia zero geralmente são incentivadas, pois mais cenários se beneficiarão apenas do uso compartilhado. O modelo de memória é muito propício para mais cenários e uma adoção mais ampla. Alguns casos de canto ainda podem existir quando os benefícios não são obtidos facilmente, mas devem ser muito mais raros e menos prejudiciais do que outras opções. Para desenvolvedores avançados: CacheCoherentUMA significa que uma quantidade significativa de caches na hierarquia de memória também é unificada ou integrada entre a CPU e a GPU. A característica observável mais exclusiva é que os heaps de upload são, na verdade, write-back no CacheCoherentUMA. Para essas arquiteturas, o uso de write-combine em heaps de upload geralmente é um prejuízo.

Os detalhes de baixo nível devem ser ignorados por uma grande maioria dos aplicativos de adaptador único. Como de costume, os aplicativos de adaptador único podem simplificar o cenário e garantir que as gravações da CPU para carregar heaps usem padrões que são amigáveis para a combinação de gravação. Os detalhes de nível inferior ajudam a reforçar os conceitos para aplicativos de vários adaptadores. Aplicativos de vários adaptadores provavelmente precisam entender bem as propriedades da arquitetura do adaptador para escolher as propriedades de heap personalizadas ideais para mover dados com eficiência entre adaptadores.

Requisitos

Requisito Valor
Cabeçalho d3d12.h

Confira também

Estruturas principais

D3D12_FEATURE