TV-box: Armbian Tanix TX6 (Allwinner H6)バージョンのグラフィックス周りの調整

ビデオ周りが遅いので改善してみることにしました。まず、mali-midgard-dkmsをインストールしてみましたがビルドできません。LibreELECではビルドできているのでこれはおかしいと思い、LibreELECリポジトリからビルドしてみました。

cd /usr/src
PKG_VERSION="fe58463f54e3d8b204bae7e0292a054f583cc0f7"
PKG_URL="https://github.com/LibreELEC/mali-midgard/archive/${PKG_VERSION}.tar.gz"
wget $PKG_URL
tar xzvf ${PKG_VERSION}.tar.gz
cd /usr/src/mali-midgard-fe58463f54e3d8b204bae7e0292a054f583cc0f7/driver/product/kernel/drivers/gpu/arm/midgard

nano /usr/src/linux-headers-5.3.9-sunxi64/include/generated/utsrelease.h 
#define UTS_RELEASE "5.3.9-sunxi64"

find . -name Kbuild -exec sed -i 's/mali_kbase.o/mali_midgard.o/g; s/mali_kbase-/mali_midgard-/g' {} \;
make -C /lib/modules/5.3.9-sunxi64/build M=/usr/src/mali-midgard-fe58463f54e3d8b204bae7e0292a054f583cc0f7/driver/product/kernel/drivers/gpu/arm/midgard CONFIG_MALI_MIDGARD=m CONFIG_MALI_PLATFORM_NAME=sunxi

カーネルモジュールができたら/lib/modules配下の適当なディレクトリにおいてdepmodを実行します。リブートしてdmesgでカーネルモージュールが正しくロードできたか確認します。つぎにユーザランドのドライバーをインストールするのですが、mali-t76x-fbdev-driverをインストールしたらarmhfバージョンしかありません。ということはアプリケーションを全部、armhfに入れ替えないといけないことで、大変な作業になってしまします。できるかどうかもわからずにそれをやる気力もないので、armbianのフォーラムでgl4esを使った方法があるので試してみました。インストール方法は次のフォーラムのスレッドに書かれています。

あまり速くなった気はしないのですが一応は動いているようです。

LD_LIBRARY_PATH=/opt/gl4es LIBGL_FB=3 glmark2 
LIBGL: Initialising gl4es
LIBGL: v1.1.3 built on Nov 19 2019 08:55:42
LIBGL: using pbuffer
LIBGL: Using GLES 2.0 backend
LIBGL: loaded: libGLESv2.so
LIBGL: loaded: libEGL.so
LIBGL: Using GLES 2.0 backend
libEGL warning: DRI2: failed to authenticate
LIBGL: Hardware Full NPOT detected and used
LIBGL: Extension GL_EXT_blend_minmax detected and used
LIBGL: FBO are in core, and so used
LIBGL: PointSprite are in core, and so used
LIBGL: CubeMap are in core, and so used
LIBGL: BlendColor is in core, and so used
LIBGL: Blend Substract is in core, and so used
LIBGL: Blend Function and Equation Separation is in core, and so used
LIBGL: Texture Mirrored Repeat is in core, and so used
LIBGL: Extension GL_OES_mapbuffer detected
LIBGL: Extension GL_OES_element_index_uint detected and used
LIBGL: Extension GL_OES_packed_depth_stencil detected and used
LIBGL: Extension GL_OES_depth24 detected and used
LIBGL: Extension GL_OES_rgb8_rgba8 detected and used
LIBGL: Extension GL_EXT_multi_draw_arrays detected
LIBGL: Extension GL_EXT_texture_format_BGRA8888 detected and used
LIBGL: Extension GL_OES_depth_texture detected and used
LIBGL: Extension GL_OES_texture_stencil8 detected and used
LIBGL: Extension GL_EXT_texture_rg detected and used
LIBGL: Extension GL_OES_texture_float detected and used
LIBGL: Extension GL_OES_texture_half_float detected and used
LIBGL: Extension GL_EXT_color_buffer_float detected and used
LIBGL: high precision float in fragment shader available and used
LIBGL: Extension GL_EXT_frag_depth detected and used
LIBGL: Max vertex attrib: 16
LIBGL: Extension GL_OES_standard_derivatives detected and used
LIBGL: Extension GL_OES_get_program detected and used
LIBGL: Number of supported Program Binary Format: 0
LIBGL: Max texture size: 8192
LIBGL: Max Varying Vector: 32
LIBGL: Texture Units: 8(8), Max lights: 8, Max planes: 6
LIBGL: Hardware vendor is VMware, Inc.
LIBGL: GLSL 300 es supported and used
LIBGL: sRGB surface supported
LIBGL: Targeting OpenGL 2.0
LIBGL: Not trying to batch small subsequent glDrawXXXX
LIBGL: try to use VBO
LIBGL: Current folder is:/home/shiva
libEGL warning: DRI2: failed to authenticate
LIBGL: Warning, Swap Interval 0 is out of possible values 1, 1
** Failed to set swap interval. Results may be bounded above by refresh rate.
=======================================================
    glmark2 2014.03+git20150611.fa71af2d
=======================================================
    OpenGL Information
    GL_VENDOR:     ptitSeb
    GL_RENDERER:   GL4ES wrapper
    GL_VERSION:    2.0 gl4es wrapper 1.1.3
=======================================================
LIBGL: Warning, Swap Interval 0 is out of possible values 1, 1
** Failed to set swap interval. Results may be bounded above by refresh rate.
[build] use-vbo=false: FPS: 21 FrameTime: 47.619 ms
LIBGL: Warning, Swap Interval 0 is out of possible values 1, 1
** Failed to set swap interval. Results may be bounded above by refresh rate.
[build] use-vbo=true: FPS: 20 FrameTime: 50.000 ms
=======================================================
                                  glmark2 Score: 20 
=======================================================
LIBGL: Shuting down

来月ごろにarmbianでカーネル5.4がリリースされて、それに合わせてpanfrostが使えるようになるらしいのですが、リリースされたら試してみる予定です。

リトライ

前回のケースではmali fbdev blobがなかったので意味がありませんでした。そこでmali fbdev blobを検索してそれらしいものを見つけてインストールしてみました。

/usr/lib/aarch64-linux-gnuにあるlibEGL.so.1、libGLESv1_CM.so、libGLESv2.soを置き換えます。そしてLIBGL_FB=3をつけてアプリケーションを起動します。vlcは立ち上がらないですがmpvが720pできれいに動きます。1K、4Kはコマ落ちでだめでした。

rss-glx:lattice