Melhorias do DXGI 1.4
A funcionalidade a seguir foi adicionada ou alterada no Microsoft DirectX Graphics Infrastructure (DXGI) 1.4, em grande parte para dar suporte ao Direct3D 12.
Enumeração mais barata do adaptador
Para o Direct3D 12, não é mais possível retroceder de um dispositivo para o IDXGIAdapter que foi usado para criá-lo. Também não é mais possível fornecer D3D_DRIVER_TYPE_WARP em D3D12CreateDevice. Para facilitar o desenvolvimento, você pode usar IDXGIFactory4 para lidar com ambos. IDXGIFactory4::EnumAdapterByLuid (projetado para ser emparelhado com ID3D12Device::GetAdapterLuid) permite que um aplicativo recupere informações sobre o adaptador em que um dispositivo Direct3D 12 foi criado. IDXGIFactory4::EnumWarpAdapter fornece um adaptador que pode ser fornecido a D3D12CreateDevice para usar o renderizador WARP.
Acompanhamento de orçamento de memória de vídeo
Os desenvolvedores de aplicativos são incentivados a usar um sistema de reserva de memória de vídeo, para informar o sistema operacional sobre a quantidade de memória de vídeo física que o aplicativo não pode ficar sem.
A quantidade de memória física disponível para um processo é conhecida como "orçamento de memória de vídeo". O orçamento pode flutuar visivelmente à medida que os processos em segundo plano são ativados e dormem; e flutuam drasticamente quando o usuário muda para outro aplicativo. O aplicativo pode ser notificado quando o orçamento muda e sonda o orçamento atual e a quantidade de memória consumida no momento. Se um aplicativo não permanecer dentro de seu orçamento, o processo será intermitentemente congelado para permitir que outros aplicativos sejam executados e/ou as APIs de criação retornarão falha. A interface IDXGIAdapter3 fornece os métodos relativos a essa funcionalidade, em particular QueryVideoMemoryInfo e RegisterVideoMemoryBudgetChangeNotificationEvent.
Para obter mais informações, consulte o tópico Direct3D 12 sobre Residência.
Alterações de conjunto de trocas do Direct3D 12
Algumas das funcionalidades existentes de swapchain do Direct3D 11 foram preteridas para obter as reduções de sobrecarga no Direct3D 12. Enquanto outras alterações foram feitas para alinhar-se aos conceitos do Direct3D 12 ou fornecer melhor suporte para recursos do Direct3D 12.
Identidade invariável do backbuffer
No Direct3D 11, os aplicativos podiam chamar GetBuffer( 0, ... ) apenas uma vez. Cada chamada para Apresentar alterou implicitamente a identidade do recurso da interface retornada. O Direct3D 12 não dá mais suporte a essa alteração implícita de identidade de recurso, devido à sobrecarga de CPU necessária e ao design do descritor de recursos flexível. Como resultado, o aplicativo deve chamar o GetBuffer manualmente para cada buffer criado com a cadeia de troca. O aplicativo deve renderizar manualmente para o próximo buffer na sequência depois de chamar Present. Os aplicativos são incentivados a criar um cache de descritores para cada buffer, em vez de recriar muitos objetos cada Presente.
Suporte a vários adaptadores
Quando uma cadeia de troca é criada em um adaptador de várias GPUs, todos os backbuffers são criados no nó 1 e há suporte apenas para uma única fila de comandos. O ResizeBuffers1 permite que os aplicativos criem backbuffers em nós diferentes, permitindo que uma fila de comandos diferente seja usada com cada um. Esses recursos permitem que técnicas alternativas de renderização de quadro (AFR) sejam usadas com a cadeia de troca. Consulte Sistemas de vários adaptadores.
Diversos
- Um objeto de fila de comandos deve ser passado para métodos CreateSwapChain em vez do objeto de dispositivo Direct3D 12.
- Há suporte apenas para os dois seguintes efeitos de troca de modelo de inversão:
- DXGI_SWAP_EFFECT_FLIP_DISCARD deve ser preferencial quando os aplicativos são totalmente renderizados sobre o backbuffer antes de apresentá-lo ou estão interessados em dar suporte a cenários multi-adaptador facilmente.
DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL deve ser usado por aplicativos que dependem de otimizações parciais de apresentação ou lidos regularmente de backbuffers apresentados anteriormente. - SetFullscreenState não possui mais exclusivamente a exibição, de modo que os elementos do sistema operacional iniciados pelo usuário podem aparecer perfeitamente na frente da saída do aplicativo. As configurações de volume são um exemplo disso.