vendredi 21 juin 2013

CyberGraphX4 [eng]

While waiting to get back a working Mediator, I've been fooled by a greedy french amiga fan : my CyberStormPPC rev0 which wasn't working with my GRex 4000D for two BlizzardPPC. I still accepted the deal because there was a rev2 essential to get working this time a GRex 1200 bought long before...

Anyway, this will help to work on both library Warp3D Picasso96 and CyberGraphx4 since the Grex works with this RTG.

Indeed, there is at least a good optimization in W3D_Cgfx4_function_1E : most of the trigonometry from the Motorola sources which I had already mentioned in a previous article is present again in W3D_CyberGfx4.library.

While I still don't know why, the emulated square root (fsqrt.d) is present in the motorola part and Warpd3D author have been deceived, in good faith, believing that is was emulated by the 68040 and 68060 : well no, the mnemonic fsqrt is present in the 68881, 68882, 68040 and 68060 chips.

In short, the full part have been deleted and the two connections have been replaced by a purely simple and much faster "fsqrt.d fp0" ...

Otherwise, while waiting for the Mediator and the fusion of LEMU/LE and BEMU/LE library, I replaced two small functions in the W3D_AvengerLE.library (the same that in previous article "The beta 3" under Picasso96) et I get a good speedup too :

Still using StarShipW3D :

Yet, it's a unique case of course : I should understand why the speedup is so important...

This is reverse engineering : start from a result (here compiled libraries with gcc) and  then "back the other way" to understand why and how worked the initial authors and C/C++ compiler...

I already found the datasheets from the Avenger Voodoo GPU which is going to help...

The benchs with GLBlitzQuake ("Timedemo demo1") gives us + 0.4 fps with both new functions, which is a good news, however less impressive...
 
(translated by Squaley)
   

jeudi 20 juin 2013

CyberGraphX4 [fr]

En attendant de récupérer un Mediator qui fonctionne, je me suis bien fait rouler dans la farine par un Amigaïste français aux dents très longues : ma CyberStormPPC rev0 qui ne fonctionnait pas avec mon GRex 4000D contre deux BlizzardPPC. J'ai tout de même accepté parce qu'il y avait dans le lot une rev2 indispensable pour faire fonctionner mon cette fois GRex 1200 acheté il y a bien longtemps...

Bref, cela permettra de retravailler les deux librairies Warp3D Picasso96 et CyberGraphX4 puisque le GRex fonctionne avec ce dernier système RTG.

En effet, il y a au moins une belle optimisation dans la W3D_Cgfx4_function_1E : le gros paquet de trigo des sources de Motorola que j'avais déjà évoqué dans un article précédent est présent une nouvelle fois dans la librairie W3D_CyberGfx4.library.

La racine carré émulée (fsqrt.d) est bien dans le paquet Motorola pour je ne sais quelle raison d'ailleurs, et les auteurs de Warp3D ont donc été de bonne foie induit en erreur, croyant par cette présence qu'elle était émulée par les 68040 et 68060 : et bien non, la mnémonique fsqrt est bien dans les transistors des 68881, 68882, 68040 et 68060.

Bref, le paquet au complet a été supprimé et ses deux branchements ont purement été remplacé par un tout simple et bien plus rapide "fsqrt.d fp0"...

Sinon, en attendant le Mediator et la fusion des librairies LEMU/LE et BEMU/BE, j'ai remplacé deux petites fonctions dans la W3D_AvengerLE.library (les même que dans un précédent article "La béta 3" sous Picasso96) et j'obtiens un bon speedup aussi :

C'est toujours StarShipW3D qui est utilisé :

Alors, il s'agit d'un cas exceptionnel bien sûr : il faudrait comprendre pourquoi le speedup est si important...

C'est ça le reverse engineering : partir d'un résultat (ici des librairies compilées avec gcc) et ensuite "remonter dans l'autre sens" pour comprendre le comment du pourquoi ainsi que le pourquoi du comment de ce qui a été créé par les auteurs originaux et le compilateur C/C++ employé...

J'ai déjà trouvé le datasheet du GPU Avenger Voodoo ce qui va bien aider...

Les benchs avec GLBlitzQuake ("Timedemo demo1") donnent un + 0.4 fps avec ces deux nouvelles fonctions, ce qui est aussi plutôt une bonne nouvelle, certes moins impressionnante...
   

lundi 10 juin 2013

Unification [eng]

I was right to compare manualy A1200's and A4000's libraries !

In fact, those Mediators use there own libraries to be able to work flawlessly :

3dfx Mediator A1200T (Picasso96)
  • W3D_AvengerBEMU.library (= BigEndian MMU) 
  • W3D_AvengerLEMU.library (= LittleEndian MMU)

3dfx Mediator A3000/A4000 (Picasso96) & 3dfx GRex A1200T/A4000 (CyberGraphX)
  • W3D_AvengerBE.library (= BigEndian) 
  • W3D_AvengerLE.library (= LittleEndian)

Well, looking at the sources carefully, we can see that there are only few differences between thos two libraries : The A1200 version acceses the pci.library when asking a task but the A4000 one do not need to do that. There is also another difference in a little function and... that's all !!
   
The other part of the code is 100% identical !

This is a good news for us in order to put Warp3D into ROM in the future : only one file instead of two is required !

Only two tests need to be coded : one to identify if a Grex is connected, another one to detect if it is an A3000 or an A4000 which is in use. From here, we can orientate/point the code to the A1200's and A4000's libraries spécificities.

(translated by CrashMidnick)
     

Unification [fr]

J'ai bien fait de comparer à la main les librairies 1200 et 4000 !

En effet, ces deux modèles demandaient des versions spécifiques pour fonctionner convenablement :

3dfx Mediator A1200T (Picasso96)
  • W3D_AvengerBEMU.library (= BigEndian MMU)
  • W3D_AvengerLEMU.library (= LittleEndian MMU) 

3dfx Mediator A3000/A4000 (Picasso96) & 3dfx GRex A1200T/A4000 (CyberGraphX)
  • W3D_AvengerBE.library (= BigEndian)
  • W3D_AvengerLE.library (= LittleEndian) 

Et bien, en regardant avec attention les sources, les différences sont très minimes : la version 1200 accède à la pci.library pour une demande de renseignement tandis que celle du 4000 non. Il y a aussi une différence dans une autre petite fonction, et c'est tout !!

Tout le reste du code est 100% identique !

Ce qui arrange bien nos affaires quant à la finalité romable de Warp3D : beaucoup de place gagnée dans les eproms maintenant puisqu'il n'y a plus qu'un seul fichier au lieu de deux...

Il va suffir de coder deux tests : un qui détecte si un GRex est branché et un autre pour vérifier si c'est un 3000 ou 4000 qui est utilisé. Ensuite à partir de ces deux résultats, orienter le code vers les spécificités 1200 et 4000 des librairies.
  

dimanche 9 juin 2013

The beta 3 [eng]

Good news today ! Do you smell the rubber ?

Speedup is pretty good, see by yourself. I use the little demo called StarShipW3D which is already very fast with original libraries on my setup :

I have chosen to start with StarShipW3D which seems to give us fairly accurate benchmarks...

In comparison, Cow3D is very slow on my setup : I can only reach about 7 fps... I also found a bug inside the program. Press the « B » key to turn the cache on and you will see that the cow has some glitches at some point during a turn and resume its original shape and so on...

Using my new Beta 4 for warp3D.library and the beta 3 for W3D_AvengerLEMU.library, a huge gain of speed can be noticed on our old 68k and 3dfx : + 49 fps !!
 
For the moment, I have reworked about five or six routines related to the W3D_LockHardware and W3D_UnLockHardware functions, more to come soon...

 (translated by CrashMidnick)
  

La béta 3 [fr]

De bonnes nouvelles aujourd'hui ! Ca commence à speeder grave...

L'accélération est plutôt bonne, constatez par vous-même. J'utilise la petite démo StarShipW3D qui est déjà très rapide avec les librairies originales sur ma configuration :

J'ai choisit de commencer par StarShipW3D qui semble donner des benchs constants assez précis... 

En comparaison, la Cow3D est très lente, environ 7 fps sur ma configuration... J'ai d'ailleurs trouver un bug dans celle-ci lorsque l'on appuie sur la touche "B" pour activer un cache : la vache se brouille à un moment pendant un tour et reprends sa forme originale et ainsi de suite...

Avec ma nouvelle beta 4 pour la Warp3D.library et la beta 3 pour la W3D_AvengerLEMU.library, il y a un beau sursaut de nos vieux 68k et 3dfx qui en ont encore dans le slip : + 49 fps !!

Je n'ai surtout retravaillé pour l'instant que cinq ou six routines relatives aux fonctions W3D_LockHardware et W3D_UnLockHardware, more to come soon...