GFXBench 5.1.5 移植到 SpacemiT K3 (riscv64) 构建指南

1. 上游来源

项目
项目 GFXBench 5(GL / GLES / Vulkan / Metal 图形基准测试)
仓库 GitHub - Kishonti-Opensource/gfxbench · GitHub
分支 main
上游 commit 89aa956f43836798d1eaaab8ec32d3dc8b02eead
源码包 SHA256 18f6daec9e88b245fa443cad16898bee4945e55d2210888870d432bd6295fa51
许可证 BSD-3-Clause(代码)/ CC BY 4.0(资产)

仓库含 3GB+ 测试数据,下载慢正常;git clone 超时就用网页 Download ZIP。

git clone https://github.com/Kishonti-Opensource/gfxbench.git
cd gfxbench && git checkout 89aa956f43836798d1eaaab8ec32d3dc8b02eead

2. 补丁

本地补丁共 6 个文件,+15/-8 行

类别 文件 改动
RISC-V 架构支持 3rdparty/poco/Foundation/include/Poco/Platform.h 新增 POCO_ARCH_RISCV + __riscv 检测分支
RISC-V 架构支持 3rdparty/poco/Foundation/src/utils.h double-conversion 白名单加入 defined(__riscv)
GCC 15 兼容 3rdparty/poco/Foundation/include/Poco/Delegate.h 删除两处对不存在成员 _pTarget 的赋值
CMake 4.x 兼容 3rdparty/glew/CMakeLists.txt cmake_minimum_required 2.8 → 3.5
CMake 4.x 兼容 frameworks/oglx/CMakeLists.txt cmake_minimum_required 3.0 → 3.5
CMake 4.x 兼容 frameworks/ngl/src/v1.0.3/loader/CMakeLists.txt cmake_minimum_required 2.8.11 → 3.5

补丁文件:附件压缩包中 gfxbench-riscv.patch

应用补丁(在源码根目录,两种方式均可):

patch -p1 < gfxbench-riscv.patch
# 或
git apply gfxbench-riscv.patch

若上游有更新导致偏移,改动类别是稳定的,按上表手动改即可。


3. 构建环境

项目
开发板 SpacemiT K3
系统 Bianbu 4.0.3 (riscv64)
桌面环境 LXQt,合成器 labwc (Wayland, wayland-0)
编译器 GCC 15.2.0(板子自带)
CMake 4.2.3(4.x 移除了对 cmake_minimum_required < 3.5 的兼容)
磁盘 预留 10GB
编译时长 全量约 30-60 分钟

安装依赖:

sudo apt-get install -y cmake ninja-build \
  libwayland-dev wayland-protocols libxkbcommon-dev libegl1-mesa-dev libgles2-mesa-dev \
  bison pkg-config libxinerama-dev libxcursor-dev libxrandr-dev libxi-dev \
  libglu1-mesa-dev xorg-dev swig python-is-python3

4. 构建

不需要先构建 XCB 基线——直接按 Wayland 变体构建即可(K3 显示栈是 labwc/Wayland)

4.1 3rdparty 依赖

cd gfxbench

export CFLAGS="-Wno-error=implicit-function-declaration -Wno-old-style-definition -Wno-int-conversion -Wno-incompatible-pointer-types"
export CXXFLAGS="-Wno-deprecated-declarations"
export PRODUCT_VERSION="5.1.5" PRODUCT_ID="gfxbench_gl"
export PLATFORM=linux CONFIG=Release

bash scripts/build-3rdparty.sh

CFLAGS 必须带:zlib 1.2.8(2013 年老代码)在 GCC 15 下 implicit declaration of 'lseek' 会被升级为 error,用 -Wno-error=implicit-function-declaration 关闭。

4.2 主程序(Wayland 变体)

export APPLICATION_TYPE=developer
export SKIP_PROJECT="cudaw"              # RISC-V 无 CUDA(build.sh 原生支持该变量)
export CMAKE_POLICY_VERSION_MINIMUM=3.5  # 兼容 CMake 4.x
export DISPLAY_PROTOCOL=WAYLAND          # 编译 Wayland 窗口路径
export USE_WAYLAND=true                  # 构建期自动生成 xdg-shell 协议
export OGLX_DRIVER=ES3                   # RENDER_API=ES31 (纯 GLES)
export OGLX_VARIANT=sys                  # 用系统 libEGL/libGLESv2

bash scripts/build.sh

产物:tfw-pkg/bin/testfw_app(约 6.3MB RISC-V ELF,测试全部静态链接)。

Wayland 支持是上游现成代码(hostapp/basic/CMakeLists.txt 的 xdg-shell 生成逻辑),
零代码改动。验证:ldd tfw-pkg/bin/testfw_app | grep wayland 应有
libwayland-client.so.0 / libwayland-egl.so.1


5. 部署与运行

# /root 是 0700 桌面用户进不去,必须放 /home
mkdir -p /home/bianbu/gfxbench-tfw
cp -r tfw-pkg/* /home/bianbu/gfxbench-tfw/
chown -R bianbu:bianbu /home/bianbu/gfxbench-tfw

cd /home/bianbu/gfxbench-tfw
# 窗口显示(受 vsync 锁 60fps,看画面用)
./bin/testfw_app -b . --gfx egl -w 1920 -h 1080 -t gl_manhattan31 --gl_api gles
# 离屏 pbuffer(不受 vsync 限制,跑分用)
./bin/testfw_app -b . --gfx eglpb -w 2560 -h 1440 -t gl_manhattan31 --gl_api gles

可用测试(16 个,均带数据):

  • 真实场景:gl_manhattan(ES 2.0)、gl_manhattan31(ES 3.1)、gl_trexgl_egyptgl_4gl_5_highgl_5_normalgl_tess
  • 低层微基准:gl_alugl_alu2gl_blendinggl_drivergl_driver2gl_fillgl_fill2
  • 专项:gl_manhattan31_batterygl_trex_batterygl_trex_qmatchgl_trex_qmatch_highp

注意:config 未写默认分辨率,必须显式 -w -h,否则报
width and height must be greater than zero (0, 0)


测试 模式 分辨率 fps score
gl_alu 离屏 512x512 11884 356520
gl_alu 离屏 1920x1080 1181 35420
gl_manhattan31 窗口 1920x1080 12.67 785.8
gl_manhattan31 离屏 2560x1440 6.99 433.1

6. 常见问题

现象 处理
Poco 报 #error "Unknown Hardware Architecture." 补丁未应用,检查 Platform.hPOCO_ARCH_RISCV
zlib 报 implicit declaration of 'lseek' 漏了 CFLAGS="-Wno-error=implicit-function-declaration"
cudaw 报 fatal error: cuda.h 漏了 SKIP_PROJECT="cudaw"
CMake 报 Compatibility with CMake < 3.5 has been removed 漏了 CMAKE_POLICY_VERSION_MINIMUM=3.5,或补丁未应用
--gfx egl 窗口模式 GLXBadFBConfig X11 路径(glfw)在 PowerVR 上不可用,用 Wayland 变体或 --gfx eglpb
窗口模式 fps 锁 60 vsync 正常现象,跑分用 --gfx eglpb 离屏

7. 附件

gfxbench-riscv-patch.zip (1.3 KB)

1 个赞

:index_pointing_at_the_viewer: :+1: :+1: :+1: