01 Oct 2019

fgl_glxgears kompilieren und Benchmarks durchführen

Sie kennen das: man braucht für Benchmark-Zwecke eben schnell das Programm fgl_glxgears, aber es ist momentan nicht auffindbar. So einfach ist die Lösung:

fgl_glxgears Screenshot

Die Datei fgl_glxgears.tar.gz herunterladen. Danach einfach

  • entpacken
bash-5.0$ tar -xvzf fgl_glxgears.tar.gz
fgl_glxgears/
fgl_glxgears/README
fgl_glxgears/Makefile.Linux
fgl_glxgears/glATI.h
fgl_glxgears/Imakefile
fgl_glxgears/fgl_glxgears.man
fgl_glxgears/fgl_glxgears.c
fgl_glxgears/wglATI.h
  • kompilieren

Es müssen mindestens folgende Programme und Bibliotheken installiert sein: gcc, make, libx11-dev, libgl-dev, libglu-dev

bash-5.0$ make -f Makefile.Linux
        gcc -o fgl_glxgears -Wall -g -I/usr/X11R6/include -L/usr/X11R6/lib -lGL -lGLU -lX11 -lm fgl_glxgears.c
fgl_glxgears.c: In function 'event_loop':
fgl_glxgears.c:1086:20: warning: variable 'r' set but not used [-Wunused-but-set-variable]
                int r, code;
  • und starten!
bash-5.0$ ./fgl_glxgears
Using GLX_SGIX_pbuffer
386 frames in 5.0 seconds = 77.200 FPS
  • Benchmarks
Kernel Processor Graphics Card FPS Anmerkung
Linux 4.4.0 32-Bit Intel Atom CPU N270 @ 1.60GHz Intel Mobile 945GSE 44  
Linux 4.4.164 64-Bit AuthenticAMD E-350 @ 1.60GHz ATI Wrestler Radeon HD 6310 77 ATI fglrx driver
Linux 5.3.1 64-Bit Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz Intel HD Graphics 5500 60  
Linux 5.3.1 64-Bit Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz NVIDIA GeForce GTX 950M 1700 Nvidia Driver
Linux 5.0.0 64-Bit AMD FX(tm)-4300 Quad-Core @ 2.20GHz NVIDIA GeForce GTX 560 60 Xorg Nouveau Driver
Linux 4.4.164 65-Bit AMD FX(tm)-6300 Six-Core @ 3.5GHz AMD/ATI RS780L [Radeon 3000] 60 Xorg Radeon Driver

Dies taugt wohl nicht als Benchmark. Es zeigt, ob das VSYNC aktiv ist. Vorausgesetzt, die Grafikkarte ist schnell genug, sollten hier immer 60 Frames pro Sekunde stehen. Wenn es mehr ist, geht der Sync nicht. Hier ist noch weitere Forschung nötig.

  • Ist direct Rendering aktiv?

Wenn nur Software Rendering aktiv ist, hat man eine schlechte Framerate.

chrissie@pc ~ $ glxinfo|grep rendering
direct rendering: Yes
  • Erhält man diese Fehlermeldung:
X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  72 (X_PutImage)
  Serial number of failed request:  59
  Current serial number in output stream:  68

Dann hat man z. B. die falsche Pixel-Tiefe eingestellt, z. B. 16 statt 32. Einfach ein bisschen rumspielen. Garantie auf das Programm gebe ich sowieso wie immer keine!



  • Es kann beim kompilieren grundsätzlich folgende Fehlermeldung auftreten, so war es auch hier zuerst
    gcc -o fgl_glxgears -Wall -g -I/usr/X11R6/include -L/usr/X11R6/lib -lGL -lGLU -lX11 -lm fgl_glxgears.c
    fgl_glxgears.c: In function \xe2\x80\x98event_loop\xe2\x80\x99:
    fgl_glxgears.c:1086:20: warning: variable \xe2\x80\x98r\xe2\x80\x99 set but not used [-Wunused-but-set-variable]
                  int r, code;
                      ^
    /tmp/cc5UAIuF.o: In function `gear':
    ~/fgl_glxgears/fgl_glxgears.c:200: undefined reference to `glShadeModel'
    ~/fgl_glxgears/fgl_glxgears.c:202: undefined reference to `glNormal3f'
    ~/fgl_glxgears/fgl_glxgears.c:205: undefined reference to `glBegin'
    ~/fgl_glxgears/fgl_glxgears.c:208: undefined reference to `sin'
    [...]
    ~/fgl_glxgears/fgl_glxgears.c:1314: undefined reference to `glXDestroyContext'
    ~/fgl_glxgears/fgl_glxgears.c:1315: undefined reference to `glXDestroyPbuffer'
    ~/fgl_glxgears/fgl_glxgears.c:1325: undefined reference to `glXDestroyContext'
    ~/fgl_glxgears/fgl_glxgears.c:1326: undefined reference to `XDestroyWindow'
    ~/fgl_glxgears/fgl_glxgears.c:1328: undefined reference to `XCloseDisplay'
    collect2: error: ld returned 1 exit status
    Makefile.Linux:3: recipe for target 'fgl_glxgears' failed
    make: *** [fgl_glxgears] Error 1
    

Das liegt daran, weil zumindest bei einigen gcc-Versionen die Linker-Flags nach dem C-file stehen müssen. Ich habe das jetzt geändert.