Voici une petite application écrite en C permettant de tester la fonctionnalité de page flipping matériel d'une carte graphique sous Linux. Ça devrait s'avérer utile pour l'implémentation d'un pilote 3D stéréo pour Linux équivalent à celui qui existe sous MS Windows (3D Vision), mais il est possible que ça puisse servir à autre chose.

Dans une configuration double écran ça ne fonctionnera normalement que sur l'écran connecté à ce que la carte graphique considère comme le port principal. Chez moi c'est l'écran connecté au port DVI, mon autre écran étant connecté au port VGA.

Le code utilise l'accès aux registres standards VGA et nécessite de configurer Xorg avec un écran virtuel de résolution horizontale double de celle de la fenêtre virtuelle. Par exemple, pour une fenêtre virtuelle en 1024x768, il faudra un écran virtuel en 2048x768.

Pour définir un écran virtuel, il suffit d'ajouter une ligne de ce type dans la section "Screen" du fichier /etc/X11/xorg.conf, par exemple :

  • Virtual 2048 768

ou

  • Virtual 3840 1080

pour pouvoir spécifier des résolutions allant jusqu'au 1920x1080 pour la fenêtre virtuelle.

Vous pouvez télécharger le fichier pageflip.c en cliquant sur le lien « une annexe » et le compiler en saisissant la commande suivante dans un terminal :

  • gcc -O2 -o pageflip pageflip.c

Le programme doit être lancé en tant que root pour débloquer l'accès aux registres VGA et il faut spécifier la résolution horizontale de la fenêtre virtuelle comme paramètre. Par exemple pour une fenêtre virtuelle en 1024x768 :

  • ./pageflip 1024

L'application se pilote de façon interactive avec les commandes suivantes, suivies de la touche <Entrée> pour valider :

  • 'q' pour quitter l'application
  • '1' pour afficher la première page
  • '2' pour afficher la seconde page

Je ne sais pas si ça fonctionne sur d'autres architectures qu'i386 ni sur d'autres cartes graphiques que les NVIDIA mais je serais intéressé de savoir si c'est le cas ou pas, notamment pour les architectures 64 bits et les cartes graphiques ATI et Intel.

Sur ma machine équipée d'un processeur Athlon XP 2400+ 32 bits et d'une carte graphique NVIDIA GeForce 7600 GT ça fonctionne pour toutes les résolutions que j'ai essayées : 1024x768, 1280x720, 1360x768 et 1920x1080.

Je serai ravi d'avoir des retours pour savoir si ça fonctionne correctement chez d'autres, en indiquant le type de processeur et de carte graphique utilisés si possible.

Merci.