uos 1070 里的 gcc 太旧了,需要安装 clang-13,然后更新软链。还需要安装 libc++abi-13,不能碰任何 gcc 的东西。

sudo apt install libwayland-dev wayland-protocols cmake ninja-build clang-13 libc++1-13 libc++-13-dev libc++abi1-13 libc++abi-13-dev 
sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-13 100
sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-13 100

拉取代码 https://github.com/KhronosGroup/VK-GL-CTS/

git clone https://github.com/KhronosGroup/VK-GL-CTS/

拉完代码以后,还需要执行脚本把依赖项都拉去了。

python3 external/fetch_sources.py

同时还需要在系统里安装 python3-lxml。

更新完所有依赖后,我只需要 deqp-vk 这一个 target,而 khronosGroup 给 VK-GL-CTS 提供了 SELECTED_BUILD_TARGETS 变量。

cmake -B build -GNinja \
-DSELECTED_BUILD_TARGETS=deqp-vk \
-DCMAKE_BUILD_TYPE=Debug \
-DCMAKE_CXX_STANDARD=17 \
-DCMAKE_CXX_STANDARD_REQUIRED=ON \
-DCMAKE_CXX_EXTENSIONS=OFF \
-DCMAKE_CXX_FLAGS="-stdlib=libc++" \
-DCMAKE_EXE_LINKER_FLAGS="-lstdc++fs" \
-DCMAKE_SHARED_LINKER_FLAGS="-lstdc++fs" \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++

就可以完成构建系统的准备。之后就可以正常构建了,大概需要编译 1331 个单元,

cmake --build build --target deqp-vk

等构建完成后,使用华为提供的测试命令执行测试。

./build/external/vulkancts/modules/vulkan/deqp-vk --deqp-case=dEQP-VK.wsi.wayland.swapchain.render.10swapchains

运行前最好使用 vulkaninfo 测试一下 vulkan 信息。如果没有成功运行,安装一下 mesa-vulkan-drivers。

sudo apt install mesa-vulkan-drivers

会看到通过了 case。

❯ ./build/external/vulkancts/modules/vulkan/deqp-vk --deqp-case=dEQP-VK.wsi.wayland.swapchain.render.10swapchains
Writing test log into TestResults.qpa
dEQP Core vulkan-cts-1.4.1.0-93-g7655439d7333848a59d3114ee6227a26259b2b4b (0x7655439d) starting..
target implementation = 'Default'
B%<-------- Process name: deqp-vk. Logging ended at: Fri Dec 27 15:52:34 2024

Test case 'dEQP-VK.wsi.wayland.swapchain.render.10swapchains'..
?%<-------- Process name: deqp-vk. Logging ended at: Fri Dec 27 15:52:37 2024

Pass (Rendering tests succeeded)
<-------- Process name: deqp-vk. Logging ended at: Fri Dec 27 15:52:37 2024

DONE!

Test run totals:
Passed: 1/1 (100.0%)
Failed: 0/1 (0.0%)
Not supported: 0/1 (0.0%)
Warnings: 0/1 (0.0%)
Waived: 0/1 (0.0%)