estrutura D3D12_FEATURE_DATA_ARCHITECTURE (d3d12.h)
Fornece detalhes sobre a arquitetura do adaptador, para que seu aplicativo possa otimizar melhor para determinadas propriedades do adaptador.
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. 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.
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. As otimizações de UMA de cópia zero são mais geralmente 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 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