Observação Esta estrutura foi substituída pela estrutura D3D12_FEATURE_DATA_ARCHITECTURE1. Se o seu aplicativo for destinado ao Windows 10, versão 1703 (Creators Update) ou superior, use D3D12_FEATURE_DATA_ARCHITECTURE1 (e D3D12_FEATURE_ARCHITECTURE1) em vez dela.
Sintaxe
Membros
NodeIndexTipo: UINT Em operação com vários adaptadores, indica qual adaptador físico do dispositivo é relevante. Consulte Sistemas com vários adaptadores. NodeIndex é preenchido pelo aplicativo antes de chamar CheckFeatureSupport, pois o aplicativo pode obter detalhes sobre a arquitetura de cada adaptador. TileBasedRenderer
Tipo: BOOL Especifica se o hardware e o driver dão suporte a um renderizador baseado em blocos. O runtime define esse membro como TRUE se o hardware e o driver derem suporte a um renderizador baseado em blocos. UMA
Tipo: BOOL 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 derem suporte a UMA. CacheCoherentUMA
Tipo: BOOL Especifica se o hardware e o driver dão suporte a UMA com coerência de cache. O runtime define esse membro como TRUE se o hardware e o driver derem suporte a UMA com coerência 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 ser executados razoavelmente bem em muitas arquiteturas de GPU gerenciando apenas a residência dos recursos em heaps D3D12_HEAP_TYPE_DEFAULT. Esses aplicativos só precisam chamar IDXGIAdapter3::QueryVideoMemoryInfo para DXGI_MEMORY_SEGMENT_GROUP_LOCAL, e devem tolerar 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 é restritivo demais para aplicativos que levam os limites ao máximo. Por isso, D3D12_FEATURE_DATA_ARCHITECTURE ajuda os aplicativos a otimizar melhor para as propriedades do adaptador subjacente. Alguns aplicativos podem querer otimizar melhor para adaptadores discretos e assumir a complexidade adicional de gerenciar os orçamentos tanto de memória do sistema quanto de memória de vídeo. Se o tamanho dos heaps de upload rivalizar com o tamanho das texturas padrão, é possível obter quase o dobro de utilização da memória. Ao oferecer suporte a essas otimizações, um aplicativo pode detectar dois orçamentos de residência ou reconhecer que UMA é false. Alguns aplicativos podem querer otimizar melhor para adaptadores integrados/UMA, especialmente aqueles interessados em prolongar 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 isso 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 presuma que UMA significa que toda a memória acessível pela GPU pode ser livremente tornada acessível pela CPU, porque não significa. Existe uma propriedade que se alinha mais a esse tipo de raciocínio: CacheCoherentUMA. Quando CacheCoherentUMA é false, um único orçamento de residência está disponível, mas o design UMA normalmente se beneficia das três atribuições de heap. Existem oportunidades de eliminar a cópia de recursos por meio do uso criterioso de recursos e heaps de upload e de readback, que fornecem acesso da CPU à memória. No entanto, essas oportunidades não são bem definidas. Portanto, os aplicativos devem ser cautelosos; e é aconselhável experimentar em diversos sistemas “UMA”, pois pode ser justificável recorrer à habilitação ou exclusão de determinadas IDs de dispositivo. Recomenda-se compreender a arquitetura de memória da 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, do tamanho e da localidade dos acessos aos dados etc. Para desenvolvedores avançados: quando UMA é true e CacheCoherentUMA é false, a característica mais singular desses adaptadores é que os heaps de upload ainda usam combinação de gravação (write-combine). No entanto, alguns adaptadores UMA se beneficiam tanto da propriedade sem acesso da CPU quanto da propriedade de combinação de gravação dos heaps padrão e de upload. Consulte GetCustomHeapProperties para obter mais detalhes. Quando CacheCoherentUMA é true, os aplicativos podem considerar com mais convicção abandonar a atribuição de heaps e usar em todos os lugares o equivalente de heap personalizado dos heaps de upload. Otimizações de UMA sem cópia são mais incentivadas de modo geral, pois mais cenários simplesmente se beneficiarão do uso compartilhado. O modelo de memória é muito propício a mais cenários e a uma adoção mais ampla. Ainda podem existir alguns casos extremos em que os benefícios não são obtidos com facilidade, mas eles 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 é unificada ou integrada entre a CPU e a GPU. A característica observável mais singular é que os heaps de upload, na verdade, usam write-back em CacheCoherentUMA. Para essas arquiteturas, o uso de combinação de gravação em heaps de upload costuma ser prejudicial. Os detalhes de baixo nível devem ser ignorados pela grande maioria dos aplicativos com um único adaptador. Como de costume, aplicativos com um único adaptador podem simplificar o cenário e garantir que as gravações da CPU em heaps de upload usem padrões compatíveis com a combinação de gravação. Os detalhes de nível inferior ajudam a reforçar os conceitos para aplicativos com vários adaptadores. Aplicativos com vários adaptadores provavelmente precisam entender as propriedades da arquitetura do adaptador bem o suficiente para escolher as propriedades de heap personalizado ideais para mover dados entre adaptadores com eficiência.Requisitos
Cabeçalho: d3d12_xs.h ou d3d12_x.hBiblioteca: d3d12_xs.lib ou d3d12_x.lib
Plataformas com suporte: consoles XBOX Series e família XBOX One
