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_trex、gl_egypt、gl_4、gl_5_high、gl_5_normal、gl_tess - 低层微基准:
gl_alu、gl_alu2、gl_blending、gl_driver、gl_driver2、gl_fill、gl_fill2 - 专项:
gl_manhattan31_battery、gl_trex_battery、gl_trex_qmatch、gl_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.h 有 POCO_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)

