In che modo la GPU gestisce la trama e la VRAM?


18

In realtà sono un sacco di domande correlate:

  1. Le trame compresse (dxt5 / dxt1 ecc.) Vengono mai completamente decompresse durante il rendering della pipeline?

  2. Se la risposta alla prima domanda è vera, come viene gestita la memoria per diverse grandi trame non compresse?

  3. Framebuffer è diverso dalla VRAM nelle moderne GPU?

Risposte:


29

I formati di texture compressi GPU come DXT / BC / ETC sono specificamente progettati per essere letti direttamente dalla loro forma compressa. Non devono essere decompressi in un buffer RGBA non elaborato.

Il modo in cui funziona è che ogni blocco di texel (spesso 4x4) occupa un numero fisso di bit - quindi sappiamo esattamente quanto lontano nel buffer cercare un particolare texel - e questi blocchi possono essere decompressi senza leggere tutto ciò che lo circonda / informazioni sulla trama precedente. Le GPU contengono hardware specializzato che decomprime solo i blocchi texel richiesti in base alle esigenze per soddisfare le richieste di campionamento delle trame dai tuoi shader.

Ciò è in contrasto con formati come jpg & png, in cui la quantità di spazio occupata da ciascun texel può variare attraverso l'immagine (le aree dettagliate occupano più dati, le aree prevedibili occupano meno), quindi per trovare un particolare texel devi decomprimere l'intera immagine, o almeno pezzi grandi / distribuiti di essa. Ma poiché sono in grado di comprimere selettivamente aree prevedibili di una trama, tendono a comprimere le immagini a dimensioni inferiori per l'archiviazione su disco o la trasmissione su una rete rispetto a ciò che otteniamo da formati compatibili con la GPU. Strategie diverse per usi diversi.


Generalmente, porre più domande dovrebbe essere fatto tramite più post, ma poiché questa è una risposta piuttosto breve, colpirò anche il punto 3:

" Framebuffer " è solo un particolare frammento di memoria video che abbiamo deciso di utilizzare per memorizzare l'immagine composta che vogliamo presentare allo schermo. Nota i dettagli nella risposta di JarkkoL, in cui su alcuni hardware specializzati potremmo scegliere di individuare questo buffer in una parte particolare della nostra memoria video disponibile ottimizzata per le esigenze di larghezza di banda degli obiettivi di rendering.


Tale collegamento sugli algoritmi di compressione è estremamente utile e approfondito. Bella scoperta!
Coburn,

7

Le risposte alle tue domande dipendono davvero dalla piattaforma. Generalmente i formati BC vengono mantenuti in forma compressa in memoria e la decompressione viene eseguita in volo dalle unità di trama GPU, ma ci sono eccezioni. Vale a dire che Xbox 360 è noto per decomprimere blocchi BC 4x4 pixel completi nella cache prima che TU recuperi i dati, gonfiando così l'utilizzo della cache. Tuttavia, non conosco alcuna piattaforma che decomprimesse l'intera trama in vram al caricamento, ma ne dubito fortemente a causa della memoria aggiunta e dell'utilizzo della larghezza di banda.

Lo stesso vale per i framebuffer: dipende dalla piattaforma. Su Xbox 360 avevi 10 MB di EDRAM dedicato ad alta larghezza di banda che dovevi utilizzare per gli obiettivi di rendering. Su Xbox One hai ancora 32 MB di ESRAM speciale che è preferito per i target di rendering a causa dell'elevata larghezza di banda (e può anche essere recuperato diversamente da Xbox 360), ma i target di rendering possono anche risiedere nella normale memoria DDR3.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.