# Texture mapping unit

En infographie, une texture mapping unit (TMU) est une unité des processeurs graphiques modernes (GPU). Elles sont capables de faire tourner, redimensionner et distordre (en) une image bitmap pour la placer sur un plan arbitraire d'un modèle 3D donné comme texture, dans un processus appelé texture mapping. Dans les cartes graphiques modernes, elle est implémentée comme un étage particulier d'un pipeline graphique, tandis que lors de sa première introduction, elle était implémentée sous forme d'un processeur séparé, comme par exemple dans la carte graphique Voodoo2.

## Contexte et historique

La TMU a été créée pour répondre au besoin de calcul nécessaire pour échantillonner et transformer une image plane (comme une carte de texture) en une image vue sous l'angle et la perspective corrects, telle qu'elle serait dans l'espace 3D. L'opération de calcul est un grand produit matriciel, que les CPU de l'époque (les premiers Pentium) ne pouvaient réaliser avec une performance acceptable.
En 2013, les TMU font partie du pipeline de shader et sont découplés des Render Output Pipelines (ROP). Par exemple, dans le GPU Cypress d'AMD, chaque pipeline de shader (au nombre de 20) possède quatre TMU, le GPU ayant au total 80 TMU. Ceci est réalisé par les concepteurs de puce pour coupler étroitement les shaders et les unités de texture qui travaillent de concert.

## Géométrie

Les scènes 3D sont généralement composées de deux choses : une géométrie 3D et les textures qui recouvrent cette géométrie. Les unités de texture dans une carte graphique prennent une texture et la "plaquent" ('map') sur un morceau de géométrie. C'est-à-dire qu'elles "enveloppent" la texture sur la géométrie et produisent des pixels texturés qui peuvent alors être envoyés vers la sortie écran. Les textures peuvent être une image réelle, un lightmap, ou même des cartes de normales pour réaliser des effets d'éclairage de surface particuliers.

## Taux de remplissage des textures

Pour rendre une scène 3D, les textures sont plaquées sur la surface des maillages polygonaux. Cette opération est appelée texture mapping et est réalisée par les texture mapping units (TMU) de la carte graphique. Le taux de remplissage des textures est une mesure de la vitesse à laquelle une carte particulière peut effectuer le texture mapping.
Bien que le traitement des pixel shader devienne de plus en plus important, ce taux a encore un certain intérêt. Le meilleur exemple de cela est la carte Radeon X1600 XT. Cette carte a trois fois plus de shader processors que de texture mapping units. En conséquence, la X1600 XT a des performances plus faibles que d'autres GPU de la même époque (2006) et de la même gamme (tel que celui de la carte 7600GT de Nvidia). Dans la gamme moyenne, le texture mapping peut encore être un goulet d'étranglement. Cependant, dans la gamme supérieure, la carte X1900 XTX possède le même rapport 3 à 1, mais se comporte correctement car les définitions d'écran plafonnent et elle a plus qu'assez de puissance de texture mapping pour garantir l'affichage.

## Détails
### Texture mapping units (TMU)

Les textures doivent être addressées et lissées. Ce travail est effectué par les TMU qui travaillent en conjonction avec les unités de pixel shader et de vertex shader. C'est le rôle du TMU d'appliquer des opérations de texture aux pixels. Le nombre d'unités de texture dans un processeur graphique est utilisé lors de la comparaison de deux cartes pour les performances de texture. Il est raisonnable de supposer qu'une carte ayant plus de TMU sera plus rapide pour traiter des données de texture. Dans les GPU modernes, les TMU contiennent des Texture Address Units (TA) et des Texture Filtering Units (TF). Les Texture Address Units plaquent les texels sur les pixels. Les Texture Filtering Units effectuent éventuellement un lissage de texture (en) de façon hardware.

### Pipelines

Un pipeline est la base de l'architecture de la carte graphique, et donne une idée généralement assez précise de la puissance de calcul d'un processeur graphique.
Un pipeline ne correspond pas à un terme technique bien défini. Il y a plusieurs pipelines au sein d'un processeur graphique car des fonctions distinctes sont effectuées simultanément. Historiquement, il s'agit d'un processeur de pixels rattaché à un TMU dédié. Une carte GeForce 3 avait quatre pipelines de pixels, et chacun d'entre eux avait deux TMU. Le reste du pipeline s'occupait de choses telles que des opérations de profondeur et de mélange.
La carte ATI Radeon 9700 fut la première à quitter cette architecture, en plaçant un certain nombre de moteurs de vertex shader indépendants des pixel shaders. Le GPU R300 utilisé dans la carte Radeon 9700 avait quatre vertex shaders globaux, mais le reste du pipeline de rendu était découpé en deux (il s'agissait, pour ainsi dire, d'un double coeur) chaque moitié, appelée un "quad", avait quatre pixel shaders, quatre TMU et quatre ROP.
Certaines unités sont utilisées plus que d'autres, et dans le but d'améliorer la performance globale du processeur, les concepteurs ont tenté de trouver un "juste équilibre" dans le nombre d'unités nécessaires pour une efficacité optimale sans utiliser trop de silicium. Dans cette architecture, le nom de pipeline de pixels a perdu sa signification car les processeurs de pixels ne sont plus rattachés à un seul TMU.
Le vertex shader avait été découplé depuis longtemps, à partir du R300, mais le découplage du pixel shader n'était pas si facile à réaliser, car il avait besoin de données de couleur (par exemple des échantillons de texture) pour fonctionner, et devait donc rester étroitement couplé à un TMU.
Ce couplage subsiste à ce jour, où le moteur de shader, composé d'unités capables de traiter des données de vertex ou de pixels, est étroitement couplé à un TMU mais possède un rail répartiteur entre sa sortie et la banque de ROP.

### Render output pipelines (ROPs)

Le render output unit était auparavant appelé Render Output Pipeline. Le rôle de cette unité est de contrôler l'échantillonnage des pixels (chaque pixel est un point sans dimension), elle gère donc l'anticrénelage, lorsque plus d'un élément de texture est fusionné dans un seul pixel. Toutes les données rendues doivent passer à travers le ROP de façon à être écrites dans le framebuffer, et de là être transmises à l'affichage.
En résumé, le ROP est l'endroit où la sortie du GPU est assemblée dans une image bitmap prête pour l'affichage.

### Utilisation dans les GPGPU

Dans les GPGPU, des cartes de texture en 1,2 ou 3 dimensions peuvent être utilisées pour stocker des données quelconques. En fournissant l'interpolation, la texture mapping unit fournit un moyen approprié d'approximer des fonctions quelconques avec des tables de données.