Nel mondo dello sviluppo di videogiochi, le API grafiche sono uno strumento fondamentale per sfruttare al meglio le potenzialità delle schede video. Tra le API più diffuse e avanzate, spiccano le DirectX 12 di Microsoft, che offrono ai programmatori un controllo diretto e a basso livello sulle risorse della GPU. Il colosso di Redmond, nell’ultimo round di aggiornamento delle API DirectX 12 (Agility SDK 1.710.0), ha implementato due nuove funzionalità: Non-Normalized sampling (una tecnica che permette di campionare una texture senza normalizzare le coordinate UV, ovvero senza mapparle tra 0 e 1) e, soprattutto, GPU Upload Heaps, che consente alla CPU di avere un accesso diretto e simultaneo alla memoria della GPU.
Questa innovazione può aumentare le prestazioni nei titoli DX12 e diminuire l’utilizzo della RAM del sistema, poiché la funzionalità (disponibile ora nel SDK Agility) elimina la necessità di copiare i dati dalla CPU alla GPU. Si tratta di un nuovo tipo di memoria allocabile sulla GPU che può essere usata per trasferire dati dalla CPU alla GPU in modo più efficiente e flessibile.
Le GPU Upload Heaps sono simili alle Default Heaps, ma hanno alcune differenze:
– Le GPU Upload Heaps possono essere mappate in modo persistente dalla CPU, ovvero possono essere accedute dalla CPU senza dover chiamare le funzioni Map e Unmap ogni volta. Questo riduce il sovraccarico delle chiamate alle API e permette di scrivere direttamente nella memoria della GPU.
– Le GPU Upload Heaps possono essere usate per qualsiasi tipo di risorsa grafica, come texture, buffer o constants. Inoltre, possono essere usate anche per i command list e i bundle, ovvero le sequenze di comandi che vengono inviate alla GPU per eseguire il rendering.
– Le GPU Upload Heaps possono essere usate in modo asincrono dalla CPU e dalla GPU, ovvero la CPU può scrivere nella memoria della GPU mentre la GPU la legge o viceversa. Questo permette di ottimizzare il parallelismo tra i due processori e di ridurre i tempi di attesa.
Cos’è GPU Upload Heaps?
GPU Upload Heaps è una funzionalità che sfrutta la tecnologia Resizable Base Address Register (BAR), che permette a Windows di gestire la VRAM della GPU in WDDM 2.0 o successivi. Con la VRAM gestita da Windows, D3D ora espone l’accesso alla memoria dell’heap direttamente alla CPU. Come detto, questo consente sia alla CPU che al GPU di accedere direttamente alla memoria simultaneamente, rimuovendo la necessità di copiare i dati dalla CPU alla GPU. In pratica, significa che gli sviluppatori possono creare risorse D3D12 con il tipo di heap D3D12_HEAP_TYPE_GPU_UPLOAD, che sono allocate nella memoria della GPU e visibili alla CPU. Queste risorse possono essere usate per buffer di vertici, indici, costanti e texture non normalizzate.
Quali sono i vantaggi di GPU Upload Heaps?
GPU Upload Heaps offre diversi vantaggi per le prestazioni e l’efficienza della memoria:
– Riduce il traffico sul bus PCI tra la CPU e la GPU, che può essere un collo di bottiglia in alcuni scenari.
– Riduce l’utilizzo della RAM del sistema, poiché non è necessario mantenere copie dei dati nella memoria della CPU e nella VRAM.
– Riduce il numero di operazioni di copia e transizione di stato delle risorse, che possono essere costose in termini di tempo e banda passante.
– Aumenta la flessibilità degli sviluppatori, che possono scegliere il tipo di heap più adatto alle loro esigenze.
Come si usa GPU Upload Heaps?
GPU Upload Heaps è disponibile ora nel SDK Agility 1.710.0 preview, che può essere scaricato dal sito ufficiale di Microsoft. GPU Upload Heaps è supportato da tutte le GPU che supportano Resizable BAR, che include le schede NVIDIA GeForce RTX 30 Series, AMD Radeon RX 6000 Series e Intel Xe Graphics. Per abilitare Resizable BAR, è necessario avere un BIOS compatibile, un driver grafico aggiornato e Windows 10 versione 2004 o successiva.
Le GPU Upload Heaps sono una novità importante per le DirectX 12, perché offrono ai programmatori una maggiore libertà e flessibilità nel gestire il trasferimento dei dati tra la CPU e la GPU. Questo può portare a migliorare le prestazioni e la qualità grafica dei videogiochi che sfruttano le DirectX 12. Per approfondire il funzionamento delle GPU Upload Heaps e vedere alcuni esempi pratici di utilizzo, si può consultare la documentazione ufficiale di Microsoft.