Comment le GPU gère-t-il la texture et la VRAM?


18

C'est en fait un tas de questions interdépendantes:

  1. Les textures compressées (dxt5 / dxt1 etc.) sont-elles jamais complètement décompressées lors du passage du pipeline de rendu?

  2. Si la réponse à la première question est vraie, comment la mémoire est-elle gérée pour plusieurs grandes textures non compressées?

  3. Le framebuffer est-il différent de la VRAM dans le GPU moderne?

Réponses:


29

Formats de texture compressés GPU comme DXT / BC / ETC sont spécifiquement conçus pour être lus directement à partir de leur forme compressée. Ils n'ont pas besoin d'être décompressés dans un tampon RGBA brut.

La façon dont cela fonctionne est que chaque bloc de texels (souvent 4x4) occupe un certain nombre fixe de bits - nous savons donc exactement jusqu'où dans le tampon chercher un texel particulier - et ces blocs peuvent être décompressés sans lire tout ce qui l'entoure / informations de texture précédentes. Les GPU contiennent du matériel spécialisé qui décompresse uniquement les blocs de texels demandés selon les besoins pour répondre aux demandes d'échantillonnage de texture de vos shaders.

Cela contraste avec des formats tels que jpg et png, où la quantité d'espace occupée par chaque texel peut varier à travers l'image (les zones détaillées absorbant plus de données, les zones prévisibles absorbant moins), donc pour trouver un texel particulier, vous devez décompresser l'image entière, ou au moins de gros morceaux / distribués de celui-ci. Mais comme ils peuvent compresser de manière sélective des zones prévisibles d'une texture, ils ont tendance à compresser les images à des tailles plus petites pour le stockage sur disque ou la transmission sur un réseau que ce que nous obtenons des formats compatibles GPU. Différentes stratégies pour différentes utilisations.


Généralement, poser plusieurs questions doit se faire via plusieurs publications, mais comme il s'agit d'une réponse assez courte, je vais aussi toucher le point 3:

" Framebuffer " est juste un morceau particulier de mémoire vidéo que nous avons décidé d'utiliser pour stocker l'image composée que nous voulons présenter à l'écran. Notez les détails dans la réponse de JarkkoL, où sur certains matériels spécialisés, nous pourrions choisir de localiser ce tampon dans une partie particulière de notre mémoire vidéo disponible, optimisée pour les besoins en bande passante des cibles de rendu.


Ce lien sur l'algorithme de compression est extrêmement utile et détaillé. Belle trouvaille!
Coburn

7

Les réponses à vos questions dépendent vraiment de la plateforme. Généralement, les formats BC sont conservés sous forme compressée en mémoire et la décompression est effectuée en vol par les unités de texture GPU, mais il existe des exceptions. À savoir, la Xbox 360 est connue pour décompresser des blocs BC complets de 4x4 pixels dans le cache avant que TU ne récupère les données, ce qui gonfle l'utilisation du cache. Je ne connais pas de plate-forme qui décompresse toute la texture en vram lors du chargement, mais j'en doute fortement en raison de l'utilisation supplémentaire de la mémoire et de la bande passante.

La même chose vaut pour les framebuffers - cela dépend de la plate-forme. Sur Xbox 360, vous disposiez de 10 Mo d'EDRAM à large bande passante dédiée que vous deviez utiliser pour les cibles de rendu. Sur Xbox One, vous disposez toujours de 32 Mo d'ESRAM spéciale qui est préférée pour les cibles de rendu en raison de la bande passante élevée (et peut également être récupérée contrairement à la Xbox 360), mais les cibles de rendu peuvent également résider dans la mémoire DDR3 normale.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.