Condividi tramite


Differenze nel modello di associazione da Direct3D 11

Una delle principali decisioni di progettazione dietro l'associazione DirectX12 consiste nel separarlo da altre attività di gestione. Ciò pone alcuni requisiti per l'app per gestire determinati potenziali pericoli.

Il vantaggio principale del modello di associazione D3D12 è che consente alle app di modificare frequentemente le associazioni di trama, senza un costo elevato delle prestazioni della CPU. Altri vantaggi sono che gli shader hanno accesso a un numero molto elevato di risorse, gli shader non devono sapere in anticipo quante risorse verranno associate e che un modello di associazione di risorse unificato può essere usato indipendentemente dall'hardware o dal flusso di contenuto delle app.

Per migliorare le prestazioni, il modello di associazione non richiede al sistema di tenere traccia delle associazioni che un'app ha richiesto di usare la GPU ed è disponibile un'integrazione pulita tra elenchi di comandi con binding e multithreading.

Le sezioni seguenti elencano alcune delle modifiche apportate al modello di associazione di risorse a partire da D3D11.

Gestione della residenza della memoria separata dall'associazione

Le applicazioni hanno un controllo esplicito sulle superfici che devono essere disponibili per l'uso diretto della GPU (chiamata "residente"). Al contrario, possono applicare altri stati alle risorse, ad esempio rendendoli non residenti in modo esplicito o consentendo al sistema operativo di scegliere per determinate classi di applicazioni che richiedono un footprint di memoria minimo. Il punto importante è che la gestione dell'applicazione di ciò che risiede è completamente disaccoppiata dal modo in cui fornisce l'accesso alle risorse agli shader.

Il disaccoppiamento della gestione della residenza dal meccanismo per concedere agli shader l'accesso alle risorse riduce il costo del sistema/hardware per il rendering, poiché il sistema operativo non deve controllare costantemente lo stato di associazione locale per sapere cosa rendere residente. Inoltre, gli shader non devono più sapere quali superfici esatte devono fare riferimento, purché l'intero set di risorse eventualmente accessibili sia stato reso residente in anticipo.

Gestione della durata degli oggetti separata dall'associazione

A differenza delle API precedenti, il sistema non tiene più traccia delle associazioni di risorse alla pipeline. Usato per consentire al sistema di mantenere attive le risorse rilasciate dall'applicazione perché sono ancora a cui fa riferimento il lavoro della GPU in sospeso.

Prima di liberare qualsiasi risorsa, ad esempio una trama, le applicazioni ora devono assicurarsi che la GPU abbia completato il riferimento. Ciò significa che prima che un'applicazione possa liberare in modo sicuro una risorsa che la GPU deve aver completato l'esecuzione dell'elenco di comandi che fa riferimento alla risorsa.

Rilevamento dello stato delle risorse del driver separato dall'associazione

Il sistema non controlla più le associazioni di risorse per comprendere quando si sono verificate transizioni di risorse che richiedono un driver aggiuntivo o un lavoro GPU. Un esempio comune per molte GPU e driver è la necessità di sapere quando una superficie passa dall'uso come visualizzazione destinazione di rendering (RTV) a visualizzazione risorse shader (SRV). Le applicazioni devono ora identificare quando vengono eseguite transizioni di risorse che il sistema potrebbe preoccuparsi tramite API dedicate.

Sincronizzazione della memoria mappata della CPU con GPU separata dall'associazione

Il sistema non controlla più le associazioni di risorse per capire se il rendering deve essere ritardato perché dipende da una risorsa mappata per l'accesso alla CPU ma non ancora mappata. Le applicazioni ora hanno la responsabilità di sincronizzare gli accessi alla memoria della CPU e della GPU. A tale scopo, il sistema fornisce meccanismi per l'applicazione per richiedere la sospensione di un thread della CPU fino al completamento del lavoro. È anche possibile eseguire il polling, ma può essere meno efficiente.

Associazione di risorse