estrutura D3D12_FEATURE_DATA_ARCHITECTURE1 (d3d12.h)

Fornece detalhes sobre os detalhes de arquitetura de cada adaptador, para que seu aplicativo possa otimizar melhor para determinadas propriedades do adaptador.

Observação Essa estrutura, introduzida no Windows 10, versão 1703 (Atualização dos Criadores), substitui a estrutura D3D12_FEATURE_DATA_ARCHITECTURE. Se o aplicativo for direcionado ao Windows 10, versão 1703 (Atualização dos Criadores) ou superior, use D3D12_FEATURE_DATA_ARCHITECTURE1 (e D3D12_FEATURE_ARCHITECTURE1).
 

Sintaxe

typedef struct D3D12_FEATURE_DATA_ARCHITECTURE1 {
  UINT NodeIndex;
  BOOL TileBasedRenderer;
  BOOL UMA;
  BOOL CacheCoherentUMA;
  BOOL IsolatedMMU;
} D3D12_FEATURE_DATA_ARCHITECTURE1;

Membros

NodeIndex

Na operação de vários adaptadores, isso indica qual adaptador físico do dispositivo é relevante. Consulte 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 VERDADEIRO se o hardware e o driver dão 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 VERDADEIRO se o hardware e o driver dão suporte a UMA.

CacheCoherentUMA

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

IsolatedMMU

sal: Out

Especifica se o hardware e o driver dão suporte à MMU (Unidade de Gerenciamento de Memória) isolada. O runtime define esse membro como VERDADEIRO se a GPU honrar as propriedades da tabela de páginas da CPU, como MEM_WRITE_WATCH (para obter mais informações, consulte VirtualAlloc) e PAGE_READONLY (para obter mais informações, consulte Memory Protection Constants).

Se VERDADEIRO, o aplicativo deverá tomar cuidado para não usar memória com essas propriedades de tabela de página com a GPU, pois a GPU pode disparar essas propriedades da tabela de página de maneiras inesperadas. Por exemplo, as operações de gravação de GPU podem ser mais grosseiras do que o aplicativo espera, especialmente gravações de dentro de sombreadores. Determinadas páginas de inspeção de gravação podem parecer sujas, mesmo quando não é óbvio como as gravações de GPU podem tê-las afetado. As operações de GPU associadas a cenários de uso de heap de upload e readback funcionam bem com páginas de inspeção de gravação, mas podem ocasionalmente gerar falsos positivos que podem ser ignorados com segurança.

Observações

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 muitas arquiteturas de GPU gerenciando apenas a residência para recursos em heaps D3D12_HEAP_TYPE_DEFAULT. Esses aplicativos só precisam chamar IDXGIAdapter3::QueryVideoMemoryInfo para DXGI_MEMORY_SEGMENT_GROUP_LOCAL e devem ser tolerantes 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 do adaptador subjacente.

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 uma é falso.

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 diferentes atribuições, quando nem sempre é necessário em UMA. No entanto, a propriedade UMA, por si só, abrange uma área cinzenta 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 o faz. 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 o recurso para habilitar ou impedir determinadas IDs de dispositivo pode ser justificado. É recomendável entender a arquitetura de memória de GPU e como os tipos de heap se traduzem 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 um é verdadeiro e cacheCoherentUMA é falso, a característica mais exclusiva para esses adaptadores é que os heaps de upload ainda são combinados por gravação. No entanto, alguns adaptadores de UMA se beneficiam das propriedades sem acesso à CPU e à combinação de gravação de heaps padrão e de upload. Consulte GetCustomHeapProperties para obter mais detalhes.

Quando CacheCoherentUMA for verdadeiro, os aplicativos poderão entreter mais fortemente abandonar a atribuição de heaps e usar o heap personalizado equivalente de heaps de upload em todos os lugares. Otimizações DE UMA de cópia zero, como as oferecidas por WriteToSubresource são incentivadas de forma mais geral, 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 em que os benefícios não são facilmente obtidos, mas devem ser muito mais raros e menos prejudiciais do que outras opções. Para desenvolvedores avançados: CacheCoherentUMA significa que uma quantidade significativa dos caches na hierarquia de memória também são unificados ou integrados entre a CPU e a GPU. A característica observável mais exclusiva é que os heaps de upload são, na verdade, write-back em 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 pela grande maioria dos aplicativos de adaptador único. Como de costume, os aplicativos de adaptador único podem simplificar a paisagem e garantir que as gravações da CPU para carregar heaps usem padrões que sejam amigáveis à combinação de gravação. Os detalhes de nível inferior ajudam a reforçar os conceitos para aplicativos multi-adaptador. Aplicativos multi-adaptador provavelmente precisam entender bem as propriedades de 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

Consulte também

estruturas principais

D3D12_FEATURE