Mesa sources may have already been patched to provide a couple of the utilities, the outcome of running without GPU support is as expected:
make -C xdemos install
debian@arm:~$ glxgears -info
GL_RENDERER = Software Rasterizer
GL_VERSION = 2.1 Mesa 9.2.0
GL_VENDOR = Mesa Project
debian@arm:~$ glxinfo
name of display: :0.0
Error: couldn't find RGB GLX visual or fbconfig
$ es2gears_x11 -info
libEGL warning: DRI2: failed to authenticate
EGL_VERSION = 1.4 (DRI2)
EGL_VENDOR = Mesa Project
EGL_EXTENSIONS = EGL_KHR_surfaceless_context
EGL_CLIENT_APIS = OpenGL OpenGL_ES OpenGL_ES2 OpenGL_ES3
vertex shader info:
fragment shader info:
info:
159 frames in 5.0 seconds = 31.699 FPS
mesa-demos-8.2.0
The complete mesa-demos package will provide es2_gears among other things.
wget http://downloads.sourceforge.net/project/glew/glew/1.11.0/glew-1.11.0.tgz
make install GLEW_PREFIX=$PREFIX GLEW_DEST=$PREFIX
curl -O ftp://ftp.freedesktop.org/pub/mesa/glu/glu-9.0.0.tar.bz2
./configure --prefix=$PREFIX --disable-static && make
./configure $XORG_CONFIG && make
Be sure to have the prerequisites installed, otherwise there will be trouble:
mesa-demos reports "Package 'glu', required by 'glew', not found"
glew reports missing "glu-9.0.0" ... install from LFS:
Without GPU, es2gears is pretty un-remarkable, but getting through the build is a sign of good things to come:
~$ es2gears_x11
libEGL warning: DRI2: failed to authenticate
EGL_VERSION = 1.4 (DRI2)
vertex shader info:
fragment shader info:
info:
157 frames in 5.0 seconds = 31.207 FPS
glmark2
apt-get install libjpeg-dev
# Retrieve glmark2 source:
git clone https://github.com/glmark2/glmark2.git
git clone https://github.com/glmark2/glmark2.git
# glmark has it's own configuration utility:
./waf configure --with-flavors=x11-gl,x11-glesv2 # drm-gl,drm-glesv2# CPLUS_INCLUDE_PATH should already be set in the building shell environment, but must be forced to suppress error on src/libmatrix/program.cc:
CPLUS_INCLUDE_PATH=$PREFIX/include:$CPLUS_INCLUDE_PATH ./waf build -v
Checking for 'x11' : yes
Checking for 'gl' : yes
Checking for 'egl' : yes
Checking for 'glesv2' : yes
Checking for 'libdrm' : yes
Checking for 'gbm' : yes
If everything has built correctly at this time, check the utilities against the FBDEV (non-GPU) driver, or skip ahead to enable GPU support on the system.
waf will automatically enable/disable features depending upon the installed Mesa configuration that it detects. I suspect that the Debian Mesa package may not enable gles ... this is what my working configuration ends up looking like:
# Note Mesa-9.2.0 configure line (more detail on Mesa configuration below):
autoreconf -fi &&./configure CFLAGS="-O2" CXXFLAGS="-O2" \
--prefix=$XORG_PREFIX \
--sysconfdir=/etc \
--with-dri-drivers=swrast \
--disable-gallium-egl --disable-gallium-llvm \
--disable-gallium-gbm \
--with-gallium-drivers="" \
--enable-gles2 \
--disable-gles1 \
--enable-gbm # auto?
# result of Mesa-9.2.0 configuration from above:
prefix: /usr/local
exec_prefix: ${prefix}
libdir: ${exec_prefix}/lib
includedir: ${prefix}/include
OpenGL: yes (ES1: no ES2: yes)
OpenVG: no
OSMesa: no
DRI drivers: swrast
DRI driver dir: ${libdir}/dri
GLX: DRI-based
EGL: yes
EGL platforms: x11
EGL drivers: builtin:egl_glx builtin:egl_dri2
llvm: no
Gallium: no
Shared libs: yes
Static libs: no
Shared-glapi: yes
CFLAGS: -O2 -Wall -std=c99 -Werror=implicit-function-declaration -Werror=missing-prototypes -fno-strict-aliasing -fno-builtin-memcmp
CXXFLAGS: -O2 -Wall -fno-strict-aliasing -fno-builtin-memcmp
Macros: -D_GNU_SOURCE -DHAVE_PTHREAD -DHAVE_DLOPEN -DHAVE_POSIX_MEMALIGN -DGLX_INDIRECT_RENDERING -DGLX_DIRECT_RENDERING -DUSE_EXTERNAL_DXTN_LIB=1 -DHAVE_ALIAS -DHAVE_MINCORE -DHAVE_LIBUDEV
PYTHON2: python2
Run 'make' to build Mesa
autoreconf -fi &&
./configure CFLAGS="-O2" CXXFLAGS="-O2" \
--prefix=$XORG_PREFIX \
--sysconfdir=/etc \
--with-dri-drivers=swrast \
--disable-egl --disable-gbm \
--disable-gallium-egl --disable-gallium-llvm \
--disable-gallium-gbm \
--with-gallium-drivers="" \
--disable-shared-glapi \
--enable-glx
./waf configure --with-flavors=x11-gl
Should see something like this ...
Checking for 'x11' : yes
Checking for 'gl' : yes
Checking for 'egl' : not found
Checking for 'glesv2' : not found
Checking for 'libdrm' : yes
Checking for 'gbm' : not found
... and glmark2 should work:
GL_VENDOR: Mesa Project
GL_RENDERER: Software Rasterizer
GL_VERSION: 2.1 Mesa 9.2.0
Mesa must be configured with egl/gles in order for glmark-es2 to build:
./waf configure --with-flavors=x11-gl,x11-glesv2
Checking for 'x11' : yes
Checking for 'gl' : yes
Checking for 'egl' : yes
Checking for 'glesv2' : not found
# "--with-egl-platforms=x11,drm" automatically enabled?
autoreconf -fi &&
./configure CFLAGS="-O2" CXXFLAGS="-O2" \
--prefix=$XORG_PREFIX \
--sysconfdir=/etc \
--with-dri-drivers=swrast \
--disable-gbm \
--disable-gallium-egl --disable-gallium-llvm \
--disable-gallium-gbm \
--with-gallium-drivers="" \
--disable-shared-glapi \
--enable-gles2 --enable-egl
OpenVG: no
OSMesa: no
DRI drivers: swrast
DRI driver dir: ${libdir}/dri
GLX: DRI-based
EGL: yes
EGL platforms: x11
EGL drivers: builtin:egl_glx builtin:egl_dri2
Should now have libGLESv2.so.2:
Checking for 'x11' : yes
Checking for 'gl' : yes
Checking for 'egl' : yes
Checking for 'glesv2' : yes
Checking for 'libdrm' : yes
glapi is also required:
/opt/xorg/lib/libGLESv2.so: undefined reference to `_glapi_get_dispatch'
/opt/xorg/lib/libGLESv2.so: undefined reference to `_glapi_Dispatch'
autoreconf -fi &&
./configure CFLAGS="-O2" CXXFLAGS="-O2" \
--prefix=$XORG_PREFIX \
--sysconfdir=/etc \
--with-dri-drivers=swrast \
--disable-gbm \
--disable-gallium-egl --disable-gallium-llvm \
--disable-gallium-gbm \
--with-gallium-drivers="" \
--enable-gles2
# --disable-shared-glapi
Shared-glapi: yes
~$ glmark2
** GLX does not support GLX_EXT_swap_control or GLX_MESA_swap_control!
** Failed to set swap interval. Results may be bounded above by refresh rate.
=======================================================
glmark2 2014.03
=======================================================
OpenGL Information
GL_VENDOR: Mesa Project
GL_RENDERER: Software Rasterizer
GL_VERSION: 2.1 Mesa 9.2.0
=======================================================
** GLX does not support GLX_EXT_swap_control or GLX_MESA_swap_control!
** Failed to set swap interval. Results may be bounded above by refresh rate.
[build] use-vbo=false: FPS: 4 FrameTime: 250.000 ms
~$ glmark2-es2
libEGL warning: DRI2: failed to authenticate
=======================================================
glmark2 2014.03
=======================================================
OpenGL Information
GL_VENDOR: Mesa Project
GL_RENDERER: Software Rasterizer
GL_VERSION: OpenGL ES 2.0 Mesa 9.2.4
=======================================================
[build] use-vbo=false: FPS: 5 FrameTime: 200.000 ms
Mesa must be configured with "--enable-gbm" in order to get glmark-drm and glmark-es2-drm built.
Enabling GPU acceleration
The GPU-laced headers have to be in place for the Vivante EXA driver to build from source ... detailed steps are provided in this post. Some additional notes are below.
With the GPU blobs and headers installed to /usr, it's pretty likely to have overlaps with MesaLib installed to the X.org root, e.g.:
debian@arm:~/gpu-viv-bin-mx6q-3.10.17-1.0.2-hfp/usr$ for f in `find`; do [ -f $f ] && find /usr/local -name `echo $f | sed 's/.*\///'` ; done
/usr/local/lib/libEGL.so
/usr/local/lib/libGLESv2.so
/usr/local/lib/libGLESv2.so.2
/usr/local/lib/libGLESv2.so.2.0.0
/usr/local/lib/libGL.so
/usr/local/lib/libEGL.so.1
/usr/local/lib/libGL.so.1
/usr/local/include/EGL/eglplatform.h
/usr/local/include/EGL/eglext.h
/usr/local/include/EGL/egl.h
/usr/local/include/GLES2/gl2platform.h
/usr/local/include/GLES2/gl2.h
/usr/local/include/GLES2/gl2ext.h
/usr/local/include/KHR/khrplatform.h
/usr/local/include/GL/gl.h
/usr/local/include/EGL/egl.h
/usr/local/include/GL/glext.h
At a minimum, removing the following symlinks should allow the blob versions to get priority:
# With the GPU enabled blobs installed, the stock ones from installed Mesa need to be disabled from the X.org runtime environment (and again pretty much anytime ldconfig gets run on the system):
cd $PREFIX/lib
sudo rm libGL.so libGL.so.1 libGLESv2.so libGLESv2.so.2 libEGL.so libEGL.so.1 libGL.so.1
ldd glmark-es2 # etc. etc.
Before trying out X.org, it should be possible to run the frame-buffer benchmarks in opt/viv_samples/vdk/.
Finally, getting to the EXA driver:
~/Download/xserver-xorg-video-imx-viv-3.10.17-1.0.2
BUILD_HARD_VFP=1 XSERVER_GREATER_THAN_13=1 BUSID_HAS_NUMBER=1 ./fastbuild.sh sysroot=/usr/local # specify sysroot if not /usr
Depending upon the specific "$PREFIX" used for X.org, it may be necessary to patch up some include paths in EXA/src/makefile.linux, FslExt/src/makefile.linux, and util/autohdmi/makefile.linux e.g.:
~xserver-xorg-video-imx-viv-3.10.17-1.0.2$
~xserver-xorg-video-imx-viv-3.10.17-1.0.2$
for f in `find . -name makefile.linux`; do sed -e 's/(sysroot)\/usr/(sysroot)/g' -i $f; done
sed -e 's/\/drm/\/libdrm/' -i EXA/src/makefile.linux
# with pixman-1 installed from dpkg:
/usr/local/include/xorg/miscstruct.h:52:20: fatal error: pixman.h: No such file or directory
# fixup path to /usr/include/pixman-1/pixman.h in makefile
-I$(sysroot)/include/$(PIXMAN)
# Finally ...
sudo cp EXA/src/vivante_drv.so $PREFIX/lib/xorg/modules/drivers/
# don't forget to enable Vivante
# relink libraries for x11
switch_to_x11
:~$ LIBGL_DEBUG=verbose glxgears -info
libGL: OpenDriver: trying /usr/lib/dri/vivante_dri.so
drmOpenByBusid: Searching for BusID platform:Vivante GCCore:00
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 4, (OK)
drmOpenByBusid: drmOpenMinor returns 4
drmOpenByBusid: drmGetBusid reports platform:Vivante GCCore:00
GL_RENDERER = Vivante GC2000
GL_VERSION = 2.1 2.0.1
GL_VENDOR = Vivante Corporation
GL_EXTENSIONS = WGL_ARB_extensions_string WGL_EXT_extensions_string WGL_EXT_swap
_control GL_EXT_texture_env_add GL_ARB_multitexture GL_ARB_multisample GL_ARB_te
... ...
ltisample GL_EXT_texture_array GL_EXT_draw_buffers2 GL_EXT_texture_buffer_object
GL_EXT_draw_instanced GL_EXT_timer_query
VisualID 184, 0xb8
912 frames in 5.0 seconds = 182.398 FPS
libGL: OpenDriver: trying /usr/lib/dri/vivante_dri.so
drmOpenByBusid: Searching for BusID platform:Vivante GCCore:00
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 4, (OK)
drmOpenByBusid: drmOpenMinor returns 4
drmOpenByBusid: drmGetBusid reports platform:Vivante GCCore:00
GL_RENDERER = Vivante GC2000
GL_VERSION = 2.1 2.0.1
GL_VENDOR = Vivante Corporation
GL_EXTENSIONS = WGL_ARB_extensions_string WGL_EXT_extensions_string WGL_EXT_swap
_control GL_EXT_texture_env_add GL_ARB_multitexture GL_ARB_multisample GL_ARB_te
...
ltisample GL_EXT_texture_array GL_EXT_draw_buffers2 GL_EXT_texture_buffer_object
GL_EXT_draw_instanced GL_EXT_timer_query
VisualID 184, 0xb8
912 frames in 5.0 seconds = 182.398 FPS
~$ LIBGL_DEBUG=verbose es2gears_x11 -info
drmOpenByBusid: Searching for BusID platform:Vivante GCCore:00
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 5, (OK)
drmOpenByBusid: drmOpenMinor returns 5
drmOpenByBusid: drmGetBusid reports platform:Vivante GCCore:00
EGL_VERSION = 1.4
EGL_VENDOR = Vivante Corporation
EGL_EXTENSIONS = EGL_KHR_reusable_sync EGL_KHR_fence_sync EGL_KHR_image EGL_KHR_
image_base EGL_KHR_image_pixmap EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_c
ubemap_image EGL_KHR_gl_renderbuffer_image EGL_KHR_lock_surface
EGL_CLIENT_APIS = OpenGL_ES OpenVG
vertex shader info:
fragment shader info:
info:
853 frames in 5.0 seconds = 170.566 FPS
drmOpenByBusid: Searching for BusID platform:Vivante GCCore:00
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 5, (OK)
drmOpenByBusid: drmOpenMinor returns 5
drmOpenByBusid: drmGetBusid reports platform:Vivante GCCore:00
EGL_VERSION = 1.4
EGL_VENDOR = Vivante Corporation
EGL_EXTENSIONS = EGL_KHR_reusable_sync EGL_KHR_fence_sync EGL_KHR_image EGL_KHR_
image_base EGL_KHR_image_pixmap EGL_KHR_gl_texture_2D_image EGL_KHR_gl_texture_c
ubemap_image EGL_KHR_gl_renderbuffer_image EGL_KHR_lock_surface
EGL_CLIENT_APIS = OpenGL_ES OpenVG
vertex shader info:
fragment shader info:
info:
853 frames in 5.0 seconds = 170.566 FPS
~$ LIBGL_DEBUG=verbose glmark2-es2
drmOpenByBusid: Searching for BusID platform:Vivante GCCore:00
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 5, (OK)
drmOpenByBusid: drmOpenMinor returns 5
drmOpenByBusid: drmGetBusid reports platform:Vivante GCCore:00
=======================================================
glmark2 2014.03
=======================================================
OpenGL Information
GL_VENDOR: Vivante Corporation
GL_RENDERER: Vivante GC2000
GL_VERSION: OpenGL ES 2.0
=======================================================
[build] use-vbo=false: FPS: 396 FrameTime: 2.525 ms
debian@arm:~$ glmark2-es2
=======================================================
glmark2 2014.03
=======================================================
OpenGL Information
GL_VENDOR: Vivante Corporation
GL_RENDERER: Vivante GC2000
GL_VERSION: OpenGL ES 2.0
=======================================================
[build] use-vbo=false:
[loop] fragment-steps=5:fragment-uniform=true:vertex-steps=5: FPS: 253 FrameTime: 3.953 ms
=======================================================
glmark2 Score: 252
=======================================================
[xcb] Unknown sequence number while appending request
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
glmark2-es2: ../../src/xcb_io.c:161: append_pending_request: Assertion `!xcb_xlib_unknown_seq_number' failed.
Aborted
~$
Latest results running on 3.10.31 series, the update to "OpenGL ES 3.0" is seen.
LIBGL_DEBUG=verbose glmark2-es2
drmOpenByBusid: Searching for BusID platform:Vivante GCCore:00
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 5, (OK)
drmOpenByBusid: drmOpenMinor returns 5
drmOpenByBusid: drmGetBusid reports platform:Vivante GCCore:00
=======================================================
glmark2 2014.03
=======================================================
OpenGL Information
GL_VENDOR: Vivante Corporation
GL_RENDERER: Vivante GC2000
GL_VERSION: OpenGL ES 3.0 V5.0.11.p1.19959
=======================================================
[build] use-vbo=false: FPS: 399 FrameTime: 2.506 ms
[build] use-vbo=true:^C
glxgears slower?
debian@arm:~$ LIBGL_DEBUG=verbose glxgears -info
libGL: OpenDriver: trying /usr/lib/dri/vivante_dri.so
drmOpenByBusid: Searching for BusID platform:Vivante GCCore:00
drmOpenDevice: node name is /dev/dri/card0
drmOpenDevice: open result is 4, (OK)
drmOpenByBusid: drmOpenMinor returns 4
drmOpenByBusid: drmGetBusid reports platform:Vivante GCCore:00
GL_RENDERER = Vivante GC2000
GL_VERSION = 2.1 2.0.1
GL_VENDOR = Vivante Corporation
GL_EXTENSIONS = WGL_ARB_extensions_string WGL_EXT_extensions_string WGL_EXT_swap_control GL_EXT_texture_env_add GL_ARB_multitexture GL_ARB_multisample GL_ARB_texture_env_add GL_ARB_texture_compression GL_ARB_texture_env_combine GL_ARB_depth_texture GL_ARB_window_pos GL_ARB_vertex_buffer_object GL_ARB_imaging GL_EXT_framebuffer_object GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_texture_array GL_EXT_draw_buffers2 GL_EXT_texture_buffer_object GL_EXT_draw_instanced GL_EXT_timer_query
VisualID 191, 0xbf
757 frames in 5.0 seconds = 151.342 FPS
742 frames in 5.0 seconds = 148.313 FPS
^CProcess termination by interupt!
No comments:
Post a Comment