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:
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.