![M. Vert :mrgreen:](./images/smilies/icon_mrgreen.gif)
Petit rappel, la Xbox One est une console de huitième génération construite par Microsoft et utilisant des composants proches de ceux des PC dont un SoC AMD.
La Xbox One possède les spécifications suivantes :
- un CPU AMD Jaguar, 8 core cadencés à 1.75 Ghz
- un GPU AMD Radeon GCN cadencé à 853 Mhz (914 sur Xbox One S)
- 8 Go de mémoire vive de type DDR3 à 2133 Mhz
- 32 Mo de mémoire ESRAM
- un disque dur de 500 Go (1 To sur certains modèles, 2 To sur Xbox One S en édition limitée)
- 8 Go de mémoire flash
- un lecteur Blu-ray
- une puce Wifi b/g/n, 3 USB 3.0, 1 sortie et 1 entrée HDMI etc...
Bien évidemment la fonction principale de la console est de lancer des jeux, mais elle peut également servir de box TV et de lecteur multimédia.
Elle peut lire les Blu-ray, Blu-ray 3D et DVD.
La Xbox One est également compatible avec certains jeux xbox 360. Elle utilise les DVD de jeu xbox 360 comme d'une sécurité et télécharge ensuite une version patché pouvant être lancé par la Xbox One. On peut également directement télécharger les jeux 360 compatible via le store. La Xbox One S quant à elle apporte le support des Blu-ray UHD et des TV 4K/HDR.
Le CPU de la Xbox One est un CPU AMD de type Jaguar. Il possède 8 core à 1.75 Ghz, 4 Mo de cache L2 (2 Mo par groupe de 4 core) et 64 Ko de cache L1 par core. Ce CPU Jaguar à été modifié par Microsoft et porte le nom de Durango. Le CPU possède une architecture "Out-of-Order" c'est à dire qu'il exécute les instructions dans le désordre contrairement à la Xbox 360 ou son CPU était "In-Order" (donc exécutant les instructions dans l'ordre d'arrivé). Le type Out-of-Order permet de faciliter le développement mais augmente la difficulté d'optimisation. C'est le contraire avec les CPU In-Order.
Le CPU Durango (nommé seulement Durango dans la suite de ce dossier) est compatible avec les jeux d'instructions : SSE4.2 et AVX (surement d'autres mais non nécessaire pour la console). Ces jeux d'instructions permettent au CPU de venir en aide au GPU pour certaines tâches. La principal modification apporté par Microsoft à Durango est l'optimisation de l'unité de prédiction de branchement. Pour simplier, lorsque le processeur est en face d'un choix (condition IF ELSE par exemple) il choisit automatiquement la bonne réponse avant même d'avoir effectué le moindre calcul. Cela permet d'accélrer le traitement des instructions. En moyenne les processeurs ont un taux de réussite entre 95 et 98 %.
Durango possède 8 core, mais seulement 6 sont disponible pour les jeux. 2 sont réservé à l'OS "Windows" (pour les applications et les commandes vocales) Dans les fait, l'un des deux core reservé aux applications peut également être utilisé par les jeux à hauteur de 80 % maximum. Le processeur à une puissance totale de 112 Gflops (sur les 8 core) mais les développeurs non accès qu'à environ 95 Gflops.
Le GPU de la Xbox One est un GPU AMD Radeon GCN. Il utilise la révision 1.1 de l'architecture GCN (qu'on trouve notamment dans la Radeon HD7790). Cette puce contient 12 Compute Units avec chacun 64 unités de calculs pour un total de 768 unités cadencé à 853 Mhz (914 Mhz sur Xbox One S).En réalité, il y a 14 Compute Units présent physiquement sur la puce, mais deux sont désactivées afin de maximiser le rendement lors de la fabrication. En plus des unités de calculs, il y a 48 unités de texturing et 16 ROPs (Raster Operator, ou plus simplement unité de rendu). La puissance totale de la puce est de 1.310 Tflops (1.403 Tflops sur One S) . En plus des 12 CU, le GPU possède également 4 Move Engine et 32 Mo de ESRAM. Le GPU est capable de gérer trois "plan d'affichage" avec chacun leur resolution et framerate. (C'est ce qui rend possible l'interface de la Xbox avec par exemple un jeu et une application cote-à-cote).
Les particularités de ce GPU sont multiples. En premier lieu, Microsoft à mis en place deux GCP (Graphics Command Processor). Le but d'un GCP est de communiquer avec le CPU et de "lire" les commandes depuis le "command buffer". Ou plus simplement, dire au GPU ce qu'il doit faire. Le fait qu'il y ait deux GCP est un point important (par exemple dans les cartes graphique de PC il n'y en a qu'un seul) L'un est dédié au applications (donc à Windows) l'autre est dédié pour les jeux. Outre le fait qu'il y en ai deux, Microsoft les a customisé en leur rajoutant des fonctions et surtout en leur permettant d'exécuter du code pré-compilé. Ce qui permet un gain de temps et de performance. Le GPU possède également deux ACEs leur but est de calculer des tâches non graphique (par exemple pour calculer la physique dans les jeux).
La partie logiciel est très importante ici. le système de la Xbox implémente deux drivers graphique. L'un standard dédié à Windows, l'autre développé par Microsoft et dédié aux jeux. C'est ce dernier qui est intéressant. Originellement, le GPU est compatible avec la version complète de DirectX 11.1. Microsoft avait seulement rajouté des extensions permettant un accès de bas niveau à la console. Depuis les dernières mises à jour, le drivers n'est plus compatible nativement avec DirectX 11.1. Il utilise un dérivé, la plupart des fonctions concernant l'audio, les entrées / sorties etc... restent identique par contre la partie Direct3D a été complètement revu. Désormais le driver utilise une nouvelle API nommé Monolithic Direct3D Runtime. Cette API a été allégé de toutes les fonctions inutiles à la Xbox, des améliorations ont été faites (par exemple avec la Tesselation) et surtout ce driver permettra l'execution de fonction DirectX 12 (prochainement). Pour le moment, c'est le niveau 11.2 (ou feature 11_2) qui est compatible avec la Xbox.
A cause de la dualité du système de la Xbox, les développeurs n'ont pas toujours accès à la pleine puissance du GPU. Lorsque Kinect est activé et utilisé les développeurs ne peuvent bénéficier que de 91.5 % de la puissance du GPU. Lorsque le Kinect n'est pas utilisé, 100 % du GPU est disponible avec toutefois quelque chute à 96 % lorsqu'il y a une intéraction avec une application. Exemple lors de l'affichage d'un Achievements la puissance baisse à 96 % et repasse à 100 % ensuite. C'est ce qui explique qu'il peut y avoir certains lag dans les jeux du à l'affichage d'un popup.
Au sein de la puce de la Xbox One (pour rappel il s'agit d'un SoC donc regroupant, CPU, GPU et ESRAM) se trouve 32 Mo de ESRAM. Cette mémoire est exclusivement dédié au GPU. L'avantage de l'ESRAM est sa bande passante plus élevée que la mémoire principale. La bande passante est de 102 Go/s en lecture / écriture simultané. Techniquement l'ESRAM peut atteindre 204 Go/s en lecture ou écriture seule mais ce cas de figure est très rare voir improbable. Microsoft garantit une bande passante de 102 Go/s mais dans les faits les développeurs en ont un peu plus. Entre 120 et 130 Go/s.
L'ESRAM à quatre utilisation possbile. En premier, elle peut servir à stocker certains rendus d'une scène (par exemple la profondeur). En deuxième l'ESRAM peut servir "d'alias", c'est à dire stocker certaines ressources qui peuvent être réutilisées encore et encore. En troisième possibilité, elle peut stocker qu'une partie d'un rendu. Les donnés de premier plan vont dans l'ESRAM quand celle de seconds plan sont confié à la RAM principale (les 8 Go de DDR3).
Et enfin, la quatrième utilisation de l'ESRAM est une sorte de super cache, utilisé conjointement avec les Move Engine afin que l'ESRAM contiennent toujours les données les plus importante lors d'un calcul. Pour le moment, aucun jeu ne tire parti des "modes" trois et quatre. Mais selon Microsoft les prochains jeux pourront les utiliser. Le temps que les développeurs apprennent à se servir pleinement de l'ESRAM.
Mise à jour Septembre 2016 : après trois ans de mise sur le marché, l'ESRAM est un échec, très peu de jeux l'utilisent, et pour les rares qui s'en servent, l'ESRAM n'est pas utilisé à son plein potentiel. De plus Microsoft ne communique plus sur l' ESRAM et elle n'a plus eu d'optimisation depuis la mise en place de OneCore (l'OS basé sur Windows 10). Dernièrement Microsoft a plus ou moins avoué l'échec de l'ESRAM en précisant que ce type de fonctionnement serait retiré de la prochaine Xbox Scorpio. L'ESRAM demande apparemment trop de temps de développement et le développeurs préfèrent s'en passer.
Au sein de la carte mère de la Xbox One, se trouve une puce de mémoire flash de 8 Go. Elle sert principalement pour les fonctions d'enregistrement (GameDVR) mais une rumeur circule comme quoi les développeurs pourrait avoir accès à cette puce afin d'y stocker certaines ressources statique. La mémoire flash étant plus rapide que le disque dur interne cela pourrait permettre quelques optimisations au niveau des jeux.
Le système d'exploitation de la Xbox One est assez complèxe. Il s'agit d'un système 3-en-1 que je vais détailler ci-dessous :
Le premier composant de ce super système est l'Host OS. Il s'agit d'un hyperviseur sans doute conçu à partir d'Hyper-V (l'hyerviseur de Microsoft). Celui ci est allégé par rapport à un hyperviseur classique et bien évidemment optimiser pour le hardware de la Xbox One. Son rôle est de faire fonctionner le système pour les applications (Windows) et celui pour les jeux (Xbox OS). Ces deux système sont lancé au sein de deux partition nommé "Shared Partition" et "Exclusive Partition".
Une fois le Host OS chargé, deux système sont lancé (attention ce sont deux composant de l'hyperviseur il ne s'agit pas encore des systèmes d'exploitations conventionnel). ERA et SRA. Respectivement "Exclusive Resource Allocation" et "Shared Resource Allocation". C'est à ce moment qu'est décidé de la quantité de mémoire allouer à chaque système ainsi que les ressources processeur.
3 Go est alloué pour SRA (qui contient Windows) et 5 Go de RAM pour ERA (qui contient les jeux). Ensuite les systèmes d'exploitations sont lancé Windows pour SRA et Xbox OS pour ERA.
Chaque système d'allocation de ressource (SRA et ERA) gère eux même l'OS et les applications associés.
La Xbox One possède une version modifié de Windows 8. Et c'est à peu près tout ce que l'on sait. Il utilise le runtime WinRT pour les applications mais n'est pas compatible avec le store de Windows 8. Les applications sont développé spécifiquement pour ce Windows.
Depuis Décembre 2015, le système est basé sur Windows 10 et s'intitule OneCore. Il est compatible avec les apps universel (le successeur de WinRT).
Le Xbox OS (le nom n'est pas officiel) ce charge d'exécuter les jeux. Encore une fois, presque aucune information n'est disponible quant au fonctionnement de ce système. On sait seulement qu'il peut communiquer avec le Windows grace un mécanisme mis en place entre ERA et SRA. Ce système est redémarré à chaque fois qu'un jeu est lancé.
Natural UI est le nom donné pour les intéractions avec le Kinect. Très peu d'info la dessus également. Les développeurs peuvent faire appels à Natural UI dans leur jeux pour bénéficier des fonctions de Kinect. (commande vocale, geste, detection via les caméras etc...)
Le PIX (Performance Investigator for Xbox) est un outil de monitoring et d'analyse de performance pour la Xbox One. Il est intégré au XDK (kit de développement). Cet outil est extrêmement important, il permet aux développeurs d'optimiser leurs jeux, et à Microsoft de collecter des statistiques sur l'utilisation hardware de la Xbox.
C'est grâce à cet outil que les développeurs ont pu bénéficier d'un surplus de puissance via la desactivation de Kinect. De même, la mise à disposition du cœur numéro 7 du CPU pour les jeux à aussi été rendu possible grâce à PIX. Cet outil était déjà disponible pour la Xbox 360 et nul doute qu'il sera toujours aussi important pour les prochaines Xbox.