Condividi tramite


Miglioramenti di DXGI 1.4

Le funzionalità seguenti sono state aggiunte o modificate in Microsoft DirectX Graphics Infrastructure (DXGI) 1.4, in gran parte per supportare Direct3D 12.

Enumerazione adattatore più economico

Per Direct3D 12, non è più possibile eseguire il backtracking da un dispositivo all'IDXGIAdapter usato per crearlo. Non è più possibile fornire D3D_DRIVER_TYPE_WARP in D3D12CreateDevice. Per semplificare lo sviluppo, è possibile usare IDXGIFactory4 per gestire entrambi questi aspetti. IDXGIFactory4::EnumAdapterByLuid (progettato per essere abbinato a ID3D12Device::GetAdapterLuid) consente a un'app di recuperare informazioni sulla scheda in cui è stato creato un dispositivo Direct3D 12. IDXGIFactory4::EnumWarpAdapter fornisce un adattatore che può essere fornito a D3D12CreateDevice per usare il renderer WARP.

Rilevamento del budget di memoria video

Gli sviluppatori di applicazioni sono invitati a usare un sistema di prenotazione della memoria video, per informare il sistema operativo della quantità di memoria video fisica che l'app non può andare senza.

La quantità di memoria fisica disponibile per un processo è nota come "budget di memoria video". Il budget può variare notevolmente man mano che i processi in background si svegliano e dormono; e fluttua notevolmente quando l'utente passa a un'altra applicazione. L'applicazione può ricevere una notifica quando il budget cambia e esegue il polling sia del budget corrente che della quantità di memoria attualmente utilizzata. Se un'applicazione non rimane all'interno del budget, il processo verrà bloccato in modo intermittente per consentire l'esecuzione di altre applicazioni e/o le API di creazione restituiranno un errore. L'interfaccia IDXGIAdapter3 fornisce i metodi relativi a questa funzionalità, in particolare QueryVideoMemoryInfo e RegisterVideoMemoryBudgetChangeNotificationEvent.

Per altre informazioni, vedere l'argomento Direct3D 12 sulla residenza.

Modifiche direct3D 12 swapchain

Alcune delle funzionalità di swapchain Direct3D 11 esistenti sono state deprecate per ottenere le riduzioni di sovraccarico in Direct3D 12. Mentre altre modifiche sono state apportate per allinearsi ai concetti di Direct3D 12 o fornire supporto migliore per le funzionalità Direct3D 12.

Identità backbuffer invariante

In Direct3D 11, le applicazioni potrebbero chiamare GetBuffer( 0, ... ) una sola volta. Ogni chiamata a Present modifica implicitamente l'identità della risorsa dell'interfaccia restituita. Direct3D 12 non supporta più la modifica implicita dell'identità delle risorse, a causa del sovraccarico della CPU richiesto e della progettazione del descrittore di risorse flessibile. Di conseguenza, l'applicazione deve chiamare manualmente GetBuffer per ogni buffer creato con la swapchain. L'applicazione deve eseguire manualmente il rendering nel buffer successivo nella sequenza dopo aver chiamato Present. Le applicazioni sono incoraggiate a creare una cache di descrittori per ogni buffer, anziché ricreare molti oggetti ogni presente.

Supporto multi-adapter

Quando viene creata una swapchain in una scheda multi-GPU, tutti i backbuffer vengono creati nel nodo 1 e solo una singola coda di comandi è supportata. ResizeBuffers1 consente alle applicazioni di creare backbuffer in nodi diversi, consentendo l'uso di una coda di comandi diversa con ognuna. Queste funzionalità abilitano le tecniche di rendering di frame alternativi (AFR) da usare con la swapchain. Fare riferimento ai sistemi multi-adapter.

Varie

  • Un oggetto coda di comandi deve essere passato ai metodi CreateSwapChain anziché all'oggetto dispositivo Direct3D 12.
  • Sono supportati solo i due effetti di scambio di modelli a capovolgimento seguenti:
    DXGI_SWAP_EFFECT_FLIP_DISCARD deve essere preferito quando le applicazioni vengono completamente eseguite sul backbuffer prima di presentare o sono interessate a supportare facilmente scenari multi-adapter.
    DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL deve essere usato dalle applicazioni che si basano su ottimizzazioni di presentazione parziali o regolarmente letti da backbuffer presentati in precedenza.
  • SetFullscreenState non possiede più esclusivamente la visualizzazione, quindi gli elementi del sistema operativo avviato dall'utente possono essere visualizzati facilmente davanti all'output dell'applicazione. Le impostazioni del volume sono un esempio di questo.

Livelli di funzionalità hardware Direct3D 12

Guida alla programmazione per DXGI