| IntroductionIl y a à peu prés un an la société 3Dfx
Interactive  a annoncé que  son nouveau composant 3D changerait
la perception de la 3D sur PC. Avant la venue du composant de 3Dfx, il
n'y avait  pas de proposition  raisonablement tarifée sur un PC
domestique pour le graphisme 3D de haut  niveau. On ne pouvait trouver
des systèmes graphiques  performants que  sur les stations   de
travail comme celles de  SGI ou  de SUN  qui utilisent  des composants
spécialisés trés couteux. Les fabricants de carte
vidéo comme Number Nine, Diamond  multimedia, et Matrox avaient
des   cartes  vidéo    bon    marché   avec     quelques
capacités    3D,   mais  ces capacités    étaient
trés limitées en comparaison  de celles offertes par les
cartes spécialisées sur  SGI ou sur d'autres stations de
travail.
 Avec la sortie du composant de 3Dfx,  appelé Voodoo 3Dfx, le
graphisme  3D haut de   gamme est devenu abordable pour  l'utilisateur
moyen. Les  performances de ce composant  sont  un grand  pas en avant
dans l'éternel effort pour apporter  des graphismes 3D haut  de
gamme au PC domestique. Avant cela les composants vidéo avaient
leur  capacités limitées au  z-buffer et aux ombrages de
gouraud (certains  moins primitifs permettaient  un mapage  de texture
limité), mais  ces  capacités n'étaient   souvent
utilisables que  dans certaines  résolutions ou  profondeurs de
couleur.  Et malheureusement le  processeur était largement mis
à contribution pour l'utilisation de ces capacités.
             Limitation   de  la   3D  dans  les  cartes
           vidéo Voici  un    exemple    concernant  les    limites    d'une   carte
vidéo.  Cette  carte  peut implémenter  une fonction  de
z-buffer,  mais  cela peut   n'être qu'une possibilité du
pilote  vidéo  à mémoriser les coordonnées
en z des pixels dans une zone mémoire de la carte qui ne serait
pas  utilisé autrement. On ne   peut alors utiliser le z-buffer
que dans les   basses résolutions et  avec  un petit  nombre de
couleur  car les modes   plus élevés  utilisent plus  de
mémoire.   Dans les  modes plus  élevés  il n'y a
plus     assez   de  mémoire       pour  mémoriser   les
coordonnées   en z.   Même avec     le  stockage de   ces
coordonnées   en mémoire   vidéo,  le logiciel  a
encore  besoin     d'utiliser  le  processeur     pour   comparer  les
coordonnées en  z des nouveaux  pixels avec ceux présent
dans le  z-buffer. Puisque ces   comparaisons  utilisent une part  non
négligeable  du  temps  processeur,  la  possibilité  de
z-buffer  de cette carte   n'élimine pas vraiment le  classique
goulot d'étranglement du z-buffer.   Si ces explications   vous
parraissent confuses ce n'est pas grave... c'est trés technique
et vous n'en avez pas vraiment besoin pour voir les différences
entre des  cartes graphiques qui  prétendent à la  3D et
les composants 3Dfx.
               Capacités   du    composant   Voodoo
           3DfxIl  suffit    de  dire  que  le   composant   Voodoo  3Dfx   a  des
possibilités qui ne peuvent être atteinte par aucun autre
fabricant   de     circuits vidéo.    Ce    jeu   de  composant
améliore  les  fonctions  3D  générales  comme l'
ombrages de  gouraud,   depth buffer (z-buffer  et w-buffer),  l'alpha
blending,   le brouillard, le chroma  keying,  et le dithering. Il est
aussi capable de mapage de  texture en vrai perspective, de  trilinear
mip mapping, d'éclairage  de texture, de  sub-pixel correction,
et  de decompresser les   texture space.   Toutes  ces fonctions  sont
réalisées au niveau matériel sans    intervention
(ou presque)  du logiciel. La   tache du logiciel consiste  simplement
à  mettre  en place l'environement graphique,  et d'initialiser
les  coordonnées. Actuellement  le composant Voodoo  3Dfx n'est
pas capable  d'initialiser les coordonnées, mais les proceseurs
réçent sont tout  à fait capables d'effectuer ces
opérations.  A noter que  la prochaine génération
de   ce  composant,  appelé    Voodoo2, benificiera   de  cette
possibilité  donnant   encore  plus     de puissance pour    le
graphisme. Les prototypes  actuels de carte  vidéo utilisant le
Voodoo2 dépassent  des records de  vitesse! Plus  important, le
ratio     prix/performance    du   composant      Voodoo     est    sa
caractéristique la   plus marquante. 
 
    Limitations du composant Voodoo 3DfxMalheureusement le  composant  Voodoo 3Dfx  a ses  limitations.  La
première   limitation  de  ce   composant   est  qu'il ne  peut
fonctionner  qu'en plein   écran et  qu'il  ne  peut être
utilisé comme la seule  carte vidéo de l'ordinateur. Les
cartes  vidéo qui utilisent  un composant Voodoo travaillent de
concert  avec  une autre carte  vidéo "normale",  mais quand le
logiciel veut utiliser le composant  Voodoo il accède au pilote
3Dfx pour   initialiser  le composant.  Le composant   prends alors le
control   et   commence  à  afficher   conformément  aux
fonctions Glide appelées par le logiciel.
 Dans  une   configuration   normale   sans carte  3Dfx,    la carte
vidéo est dans  son propre slot sur la  carte mère et sa
sortie est  connectée au moniteur.  Le signal  de sortie  de la
carte est affiché sur le moniteur. Les cartes vidéo 3Dfx
comme la Monster 3D et la  Pure 3D se connectent  entre le moniteur et
la carte vidéo d'origine, les deux cartes peuvent donc utiliser
le  même moniteur.   Une   configuration comme  celle  là
consiste à  ce que les  deux  cartes vidéo aient chacune
leur slot sur la carte mère. La sortie de la carte vidéo
d'origine est connectée à l'entrée de la 3Dfx via
un cable qui accompagne  généralement la carte  3Dfx. Le
moniteur   est alors  relié  à  la  sortie   de la carte
3Dfx. Lors  d'une utilisation     normale,  le signal de     la  carte
vidéo traverse  la carte 3Dfx et  le  signal est affiché
par le moniteur.  Quand une application  initialise le composant 3Dfx,
la carte 3Dfx  coupe   le signal  de   la carte vidéo,  et   le
composant    3Dfx   commence   à   envoyer   son  propre signal
vidéo  au moniteur. Tout l'affichage fait  par la carte 3Dfx va
au   moniteur jusqu'a ce  qu'une   commande  de fin d'affichage   soit
envoyée par  le  pilote 3Dfx,  la  carte  vidéo reprends
alors le controle.
 Malheureusement, dans cette configuration le signal de sortie de la
carte   vidéo n'est pas  visible  et  cela peut poser  certains
problèmes    lors de   l'utilisation   d'un  système  de
fenétrage comme celui d'Xwindows. Une autre méthode peut
être utilisée, mais elle demande  un second moniteur.  Si
vous disposez de deux moniteurs, vous pouvez  en connecter un à
la sortie de  la carte vidéo d'origine  et un autre à la
sortie de la carte 3Dfx. De cette  façon vous disposez toujours
d'un moniteur afficant  le  sytème de fenêtre et  l'autre
n'est activé que pendant l'utilisation de la carte 3Dfx.
 Un  nouveau composant de  3Dfx    appelé 3Dfx RUSH  est  lui
capable  d'afficher dans  une fenêtre.  Les  cartes vidéo
basées  sur   ce  composant contiennent    aussi un   composant
d'affichage 2D qui  est connecté au même framebuffer  que
le  composant 3Dfx. Il n'y  a pas encore de  pilote sous Linux pour ce
type de composant, mais le developpement est en cours. 
 Une autre limitation du composant 3Dfx est  qu'il ne peut atteindre
les trés hautes résolution aujourd'hui supportées
par les cartes 2D. Tandis que les cartes vidéo peuvent afficher
en   1280x1024, 1600x1200   et    même  plus, les  cartes   3Dfx
n'affichent  en général  pas  plus de  640x480. Ce n'est
cependant pas  une  si    grande  limitation. Avec   les    techniques
d'anti-aliasing et  de filtrage de  texture du 3Dfx  on peut mettre un
grand nombre d'objet dans une résolution de 640x480 sans aucune
pixelisation  ou   presque.  En fait,   il  est  trés difficile
d'identifier   la  résolution  d'une application  utilisant  le
composant 3Dfx juste en regardant l'écran.  Les cartes les plus
courantes comme  la Monster3D atteignent   seulement 640x480. Je pense
que certaines peuvent être poussées jusqu'en 800x600 mais
dans cette   résolution la carte  ne  peut plus faire  ni depth
buffer ni  alpha     buffer puisque la   mémoire    normalement
réservée à  ces fonctions est utilisé pour
l'affichage.  Des  cartes 3Dfx haut  de gamme comme celle de Quantum3D
peuvent utiliser le mode 800x600 sans compromis.
        Les  fabricants    OEM   utilisent    le     composant
3Dfx3Dfx Interactive  est le fabricant  du  composant 3Dfx, mais il  ne
fabrique pas de  carte. D'autres sociétés comme  Diamond
Multimedia, Orchid Technology,  et Canopus Corporation fabriquent  les
cartes  qui  utilisent ce  composant. Diamond   fabrique la Monster3D,
Orchid fabrique la Righteous3D,  et  Canopus fabrique la  Pure3D.  Une
société  appelé Quantum3D séparé de
3Dfx offre des cartes qui utilisent des configurations avancées
du  composant Voodoo 3Dfx  (plusieurs unité PixelFX et TexelFX,
plus de mémoire de framebuffer ou de texture, ect). Ces modeles
sont appelés Obsidian 3D. Regardez sur le site 3Dfx Interactive
(www.3dfx.com)    pour    une  liste
complète des fabricants de carte  vidéo qui utilisent le
composant   3Dfx.  
 
        Fonctionnement interne du Voodoo 3DfxLe composant Voodoo peut être vu comme un assemblage flexible
de différents sous systèmes. Il  peut y avoir plusieures
combinaisons de ces sous  systèmes, la plus simple étant
de n'avoir qu'un sous système.   Chaque sous système est
compoosé  de    deux processeurs  appelés:   PixelFX  et
TexelFX. Le PixelFX est  le processeur en charge des opérations
au niveau  d  pixel comme le  depth-buffer et  le  gouraud shading. Le
TexelFX est  le processeur  en charge   des opérations sur  les
textures  comme   le  texture filtering  la   projection. Ensemble ces
processeurs peuvent produirent des effets comme l' éclairage de
texture. Chacun  de ces processeur peut  disposer de sa propre RAM. Le
PixelFX utilise sa RAM pour stocker les  pixels pour le framebuffer et
le TexelFX utilise sa RAM pour stocker les textures.
 Chaque sous système  Voodoo contient un  processeur PixelFX,
mais il peut  y avoir  des sous  sytèmes qui contiennent   une,
deux,   ou   trois  processeurs  TexelFX  séparés   pour
accroitre   la  vitesse de  gestion   des  textures.  De même un
composant  Voodoo  peut contenir  plusieurs   sous système   et
utliser l'entrelacement de ligne pour effectivement doubler la vitesse
d'affichage.    Ces configurations  avancées peuvent être
plus puissante   que des   stations  SGI  haut  de  gamme, ce   qui  a
été   prouvé lors   de   test.   Bien   sur   ces
configurations sont plus  chères  que  dans les  cartes  Voodoo
standard, et sont pour la pluspart des utilisateurs inutiles.
 
         Programmation du 3DfxPar crainte du reverse engineering  3Dfx Interactive ne publie  pas
la  documentation  pour    la  programmation au  niveau    registre du
composant. Au lieu de  ça ils distribuent un  SDK appelé
Glide,  qui  agit  comme une     couche  d'abstraction au dessus    du
matériel. Glide est  un jeu de fonctions organisées dans
une  librairie qui  fournit une    API relativement facile    à
programmer   tout   en cachant   la    couche matérielle.   Ces
librairies  ont été  portées  sur les plateformes
choisies  par 3Dfx  Interactive  (dont Linux)   et  viennent  avec une
documentation      détaillée. Les developpeurs   peuvent
utiliser l'API comme une interface leurs applications 3D avec la carte
3Dfx. Glide  est une librairie graphique de  trés bas niveau au
contraire de  Direct3D  ou OPenGL.   Elle  ne fournie aucune  fonction
avancée comme la transformation  ou l'affichage de listes. Elle
fournit plutôt  une légère abstraction par rapport
au  registres    matériels,  et  toutes  les    fonctions  sont
directements   traitées  par le composant.  J'ai discuté
avec la personne qui a porté Glide sur Linux et il a dit que la
librairie  était     vraiment     trés   simple       et
qu'approximativement, on    passe les     paramètres  correctes
à la fonction et la fonction mets les  parametres dans les bons
registres et dit à la carte d'afficher.
 Il va sans dire que les programmeurs OpenGL  ou Direct3D ne peuvent
pas développer des  applications  3DFx. Des pilotes OpenGL   et
Direct3D   ont été développé pour utiliser
Glide de cette façon  les developpeurs peuvent utiliser les API
OpenGL ou Direct3D et le pilote traduira les  fonctions de haut niveau
en  fonctions Glide  qui  utiliseront les   commandes 3DFx. C'est  une
méthode rapide et efficace de développement.
 
         Utiliser Mesa avec 3DfxUn  pilote qui   interface  Mesa  (l'implémentation gratuite
d'OpenGL  disponible  sur  de nombreux  systèmes)  avec Glide a
été    développé pour   permettre      aux
applications     OpenGL   d'utiliser      l'accélération
matérielle sous Linux  ou Windows 95.   Linux est gratuit,  les
compilateurs  sous Linux sont gratuits,   Mesa est gratuit, et le  SDK
Glide   de   3DFx est  gratuit,   cette configuration  offre  donc une
plateforme de développement OpenGL à prix imbatable.
 Malheureusement le SDK Glide n'a pas été porté
sous Linux/Alpha ni sous  Linux/Sparc  cela ne s'applique donc  qu'aux
plateformes i386. Au momment  de  l'écriture de cet article  la
dernière version  de Mesa est la 2.5  et la version 2.6  est en
test. Le  pilote Mesa est  trés avancé  et il est capabe
d'accélérer le  rendu  des point,  lignes, et  polygones
avec  du  flat shading et   gouraud shading  ainsi   que du mappage de
texture, depth buffering,  brouillard,   et blending. Bien  que   j'ai
mentionné  que le  Voodoo  3DFx n'était  capable  que de
faire   du   plein écran, il  est    possible  d'avoir un rendu
fenétré grace à une  astuce dans le pilote  Mesa.
Cette   astuce consiste à  prendre  les données du frame
buffer de la 3DFx et de les  transférer à travers le bus
PCI  dans la RAM de  la carte vidéo. Bien  que cela ne soit pas
aussi  rapide  qu'un  rendu  plein écran,  c'est  beaucoup plus
rapide qu'un redu purement logiciel.
 Mesa peut être téléchargé depuis le site
ftp://iris.ssec.wisc.edu/pub/Mesa
.     Mesa      est     distribué     en      deux packages
séparés.  Le premier contient la librairie principale et
les   fichiers  include, il     commence  avec  le  nom  MesaLib,   le
deuxième est  juste   une   collection de  démos.   Pour
l'installer il suffit de détarer  le package  et de changer  de
répertoire   dans  le      répertoire qui       à
été créé par  tar. Il y a  plusieurs choix
possible pour compiler la librairie. Depuis Mesa 2.5 certaines routine
ont  été  écrites directement  en  assembleur 386
pour accroitre la  rapidité.  Malheureusement ces routines sont
un   peu     buggées    mais     cela     a   été
réparé  dans  la version béta 2.6.  Pour compiler
Mesa avec  le support 3DFx mais  sans les routines en assembleur, vous
pouvez invoquer "make linux-glide",  pour compiler  Mesa avec 3DFx  et
les    routines     en   assembleur  il      faudra  invoquer    "make
linux-386-glide". A partir de Mesa   2.6 le fichier ../../common/January1998/Makefile  comporte
des directives de compilation pour optimiser  Mesa en utilisation avec
GlQuake et  QuakeII. Si vous voulez  les optimisations pour GlQuake il
faut invoquer "make linux-386-quake-glide" pour compiler Mesa.
 Aprés  la  compilation   de   Mesa   il   y  a    plusieures
manières  de l'installer. Une   alternative  est de  mettre les
fichiers qui  se trouvent dans  les répertoires  include et lib
dans    les    répertoires   /usr/lib   et    /usr/include   ou
éventuellement dans   les  répertoires /usr/local/lib et
/usr/local/include. Ou bien vous pouvez les mettre dans n'importe quel
répertoire à  condition  que le linker  dynamique puisse
les  trouver.  Les répertoires  où  le  linker dynamique
regarde  peuvent    être  configurés   par   le   fichier
/etc/ld.so.conf.    Parceque  le  développement   de Mesa   est
trés rapide     et  que j'aime    tester  les  dernières
bétas     dés   qu'elles   sortent,     je  garde    des
répertoires   séparé    pour  chaque  version  de
Mesa.  Pour  choisir la version que  j'utilise  je change  mon fichier
ld.so.conf  pour inclure le répertoire  qui contient la version
que je  veux utiliser.   En  ce mommment j'ai  /usr/local/Mesa-2.5 qui
contient  la   version 2.5. Et  pour   les  bétas 2.6 j'utilise
/usr/local/Mesa-2.6b1  ou /usr/local/Mesa-2.6b2.   Vous  pouvez ne pas
utiliser ce système,   mais si  vous  l'utilisez rappelez  vous
d'exécuter ldconfig à chaque  changement dans le fichier
/etc/ld.so.conf. Si vous voulez  savoir quel est la version qu'utilise
actuellement   le   linker  tapez:    ldconfig -p  | grep
Mesa
 et  cela affichera les librairies  Mesa avec  leur numéro de
version.
 Aprés   avoir installé   Mesa vous   etes  pret. Pour
exécuter  une application Mesa qui  utilise  le 3DFx vous devez
être root.  Vous devez   aussi avoir un   serveur X  avec  65535
couleurs (16 bits/pixel). Si vous avez téléchargé
et  decompacté les  démos  elles  ont  été
compilées en même  temps que  la librairie,  vous  pouvez
donc les    tester.  Il y  a  trois  façons  différentes
d'utiliser la librairie  Mesa. Premièrement tout le rendu  peut
être fait  par logiciel, c'est  le mode  par défaut. Pour
que  l'application utilise la carte   3Dfx en mode plein  écron
vous   devez  placer   une   variable    d'environnement comme   suit:
MESA_GLX_FX=fullscreen
 et le programme   utilisera la carte   3Dfx. Cependant utiliser  un
programme Mesa   dans  ce mode sous   Xwindows   n'est pas trés
efficace. Quand vous lancez une application Mesa, le serveur X ne sait
même pas que la carte 3Dfx existe. Si le curseur de la souris va
en dehors de la fenêtre sur le serveur  X, l'application Mesa ne
recevra plus  aucun évènement.  Donc, si vous n'utilisez
qu'un moniteur, il    est   conseillé d'utiliser  le   mode  de
placement interactif  des  fenêtres   de  votre gestionnaire  de
fenêtre.  Sinon, quand vous lancez  l'application Mesa, la carte
3Dfx va commence son affichage en plein écran et vous ne pouvez
plus  voir   le  bureau  Xwindows,  et par    conséquent il est
difficile    de   placer le    curseur  de  la  souris   dans la bonne
fenêtre. Il  est  possible d'écrire un  programme Mesa de
façon à ce  que le curseur de  la  souris reste à
l'intérieur de la fenêtre (mouse wrap).
 Pour  qu'une  application  utilise  le mode fenêtré du
3Dfx il faut placer les variables d'environnement suivantes:
SST_VGA_PASS=1
 SST_NOSHUTDOWN=1
 Puis MESA_GLX_FX=window. Aprés avoir initialisé ces variables
et lancé l'application vous aurez de meilleures performances durant
l'affichage qu'en utilisant un rendu purement logiciel.
 
           |