Preview : NVIDIA GeForce 6800 Ultra
Publié le 14/04/2004 par Damien Triolet et Marc Prieur

Pixel Shader 3.0


La grosse nouveauté introduite par les Pixel Shader 3.0 sont les branchements dynamiques. Ils permettent de réaliser facilement des effets complexes et de n´utiliser qu´un seul et même shader pour des effets différents.
Par exemple un pixel shader 3.0 pourrait intégrer différentes versions d´un algorithme gérant les effets de lumière. Suivant le pixel il déciderait via un branchement dynamique quel effet de lumière appliquer. Cela pourrait permettre d´éviter les changements de shader qui sont coûteux mais aussi de pouvoir éviter certains calculs. Par exemple dans le calcul de plusieurs sources lumineuses qui s´additionnent, le shader pour tester le pixel et arrêter d´additionner de la lumière si le pixel est déjà blanc. Les utilisations possibles sont nombreuses et comme à chaque fois attendent les idées des développeurs.
Cependant, tout n´est pas rose. La chose la plus facile à faire avec les branchements dynamiques c´est de saccager les performances ! Les branchements dans un GPU sont très coûteux. Outre le coût normal du branchement, étant donné le fonctionnent en SIMD des quad engine (4 pixel pipelines), ils ne peuvent pas traiter 2 opérations différentes pour 2 pixels différents.
Ceci signifie que si les branchements donnent des résultats différents pour les 4 pixels adjacents, le quad engine ne pourra plus traiter qu´un pixel à la fois au lieu de 4 ! ¾ des pixels pipelines se tourneront donc les pouces. Ceci aurait pour effet immédiat de diviser les performances en 4.
Ensuite, sans branchement dynamique, le driver et/ou le GPU savent à l´avance ce qu´ils vont devoir faire. Ils peuvent donc optimiser certaines choses comme masquer la latence énorme requise par le texturing. Avec les branchements dynamiques, ils peuvent devenir incapables de le faire ce qui transformerait le GeForce 6800 Ultra en escargot. Bref, les développeurs devront être prudents avec les branchements.
Les PS 3.0 à l´heure du test ?


Ces drivers les supportent malgré tout, une fois DirectX 9.0c installé. Ce support est cependant très loin de coller aux documents fournis par NVIDIA. Alors que NVIDIA annonce pouvoir exécuter 65536 instructions (bien que la limite fixée par DirectX soit de 32168), les drivers la fixent à 1024.
Nous avons voulu en savoir plus sur les performances et possibilités des Pixel Shader 3.0. Le dernier patch de Far Cry les supportant, nous avions sous la main un outil idéal. Enfin, nous le pensions. Far Cry détecte bien DirectX 9.0c, tout comme le support des Pixel et Vertex Shader 3.0 de la GeForce 6800 Ultra mais ne les utilise pas ! Bug du jeu ? Support anecdotique ? Bug des drivers ?
L´équipe de développement de PowerVR qui a pas mal travaillé sur les Pixel et Vertex Shader 3.0 (tant au niveau software que hardware) a publié il y a quelques mois plusieurs démos faisant appel aux Pixel Shader 3.0. Ces démos ne pouvaient tourner qu´en mode software auparavant. Tournent-elles correctement sur le GeForce 6800 ? Non.
Elles ne se lancent d´ailleurs même pas. Elles sont en fait tout simplement incompatibles avec DirectX 9.0c qui a introduit quelques limitations dans les Pixel Shader 3.0. Il est ainsi interdit d´utiliser des textures dépendantes et quelques autres instructions à l´intérieur d´une branche. Cette nouvelle limitation n’avait pas pu être prise en compte au moment de la réalisation des démos vu qu´elle n´existait pas. Cette limitation a-t-elle été introduite par Microsoft pour coller à celles du hardware ?
Nous avons donc dû nous résoudre à tester les Pixel Shader 3.0 via quelques petits shaders écrits en assembleur par nos soins (étant donné que le compilateur HLSL ne gère pas encore les Pixel Shader 3.0). Nous n´avons cependant pas eu le temps de tester ce point en profondeur. Nous nous sommes concentré sur le coût des branchements en évitant de saccager les performances d´avance. Par exemple nous avons effectué un branchement réalisé sur une valeur qui dépend du triangle. Les 4 pipelines de chaque quad engine peuvent ainsi fonctionner en même temps. Nous avons bien entendu éviter toute utilisation de texture. Ce test ressemblait à ceci :
If xxxxC´est le branchement le plus simple que nous pouvions réaliser. Il a nécessité pas moins de 9 passages dans le pipelines ce qui est énorme. Nous nous attendions à 2 passages en espérant que NVIDIA ait prévu son architecture pour que ça puisse se faire en un seul. Ce résultat nous a donc déçu, mais il est cependant possible qu’il ne soit attribuable qu´aux drivers peu avancés : l´avenir nous le dira !Ecran rougeElseEcran vertEndif


Sommaire
Vos réactions
Contenus relatifs
- [+] 04/05: Nvidia abandonne son GeForce Partne...
- [+] 27/04: AMD Vega 7nm en labo, Zen 2 échanti...
- [+] 18/04: ASUS AREZ, l'effet GeForce Partner ...
- [+] 10/04: Nvidia : fin du support Fermi et 32...
- [+] 27/03: Pilotes Radeon et GeForce pour Far ...
- [+] 20/03: Pilotes GeForce 391.24 pour Sea of ...
- [+] 20/03: Microsoft annonce DirectX Raytracin...
- [+] 20/03: Radeon Software 18.3.3 beta avec Vu...
- [+] 08/03: 3 millions de GPU vendus pour le mi...
- [+] 08/03: Radeon Software 18.3.1 optimisé pou...