# Modèle de shader unifié

En infographie tridimensionnelle, le modèle de shader unifié (connu dans Direct3D 10 sous le nom de « Shader Model 4.0 ») est une forme de shader hardware dans un processeur graphique (GPU) dont tous les étages dans le pipeline de rendu ont les mêmes capacités. Ils peuvent tous lire les textures et les tampons, et ils utilisent des jeux d'instructions presque identiques.

## Historique

Les GPU précédents comprenaient généralement deux types de shader hardware, les vertex shaders ayant considérablement plus d’instructions que les pixel shaders plus simples. Cela a permis de réduire le coût de mise en œuvre du GPU dans son ensemble et d’autoriser plus de shaders au total sur une seule unité. Cela s’est fait au prix d’une réduction de la flexibilité du système, et parfois de laisser un ensemble de shaders inactif si la charge de travail utilisait l’un plus que l’autre. Au fur et à mesure que les améliorations de la fabrication se poursuivaient, cette distinction devenait moins utile. ATI Technologies a introduit une architecture unifiée sur la puce graphique qu’il a développé pour la Xbox 360. Nvidia a rapidement suivi avec son architecture Tesla, lancée en novembre 2006. AMD a introduit un shader unifié sous forme de carte deux ans plus tard dans la gamme TeraScale. Depuis, le concept est universel.
Les premières versions de shader (telles que Shader Model 1.x) utilisaient des jeux d’instructions très différents pour les vertex et les pixel shaders, les vertex shaders ayant un jeu d’instructions beaucoup plus flexible. Les modèles de shaders ultérieurs (tels que Shader Model 2.x et 3.0) ont réduit les différences, se rapprochant du modèle de shader unifié. Même dans le modèle unifié, le jeu d’instructions peut ne pas être complètement le même entre les différents types de shaders ; les différents étages du shader peuvent avoir quelques distinctions. Les shaders de fragments/pixels peuvent calculer des gradients de coordonnées de texture implicites, tandis que les shaders de géométrie peuvent émettre des primitives de rendu.

## Architecture

L’architecture de shader unifiée (ou architecture d'ombrage unifiée) est une conception matérielle par laquelle toutes les unités de traitement de shader d’un matériel graphique sont capables de gérer tout type de tâches d’ombrage. Le plus souvent, le hardware de l’architecture d’ombrage unifiée est composé d’un ensemble d’unités de calcul et d’une forme de système d'ordonnancement/équilibrage de charge dynamique qui garantit que toutes les unités de calcul continuent de fonctionner aussi souvent que possible.
L’architecture de shader unifiée permet une utilisation plus flexible du matériel de rendu graphique. Par exemple, dans une situation où la charge de travail de géométrie est importante, le système peut allouer la plupart des unités de calcul à l’exécution des shaders de vertex et de géométrie. Dans les cas où la charge de travail des sommets est moindre et où la charge de pixels est importante, davantage d’unités de calcul peuvent être allouées pour exécuter les shaders de pixels.
Bien que le hardware équipé de l’architecture de shader unifiée et les interfaces de programmation de modèle de shader unifié ne soient pas une exigence l’un pour l’autre, une architecture unifiée est plus judicieuse lors de la conception de hardware destiné à prendre en charge une API offrant un modèle de shader unifié.
OpenGL 3.3 (qui offre un modèle de shader unifié) peut toujours être implémenté sur du matériel qui n’a pas d’architecture de shader unifié. De même, le hardware qui prend en charge les API de modèle de shader non unifié peut être basé sur une architecture de shader unifiée, comme c’est le cas avec la puce graphique Xenos dans la Xbox 360, par exemple.
L’architecture de shader unifiée a été introduite avec les GPU Nvidia GeForce 8, ATI Radeon HD 2000, S3 Chrome 400, Intel GMA X3000, Xbox 360, Qualcomm Adreno 200, Mali Midgard, PowerVR SGX et est utilisée dans toutes les séries suivantes.