Jak GPU obsługuje teksturę i VRAM?


18

To właściwie kilka powiązanych ze sobą pytań:

  1. Czy skompresowane tekstury (dxt5 / dxt1 itp.) Są kiedykolwiek całkowicie dekompresowane podczas przechodzenia przez proces renderowania?

  2. Jeśli odpowiedź na pierwsze pytanie jest prawdziwa, to jak zarządza się pamięcią dla kilku dużych nieskompresowanych tekstur?

  3. Czy bufor ramki różni się od VRAM we współczesnym GPU?

Odpowiedzi:


29

Formaty tekstur skompresowane przez GPU, takie jak DXT / BC / ETC, są specjalnie zaprojektowane do odczytu bezpośrednio z ich skompresowanej postaci. Nie trzeba ich rozpakowywać do surowego bufora RGBA.

Działa to tak, że każdy blok tekstur (często 4x4) zajmuje pewną stałą liczbę bitów - dzięki czemu wiemy dokładnie, jak daleko w buforze jest szukanie konkretnego tekstu - i te bloki można zdekompresować bez odczytywania całego otoczenia / poprzednia informacja o teksturze. Procesory graficzne zawierają wyspecjalizowany sprzęt, który dekompresuje tylko żądane bloki tekstu w razie potrzeby, aby spełnić żądania próbkowania tekstur od twoich shaderów.

Jest to w przeciwieństwie do formatów takich jak jpg i png, w których ilość miejsca zajmowanego przez każdy texel może się różnić na obrazie (szczegółowe obszary zajmują więcej danych, przewidywalne obszary zajmują mniej), więc aby znaleźć konkretny tekstel, należy go rozpakować cały obraz lub przynajmniej jego duże / rozproszone fragmenty. Ponieważ jednak mogą selektywnie kompresować przewidywalne obszary tekstury, mają tendencję do kompresji obrazów do mniejszych rozmiarów w celu przechowywania ich na dysku lub transmisji w sieci niż w przypadku formatów przyjaznych GPU. Różne strategie dla różnych zastosowań.


Zasadniczo zadawanie wielu pytań powinno odbywać się za pośrednictwem wielu postów, ale ponieważ jest to dość krótka odpowiedź, również trafię w punkt 3:

Framebuffer ” to tylko szczególna pamięć wideo, którą postanowiliśmy wykorzystać do przechowywania skomponowanego obrazu, który chcemy zaprezentować na ekranie. Zwróć uwagę na szczegóły w odpowiedzi JarkkoL, gdzie na niektórych specjalistycznych urządzeniach możemy zlokalizować ten bufor w określonej części naszej dostępnej pamięci wideo, która jest zoptymalizowana pod kątem przepustowości celów renderowania.


Ten link w algorytmie kompresji jest niezwykle pomocny i dogłębny. Niezłe znalezisko!
Coburn,

7

Odpowiedzi na pytania naprawdę zależą od platformy. Ogólnie formaty BC są przechowywane w formie skompresowanej w pamięci, a dekompresja odbywa się w locie przez jednostki tekstur GPU, ale są wyjątki. Mianowicie Xbox 360 jest znany z dekompresji kompletnych bloków BC 4x4 pikseli do pamięci podręcznej, zanim TU pobierze dane, zwiększając w ten sposób zużycie pamięci podręcznej. Nie znam żadnej platformy, która dekompresowałaby całą teksturę do vramu po załadowaniu, ale bardzo w to wątpię ze względu na dodatkowe użycie pamięci i przepustowości.

To samo dotyczy buforów ramki - zależy to od platformy. Na Xbox 360 miałeś 10 MB dedykowanej, wysokiej przepustowości EDRAM, której musiałeś użyć do renderowania celów. Na Xbox One nadal masz 32 MB specjalnej pamięci ESRAM, która jest preferowana dla celów renderowania ze względu na wysoką przepustowość (i może być również pobrana z przeciwieństwie do Xbox 360), ale cele renderowania mogą również znajdować się w zwykłej pamięci DDR3.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.