Comme nous l'avons vu précédemment, le processeur graphique réside dans la puce NV2A et, tout comme le MCPX, il est fabriqué par Nvidia.

Le package Nvidia NV2A sur la carte mère de la Xbox.
Cette entreprise est dans le domaine des graphiques depuis longtemps, leur série GeForce est l'une des marques de GPU les plus populaires sur le marché informatique, en concurrence directe avec la série Radeon de ArtX/ATI. Dans l'ensemble, cela offre un bon levier sur la qualité des graphiques trouvés dans la Xbox, compte tenu du fait que c'est la première tentative de Microsoft sur le marché des consoles.
Tout cela semble raisonnable, mais était-ce vraiment une décision certaine à prendre à l'époque ? Il est facile de se baser sur l'histoire actuelle pour comprendre pourquoi Microsoft a choisi Nvidia plutôt que d'autres marques populaires de l'époque (3dfx, PowerVR, S3, etc), mais si nous en apprenons davantage sur la compétition de l'époque, le panorama des options le rendait beaucoup plus complexe.

Halo (2001) fonctionnant sur la Xbox en mode 720p.
Par exemple, la populaire série 'Voodoo 2' de 3dfx détenait environ 70% des parts de marché sur le marché des PC à la fin des années 90 , tandis que Nvidia avait du mal à promouvoir l'adoption de la nouvelle 'GeForce 256' (la première de la série GeForce). Après cela, le choix de Microsoft ressemble maintenant plus à un risque qu'à un pari sûr, mais comme nous le savons maintenant, ce risque a fini par payer.
Nvidia n'était PAS le joueur numéro 1 qu'ils sont maintenant, en 1999. Ils étaient en difficulté. La nouvelle architecture GeForce était encore jeune et beaucoup de gens ne l'aimaient pas. Maintenant, cela semble acquis. Mais il faudrait rechercher cette histoire pour savoir cela, et pourquoi j'ai dû me battre pour l'utiliser. J'avais raison mais je ne savais pas que j'avais raison; j'étais très inquiet.
- Seamus Blackley (Co-auteur de la Xbox originale)
Dans la section suivante, nous examinerons le fonctionnement interne de cette puce. Maintenant, je crains que nous nous retrouvions mêlés à beaucoup de terminologie et de termes marketing tout comme la section CPU, mais n'ayez pas peur ! Je vais commencer par les bases.
Architecture et design
Le cœur du GPU trouvé sur le NV2A est basé sur la populaire série de GPUs 'GeForce3' , il est également appelé NV20 dans les documents techniques de Nvidia.

Conception du pipeline du NV2A.
Veuillez noter que, bien que le pipeline du GPU de la Xbox soit basé sur l'architecture NV20, le NV2A a quelques modifications qui ne sont pas compatibles avec le reste de la série NV20 (plus important encore, il a été adapté pour fonctionner dans un environnement UMA).
Les unités analysées contiennent beaucoup plus de caractéristiques qui vont au-delà du cadre de cet article, donc je recommande de consulter les sources/références si cette section retient votre attention. De plus, puisque la terminologie liée aux graphiques évolue constamment (ce qui peut conduire à une certaine confusion), j'ai décidé de me baser sur les termes utilisés par Microsoft/Nvidia pendant les années de la Xbox, alors souvenez-vous de cela si vous prévoyez de lire d'autres articles liés aux graphiques provenant d'autres sources.
Cela étant dit, jetons un coup d'oeil à comment les images sont dessinées sur la Xbox. Certaines explications sont très similaires à celles du Flipper de la GameCube, donc vous pouvez également bénéficier de la lecture de cet article si vous avez du mal à suivre celui-ci.
Commandes
Premièrement et avant tout, il faut expliquer comment le GPU peut recevoir des commandes du CPU. Pour cela, le GPU contient un processeur de commandes appelé PFIFO qui récupère et traite efficacement les commandes graphiques (appelées Pushbuffer) de manière FIFO, les commandes déballées sont ensuite livrées au PGRAPH (le bloc en charge du traitement graphique) et à d'autres moteurs.
Comme Flipper, la géométrie n'a pas à être intégrée dans la commande. PGRAPH propose de nombreuses façons de soumettre des données graphiques. Par exemple, le CPU peut allouer un tampon en RAM contenant des données de sommet et ensuite instruire le GPU pour qu'il les récupère à partir de cet emplacement. Cette approche peut être efficace, car elle évite d'envoyer de la géométrie dupliquée.
Les explications suivantes se produisent dans PGRAPH.
Sommet
C'est une section intéressante pour ce GPU en particulier. À ce stade, le GPU offre la possibilité d'appliquer des transformations de sommets à notre géométrie. Nous avons déjà vu cette fonctionnalité avec Flipper, mais contrairement à ce GPU, celui-ci utilise un moteur programmable. Cela signifie que les développeurs peuvent spécifier quelles opérations de sommet sont effectuées et comment, au lieu de compter sur un programme pré-défini. Bien que, le NV2A peut également fonctionner en mode 'fixe', si nécessaire.
Cette étape est gérée par une Unité Vertex et le NV2A dispose de deux d'entre elles. Chacun peut charger un programme contenant jusqu'à 136 instructions (aussi appelé microcode). Ce programme est appelé programme de sommet et il est chargé à l'exécution. Un programme de sommet peut effectuer les opérations suivantes :
- Opérations arithmétiques (c'est-à-dire addition, multiplication, minimum, etc).
- Cela comprend des 'fonctions d'aide' pour aider les tâches liées aux graphiques, comme le produit scalaire.
- Vertex Swizzling (Réarrangement et/ou duplication).
En un mot, l'unité de sommet traite les sommets en les manipulant dans ses registres. En d'autres termes, une fois le programme chargé, 16 registres en lecture seule (appelés 'registres d'entrée') sont initialisés avec les attributs d'un sommet (chaque vecteur contient quatre composants). Ensuite, l'unité effectue l'ensemble des opérations (instructées par le programme) en utilisant les registres d'entrée. De plus, 12 registres inscriptibles et jusqu'à 196 constantes sont fournis pour aider le calcul. Enfin, le sommet résultant est stocké dans un autre bloc de 11 registres inscriptibles (chacun limité à un objectif spécifique), qui sont transmis à l'étape suivante. Ce processus est répété pour chaque sommet reçu.
Pixel
À cette étape, les sommets sont transformés en pixels. Le processus commence avec un rasteriseur qui génère des pixels pour dessiner chaque triangle. Le rasteriseur de la NV2A peut générer quatre pixels par cycle.Ensuite, 4 shaders de texture sont utilisés pour récupérer les textures de la mémoire , ceux-ci offrent également d'appliquer automatiquement un filtrage anisotrope, mipmapping et tampon d'ombre. Ce dernier est utilisé pour tester si un pixel est visible ou éclipsé par la source d'éclairage, afin que la bonne couleur puisse être appliquée. À ce stade, le GPU offre également de réaliser un découpage et un Z-test précoce (le NV2A compresse le Z-buffer quatre fois sa taille originale pour économiser de la bande passante, contribuant à de nombreuses améliorations de performance).
Les pixels résultants sont stockés dans un ensemble de registres partagés puis cyclés à travers 8 combinateurs de registres, où chacun applique des opérations arithmétiques sur eux. Ce processus est programmable à l'aide de shaders de pixels (un autre type de programme exécuté par le GPU) . À chaque cycle, chaque combinateur reçoit des valeurs RGBA (RGB + Alpha) de l'ensemble de registres . Ensuite, en fonction de l'opération définie par le shader, il va opérer les valeurs et écrire le résultat. Enfin, un plus grand nombre de valeurs sont envoyées au combinateur final qui peut exclusivement mélanger des couleurs spéculaires et/ou du brouillard.
Les combinateurs de registres sont programmables de manière similaire à l'Unité d'Environnement de Texture. C'est-à-dire, en modifiant ses registres avec une combinaison spécifique de paramètres. Dans le cas de la Xbox, le PFIFO lit les pushbuffers pour configurer le PGRAPH, qui comprend les combinateurs de registres et les shaders de texture.
Post-traitement
Avant que les pixels ne soient écrits dans le tampon d'image, le NV2A contient quatre moteurs dédiés appelés Unité de Sortie Raster ou 'ROP' qui effectuent les tests nécessaires (alpha, profondeur et stencil) en utilisant des blocs alloués dans la mémoire principale. Enfin, des lots de pixels (quatre par cycle) ne sont réécrits que s'ils passent ces tests.
De plus, le tampon de trame peut être anti-crénelé en utilisant une technique appelée échantillonnage multiple . Essentiellement, cette technique échantillonne les bords des polygones plusieurs fois avec différents décalages ajoutés dans le processus. Ensuite, tous les échantillons sont moyennés pour former l'image anti-aliasée. Cette approche a remplacé la fonction d'anti-aliasing précédente (et plus gourmande en ressources) appelée 'supersampling', utilisée par les précédents GPU Nvidia.
L'importance de la programmabilité
Je trouve essentiel de souligner l'importance du nouveau modèle de programmabilité que Nvidia a fourni aux développeurs. Il y a des années, la plupart du pipeline graphique était calculée par le CPU, laissant le GPU accélérer les opérations de rasterisation. Avec l'introduction des 'shaders' (se référant à la fois aux shaders de pixels et aux programmes de sommets), les programmeurs peuvent tirer parti des ressources du GPU pour accélérer de nombreux calculs dans le pipeline, déchargeant une grande quantité de travail du CPU.
Le concept de 'shaders' a été introduit par Pixar en 1989 comme une méthode pour étendre Renderman , leur logiciel pionnier utilisé pour le rendu 3D. C'était à l'époque où les graphiques 3D étaient principalement gérés par du matériel industriel. Plus tard, nous avons vu comment certaines consoles ont incorporé des principes similaires, mais ce n'est que lorsque Nvidia a lancé sa ligne GeForce3 que les shaders sont devenus une norme sur le marché grand public.

(Video) Animation complexe réalisée par programme de sommet.

(Video) Différents effets de texture réalisés par des shaders de pixels.
Grâce aux programmes de sommets, le GPU peut maintenant accélérer les transformations de modèles, les calculs d'éclairage et la génération de coordonnées de texture. Ce dernier est essentiel pour composer des surfaces d'ordre supérieur. Avec cela, le CPU peut se concentrer sur l'amélioration de la physique, de l'IA et de la gestion de scène.
Dans le cas des pixel shaders, les programmeurs peuvent manipuler et mélanger les textures de plusieurs façons pour obtenir différents effets tels que le multi-texturing, le mappage spéculaire, le mappage des bosses, le mappage de l'environnement, etc.
Un nouveau concept de programmation qui émerge grâce à cette approche est le GPU à usage général ou 'GPGPU', qui consiste à assigner des tâches au GPU qui auraient été exclusivement réalisées par le CPU. Ainsi, le GPU a non seulement pris en charge la majeure partie du pipeline graphique, mais peut maintenant agir comme un coprocesseur efficace pour des calculs spécialisés (c'est-à-dire des calculs physiques). C'est un nouveau domaine qui évoluera à mesure que les GPU deviendront plus puissants et flexibles. Cependant, le NV2A était déjà capable d'obtenir cela grâce à une combinaison de capacités matérielles (vertex & pixel shaders) et d'API spécialisées développées (programmes d'état d'OpenGL).
J'ai le sentiment que les shaders seront régulièrement revisités dans les futurs articles. Veuillez vous rappeler que dans cet article, cependant, ils peuvent être considérés comme un peu 'primitifs' et certaines personnes peuvent soutenir que les shaders de pixels ne sont même pas des 'shaders' (comparés à ce que les GPU offrent de nos jours).
Le cadre de la Xbox
La résolution standard des jeux est de 640x480, c'est à peu près la norme dans la sixième génération. Cependant, cette contrainte n'est qu'un nombre : Le GPU peut dessiner des tampons de trame allant jusqu'à 4096x4096, mais cela ne signifie pas que le matériel fournirait des performances acceptables. D'un autre côté, la console permet de configurer ses réglages d'écran globalement, ce qui peut aider à promouvoir des fonctionnalités pionnières (c'est-à-dire l'écran large et la 'haute résolution') au lieu d'attendre que les développeurs les découvrent (comme cela s'est passé avec le Gamecube/Wii).
L'encodeur vidéo, quant à lui, essaiera de diffuser tout ce qui se trouve sur le tampon de trame dans un format que votre téléviseur comprendra. Cela signifie que les images en format large deviendront anamorphiques à moins que le jeu ne soit diffusé en HD (c'est-à-dire en 720p ou 1080i, ce que seuls quelques jeux font).
Cela étant dit, quel genre de signaux cette console diffuse-t-elle ? Assez beaucoup. Outre le composite PAL/NTSC typique, la Xbox propose YPbPr (nécessitant un accessoire supplémentaire pour obtenir les connecteurs 'composants') et RGB (compatible SCART et VGA). En somme, très pratique sans nécessiter d'adaptateurs coûteux et autres.


