En regardant le code d'un peu plus près, j'ai remarqué qu'il y avait une fonction d'initialisation chargée d'évaluer la durée d'une trame entre deux retours verticaux. C'est pour cette raison que Genlock ne fonctionnait qu'à 60 Hz sur ma machine, cette fonction n'était jamais appelée lorsque le module restait chargé en mémoire pendant un changement de fréquence.

Il suffisait donc de décharger le module avant de changer la fréquence du moniteur puis de le recharger pour que ça fonctionne pour la nouvelle fréquence. J'ai testé en choisissant un mode graphique à 120 Hz sur mon moniteur CRT et ça fonctionne correctement.

Le driver rate rarement un retour vertical et si ça arrive, il le détecte correctement de toute façon en affichant un message dans syslog. Un autre avantage de cette implémentation est qu'elle n'a quasiment aucun impact sur les performances du système, ce que j'ai constaté avec un simple « top ».

En effet, la synchronisation avec le retour vertical se fait via une interruption matérielle (IRQ), il n'y a donc pas de boucle d'attente qui pourrait être gourmande en cycles CPU. D'autre part le page flipping est matériel, il ne nécessite donc pas une longue opération de copie d'un buffer vers l'écran. Il consiste uniquement à reprogrammer le CRTC pour le faire pointer vers la bonne partie de l'écran à afficher, ce qui prend un temps négligeable.

Il reste encore pas mal de boulot pour faire en sorte que ce système fonctionne sans écran virtuel et pour le rendre compatible avec OpenGL (pour les jeux et applications 3D) et X Video (pour la lecture de vidéos 3D), mais c'est un bon début. Il faudra également lui ajouter le support du signal DDC VGA pour qu'ils puisse fonctionner avec toutes les lunettes de ce type et pas seulement les eDimensional avec l'activator.

Pour l'instant la compatibilité avec la gamme complète des cartes graphiques NVIDIA reste à tester, mais comme les tests des auteurs de Genlock l'ont utilisé avec des cartes type GeForce 4 et que ça fonctione sur ma GeForce 7600 GT, j'ai bon espoir pour le reste de la gamme. Ce sera de toute façon limité au matériel NVIDIA dans un premier temps, mais il suffirait de trouver des informations techniques pour d'autres matériels concernant la gestion du retour vertical par IRQ et le page flipping matériel pour étendre sa compatibilité.

En tout cas, ça ouvre de grands espoirs de voir enfin apparaître rapidement une solution pour la stéréoscopie 3D sous Linux.