La carte 3D : 3dfx Voodoo Graphics
Avec -voodoo, l'émulateur ajoute une 3dfx Voodoo Graphics (SST-1) dans un slot PCI. Dans BeOS, le support 3dfx du projet BeOS-Glide la trouve comme une vraie carte : le driver thdfx, la librairie Glide 2.x, OpenGL (Mesa 3.2.1), les tests de 3dfx, les démos OpenGL et des jeux tournent dessus (Virtua Racing, Mage Slayer).
La carte émulée
| carte | Voodoo Graphics, PCI 121a:0001, révision 2 ; un BAR mémoire de 16 Mo |
| FBI | 4 Mo de frame buffer : deux ou trois buffers 16 bits et le z-buffer, 640x480 ou 800x600 |
| TMU | deux (-voodoo, comme les cartes Obsidian), ou un seul (-voodoo1tmu, la Diamond Monster 3D et la plupart des cartes du commerce) ; 4 Mo de textures chacun |
| DAC | ICS5342 (les PLL que Glide lit pour l'identifier) |
Avec deux TMU, les jeux appliquent deux textures en une passe (texture et lightmap) ; certains, comme le portage de Mage Slayer, n'affichent leurs lightmaps qu'à cette condition.
Comme la vraie carte, la Voodoo a sa propre sortie vidéo : tant qu'un programme Glide tourne, la fenêtre de l'émulateur montre l'image de la Voodoo à la place de l'écran Cirrus, puis revient au bureau quand il se termine.
Installer le support 3dfx dans BeOS
Le paquet prêt à installer, 3dfx-beos-ppc-1.0.tar.gz, est dans les téléchargements.
Le passer dans BeOS par le dossier partagé : mettre l'archive dans un dossier de l'hôte, par exemple
partage/, puis lancerbebox -romdump flash.bin -hd0 beos.img -voodoo -share partageDans BeOS, monter le disque partagé (menu Mount du bureau) et copier l'archive sur le disque de BeOS avant de la décompresser (le disque partagé est en FAT). Dans un Terminal :
cd /boot/home gunzip -c 3dfx-beos-ppc-1.0.tar.gz | tar xf -Installer la version Voodoo Graphics (
install.shsans argument installe celle de la Voodoo 2, qui n'est pas émulée) :cd 3dfx-beos-ppc-1.0 sh install.sh voodoo1Le script doit afficher
OK: card found (/dev/3dfx_0). S'il répond que le driver est installé mais que/dev/3dfx_0n'est pas apparu : vérifier que l'émulateur a été lancé avec-voodoo, puis redémarrer BeOS.
L'installation copie le driver dans ~/config/add-ons/kernel/drivers, Glide et Mesa dans ~/config/lib, et les commandes glidereset et voodoo dans ~/config/bin. Le mode d'emploi complet du paquet est dans son README.txt (LISEZMOI.txt en français).
Tests Glide
Depuis un Terminal, dans le dossier des tests (ils lisent leurs textures .3df) :
cd tests/voodoo1
./test00 -n 300 # efface l'écran
./test01 -n 300 # points
./test11 -n 300 # écritures directes dans le frame buffer
./test17 -n 300 # textures
./test21 -n 300 # composition de textures (lightmap)
Sans -n, un test attend une touche. Les 24 tests (test00 à test23) tournent.
OpenGL
Les démos de Mesa pour la 3Dfx (plein écran, clavier par le Terminal ; h : aide, Échap : quitter) :
cd opengl/demos
./teapot
./fire
./tunnel
Un programme OpenGL ordinaire de BeOS (BGLView) passe sur la Voodoo sans être recompilé, avec la commande voodoo :
voodoo /boot/apps/GLTeapot/GLTeapot
voodoo opengl/glspin
Sa fenêtre reste sur le bureau (clavier, souris) et l'image 3D est en plein écran sur la Voodoo.
Jeux
Des jeux Glide tournent avec le son, comme Virtua Racing et le portage Glide de Mage Slayer ; ils ne sont pas fournis : ils appartiennent à leurs ayants droit. Les jeux qui utilisent la Voodoo demandent -voodoo (deux TMU).
Dépannage
| Symptôme | Cause et remède |
|---|---|
install.sh ne trouve pas la carte | émulateur lancé sans -voodoo, ou BeOS pas encore redémarré après l'installation |
| un test plante au démarrage ou les textures manquent | paquet ancien : sa lib Voodoo Graphics ne détectait pas sa mémoire de textures sur PowerPC (il fallait SST_TMUMEM_SIZE=4) et son lava.3df faisait planter test21. Utiliser celui des téléchargements |
| la fenêtre reste sur l'image 3D après un plantage | taper glidereset dans le Terminal : il ouvre et referme l'écran de la Voodoo, ce qui rend l'affichage au Cirrus |
| c'est lent | Ctrl droit + F10 montre dans le titre la vitesse que l'émulateur atteint |
| image ou comportement suspect | essayer BEBOX_VOODOO_NOTHREAD=1 (rendu dans le thread principal) pour savoir si le thread de rendu est en cause |
Variables d'environnement de Glide utiles : FX_GLIDE_NO_SPLASH=1 (pas de logo 3dfx), SST_INITDEBUG=1 (trace de l'initialisation de la carte).
Fonctionnement
L'émulation suit les définitions de registres et le code d'initialisation des sources Glide 2 publiées par 3dfx, et le comportement du pipeline décrit par l'émulation Voodoo de MAME (Aaron Giles).
- Bus : registres (avec la sélection de puce par l'adresse et la correspondance alternative), LFB et mémoire de textures dans le BAR ; la BeBox étant big-endian et le PCI little-endian, les octets arrivent inversés comme sur la vraie machine, et Glide les remet dans l'ordre avec
stwbrx/lwbrxou les bits de swizzle de la carte. - Triangles : paramètres itérés depuis le sommet A, centres de pixels, rectangle de clipping, origine Y ; Gouraud, Z et W.
- TMU : tous les formats de textures (NCC, palettes), mipmaps, filtrage bilinéaire, clamp ou répétition, perspective, unité de combinaison de texture ; le TMU 1 alimente le TMU 0.
- Pixels : combinaison de couleur et d'alpha, chroma key, test alpha, brouillard (table, alpha, Z), mélange, dithering 4x4 et 2x2, masques d'écriture, buffer alpha ou de profondeur.
- LFB : lecture et écriture dans tous les formats, avec ou sans le pipeline de pixels.
- Vidéo : timing, retour vertical, permutation des buffers synchronisée sur le retour vertical (les commandes suivantes attendent dans la FIFO).
- Thread : le rendu tourne dans son propre thread, en parallèle de l'émulation des processeurs. Le thread de l'émulation garde le timing vidéo et le registre de statut ; les lectures qui dépendent du rendu attendent qu'il ait fini. Le programme ne peut pas prendre plus d'une image d'avance sur le rendu, ce qui limite la latence des commandes.
Pas émulé : la Voodoo 2, le SLI, le mélange trilinéaire et les textures de détail (les facteurs de combinaison basés sur le LOD valent 0).