On Fri, May 23, 2003 at 10:07:06AM +0200, Grégory SIMON wrote: > Michel Luc <[EMAIL PROTECTED]> writes: > > Bonjour, > > > 357.400 à 369.800 FPS, c'est en plein écran ? > > Les cinq premiers sont en plein écran, les cinq autres sont en > fenêtre. > > 380 frames in 5.0 seconds = 76.000 FPS > 384 frames in 5.0 seconds = 76.800 FPS > 379 frames in 5.0 seconds = 75.800 FPS > 393 frames in 5.0 seconds = 78.600 FPS > 408 frames in 5.0 seconds = 81.600 FPS > 2010 frames in 5.0 seconds = 402.000 FPS > 2190 frames in 5.0 seconds = 438.000 FPS > 2368 frames in 5.0 seconds = 473.600 FPS > 2150 frames in 5.0 seconds = 430.000 FPS > 2159 frames in 5.0 seconds = 431.800 FPS > > > Sous woody, G450, 1280x1024 et Depth 16, j'obtiens > > de 965.600 à 966.00 FPS. Sans le FrameBuffer et tous les > > jeux 3D fonctionnent super. > > Tu commences à m'inquieter là :-)
Remarquer que le processeur utiliser peut aussi avoir une influence sur les FPS. > Tu veux dire quoi par "sans le FrameBuffer" ? > Sans les modules du noyau ou sans l'option "useFBdev" dans > XF86Config-4 ? L'usage ou non du framebuffer device ne devrait avoir aucune incidence sur l'execution de logiciel OpenGL accelere. La seule chose que fait le fbdev pour X c'est de faire le changement de mode et la detection des emplacement memoire. de plus cela permet d'avoir exactement le meme mode sous X et sous la console, et de permettre un console switch immediat. Autant que je sache, le framebuffer device matroxfb (tu utilise bien matroxfb et non vesafb) ne touche en rien le module drm (contrairement au driver i810 par exemple) et donc n'a aucune influence sur l'accel openGL, ni sur l'accel 2D d'ailleurs. > > C'est peut être du coté du paramétrage du FB qu'il te faut chercher > > ? > > A vrai dire je cherche un peu partout là :-) > > Je suis en train de me demander si cette carte n'est pas 16Mo au lieu > de 32Mo... Dacil a voir, que te dis /var/log/XFree86.0.log ou dmesg ? > Existe-t'il un utilitaire pour determiner la quantité de mémoire d'une > carte graphique (cela m'éviterai de démonter la carte :-) ? comme dis, matroxfb et le driver X mga te disent cela. Si tu veut tester par toi meme, tu peut faire un mmap de l'adresse du framebuffer, donne par lspci -v, et essayer d'ecrire a l'adresse correspondant a 17Mo. Ensuite, tu lis l'adresse correspondant a 1Mo (pour verifier qu'il n'y a pas de wrap-around) et a 17Mo. Si tu reussit a relire tes donnees a 17 Mo et que les donnes ne sont pas a 1Mo, alors tu a plus que 16Mo de memoire. Le fichier attache est deja un debut d'un tel outils. Amicalement, Sven Luther
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <sys/mman.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <errno.h> typedef int bool; #define FALSE (0) #define TRUE (!FALSE) static CARD8 * mapcfg() { CARD8 * base; int fd; if ((fd = open("/proc/bus/pci/01/00.0", O_RDONLY)) < 0) { printf ("failed to open /proc/bus/pci/01/00.0 (%s)\n", strerror(errno)); return NULL; } base = mmap((caddr_t)0, 10, PROT_READ, MAP_SHARED|MAP_LOCKED, fd, (off_t)10); close(fd); if (base == MAP_FAILED) { printf ("Could not mmap cfg area (%s) %d\n", strerror(errno), errno); return NULL; } return base; } static void unmapcfg (CARD8 * base) { munmap((caddr_t)base, 256); } static CARD8 * mapmem(unsigned long Base, unsigned long Size) { CARD8 * base; int fd; if ((fd = open("/dev/mem", O_RDWR)) < 0) { printf ("failed to open /dev/mem (%s)\n", strerror(errno)); return NULL; } base = mmap((caddr_t)0, Size, PROT_READ|PROT_WRITE, MAP_SHARED|MAP_LOCKED, fd, (off_t)Base); close(fd); if (base == MAP_FAILED) { printf ("Could not mmap memory" " (0x%08x,0x%x) (%s)\n", Base, Size, strerror(errno)); return NULL; } return base; } static void unmapmem (CARD8 * Base, unsigned long Size) { munmap((caddr_t)Base, Size); } int main () { char dummy; CARD8 * mmio; CARD8 * fb; mmio = mapmem (0xdeec0000, MMIO_SIZE); fb = mapmem (0xd8000000, FB_SIZE); if (fb) unmapmem (fb, FB_SIZE); if (mmio) unmapmem (mmio, MMIO_SIZE); }