En regardant de plus près le source de la W3D_AvengerLEMU.library, je
m'aperçois que les fonctions internes sont appelées directement par des
bsr et non par la FunctionTable :
Or, LibraryTimer patch la table des fonctions de la librairie afin d'y
insérer un compteur et même une mesure de temps. Avec ce bsr, et bien
LibraryTimer ne pourra l'ajouter dans ses statistiques. La solution est
simple, il suffit de le remplacer par un jsr en étant sûr qu'a6 soit
bien l'adresse de base de la W3D_AvengerLEMU.library :
Il y avait moins d'une dizaine d'appel bsr en tout et pour tout.
Maintenant, nous allons obtenir des statistiques plus complètes et plus précises avec
LibraryTimer :
La
fonction -$3C fait alors son apparition comme étant la plus utilisée :
il va falloir ruser comme un sioux afin de diminuer au maximum ses
instructions nécessaires. Ici donc, chaque cycle gagné est très important.
Voici les nouvelles statistiques :
Voici les nouvelles statistiques :
- fonction -$24 : 382 fois
- fonction -$36 : 1 fois
- fonction -$3C : 367 558 fois
- fonction -$5A : 110 fois
- fonction -$90 : 23 fois
- fonction -$AE : 1 fois
- fonction -$B4 : 845 fois
- fonction -$BA : 884 fois
- fonction -$D8 : 2 357 fois
- fonction -$DE : 452 fois
- fonction -$E4 : 383 fois
- fonction -$EA : 228 fois
- fonction -$108 : 10 fois
- fonction -$10E : 382 fois
- fonction -$114 : 383 fois
- fonction -$144 : 5 054 fois
- fonction -$14A : 1 fois
- fonction -$162 : 354 fois
- fonction -$180 : 1 fois
- fonction -$198 : 24 233 fois
- fonction -$19E : 113 013 fois
- fonction -$1B6 : 150 286 fois
- fonction -$1C2 : 6 524 fois
Maintenant, très exactement la même méthode pour la Warp3D.library, avec toujours le même jeu Quake 2 :
- W3D_SetState : 7 932 fois
- W3D_LockHardware : 387 fois
- W3D_UnLockHardware : 386 fois
- W3D_WaitIdle : 386 fois
- W3D_AllocTexObj : 1 fois
- W3D_SetFilter : 3 fois
- W3D_SetTexEnv : 2 318 fois
- W3D_SetWrapMode : 1 fois
- W3D_SetBlendMode : 1 011 fois
- W3D_SetDrawRegion : 387 fois
- W3D_ClearZBuffer : 387 fois
- W3D_SetZCompareMode : 387 fois
- W3D_SetCurrentColor : 4 257 fois
- W3D_DrawTriFanV : 68 170 fois
- W3D_DrawTriStripV : 19 480 fois
- W3D_DrawArray : 142 166 fois
Voilà, le travail de re-programmation peut commencer sérieusement, le codeur sait avec précision par où débuter de façon à obtenir des résultats en terme de vitesse visibles à l'oeil nu.
Hello
RépondreSupprimerTu devrais demander à Matt Hey pour les fonctions spécifiques aux .library de drivers
Tu peut utiliser Wazp3D (dasn winUAE) pour avoir la liste des appels à Warp3D d'un prog
Wazp3D-prefs:
>>> Enable Debugger >>>
Debug Calls
En mettant toutes ces options tu obtiens un simili-listing du prog qui tourne il suffit de rediriger l'output vers un fichier
monprog > debug.txt
Wazp3D-prefs:
>>> Enable Debugger >>>
Debug Function
Debug Calls
Debug Adresses
JSR Debug as JSR
Debug Var name
Debug Var value
Debug Var doc
Debug State
DebugPoint Debug Point
DebugError Debug Error
Debug SOFT3D
Alain thellier - Wazp3D
Ah bien, très utile !!
RépondreSupprimer