lundi 24 août 2020

miniGL 1.22

Bon, aucun coder ne semble être intéressé pour convertir cette librairie en asm, c'est dommage...

Bien souvent, lorsque personne ne veut vous aider à réaliser un projet, vous critique ou même vous décourage, c'est que vous êtes sur le bon chemin... A méditer !

Même les routines minuscules, gcc 2.95.3-4 est incapable de bien les coder... Incroyable mais vrai :
  1. _GLClearColor : 102 octets économisés par rapport à gcc
  2. _GLDepthFunc : 58 octets économisés par rapport à gcc
  3. _MGLLockDisplay : 26 octets économisés par rapport à gcc
  4. _MGLUnlockDisplay : 4 octets économisés par rapport à gcc
  5. _m_MatCopy : 32 octets économisés par rapport à gcc
  6. _GLPopMatrix : 108 octets économisés par rapport à gcc
  7. _GLPushMatrix : 96 octets économisés par rapport à gcc
  8. _GLAlphaFunc : 72 octets économisés par rapport à gcc
  9. _GLShadeModel : 24 octets économisés par rapport à gcc
  10. _GLBindTexture : 32 octets économisés par rapport à gcc
  11. _GLColor4f : 138 octets économisés par rapport à gcc
  12. _GLColor4fv : 126 octets économisés par rapport à gcc
  13. _GLFinish : 18 octets économisés par rapport à gcc

J'ai choisis celles-ci car elles sont utilisées par Quake2, bien pratique pour tester ensuite.

Une espèce de "protection" a été ôté des _GLPopMatrix et _GLPushMatrix. La nouvelle libmgl.a fait toujours la même taille pour l'instant, les octets gagnés ont été remplacé par des nop.

Librairie testée avec Quake 2 et GLBlitzQuake. Encore beaucoup de travail avant un speed up (seulement 0.5 seconde sous Q2), car toutes les routines retravaillées ci-dessus sont assez peu utilisées.

Sources et librairies compilées disponibles ici !
   

dimanche 16 août 2020

Wazp3D beta 56 1.2

La précédente 1.1 avait un petit talon d'Achille avec le 68040, je dois l'admettre : 37 fintrz et 2 fint étaient présents dans la librairie de façon à favoriser plutôt le 060, entrainant de fait une dépendance à la 68040.library puisqu'elles sont absentes des transistors de ce CPU.

Alors, même si Wazp3D fonctionnera sur 68040 forcément plus lentement que sur son grand frère le 68060, j'ai tout de même consacré environ 5 jours à remplacer la totalité de ces 2 instructions manquantes par du code cette fois bien présent dans le cœur du 040, histoire de fignoler un peu plus l'excellente librairie de notre Maréchal Thellier...

Et comme je conseillais ici de ne jamais utiliser les instructions absentes des 040/060, il est de bon ton de montrer l'exemple il me semble...

Peut-être qu'un talentueux développeur hardware sortira un carte 040 très rapide un jour, qui sait...

Bref, une détection du 68040 a été ajouté et redirige alors toutes les routines utilisant les fintrz et fint vers d'autres équivalentes spéciales 040, le tout de façon automatique, les utilisateurs n'ont rien à faire... De cette manière, les 68881/68882/68060 utilisent ainsi leurs fintrz et fint, et le 68040 ses propres routines sans : tous les 020+/881+ sont ainsi contents ! Et ce dans un unique fichier Warp3D.library !

La sous-routine _AntiAliasImage (ne fonctionnant qu'avec le rendu "soft68k to Image") a été entièrement refaite, entrainant un gain impressionnant de 59 fps avec la version 1.1 à maintenant 93 fps (soit +34 fps) sous la petite démo CavalleryW3D et ma config PC personnelle :
 
Sachez que beaucoup est encore optimisable, mais le boulot à consacrer est aussi assez important pour un speedup général à mon humble avis ensuite assez faible...

Vous comprenez tous mieux maintenant pourquoi j'avais retranscrit toute la librairie en asm68k : tout ceci est impossible à réaliser en C/C++...
   
Disponible ici, et gratuit comme toujours !