1 CTS
OpenGL and OpenGL ES 2.0/3.X CTS (Conformance Test Suite,一致性测试集合)是Khronos开发的一套测试集合,可用于开放标准Vulkan、OpenCL、OpenGL、OpenGLES等的测试,也是验证API的实现是否支持的官方标准。
1.1 获取源码
git clone https://github.com/KhronosGroup/VK-GL-CTS.git
下载的CTS需要下载第三方软件,可以通过运行脚本获取:
python external/fetch_sources.py
1.2 编译
mkdir -p build ; cd build
cmake ../ -DDEQP_TARGET=x11_glx -DGLCTS_GTF_TARGET=gl
cmake --build .
1.3 运行
编译好的程序在external/openglcts/modules路径下,运行如下
./cts-runner --type=gl45 # 其中参数--type指定需要运行的OpenGL 版本
运行时间较长,等运行结束。
调试的时候需要运行单个case,可以使用glcts单独运行case或者caselist。
使用如下:
./glcts.exe --deqp-case=KHR-GLES3.shaders.loops
1.4 查看结果
CTS执行完成之后会生成详细的Log文件,文件主要包含如下:
ctx-run-summary.xml:包含运行config的详细信息,以及运行的命令行参数
configs.qpa:是xml文件格式,记录整体CTS运行情况
config-xxx-.*.qpa:为每个具体config下测试用例的详细信息
2 Piglit
Piglit是用来测试OpenGL实现的自动化测试集合。它的目标是通过为开发人员提供执行回归测试的简单方法来帮助提高开源OpenGL驱动程序的质量。它包含Glean测试,一些从Mesa改编的测试以及一些针对某些bug的特定回归测试。
官方git仓库位于:git://anongit.freedesktop.org/git/piglit
2.1 获取源码
git clone https://gitlab.freedesktop.org/mesa/piglit.git
2.2 编译
piglit运行的脚本在piglit项目top路径下,所以cmake需要在top路径下运行。
cmake . make-j8
2.3 运行
运行测试使用如下命令:
./piglit run sanity results/sanity
其中sanity是指定运行的测试集,results/sanity指定结果存放路径。
piglit中有如下的测试集:
OpenGL 测试集
sanity.py:包含最少的OpenGL健全性测试。这些测试必须通过,否则其他测试将不会生成可靠的结果。
all.py:包含所有OpenGL测试。
quick.py:运行所有测试,但大大减少了它们的运行时间
gpu.py:从quick.py进一步减少了一组测试,该测试仅针对硬件功能运行测试,而不针对软件堆栈运行测试
llvmpipe.py:减少了gpu.py的一组测试,删除了使用llvmpipe有问题的测试
cpu.py:此配置文件运行不会影响gpu的测试,换句话说,quick.py中所有不是gpu.py运行的测试
glslparser.py:仅运行all.py中的glslparser测试
shader.py:仅运行all.py中着色器测试
no_error.py :测试列表的修改版本以khr_no_error变体形式运行
OpenCL 测试集
cl.py:包含所有OpenCL测试。
quick_cl.py:这将运行cl.py中的所有测试以及opencv和oclconform中的测试。
Vulkan 测试集
vulkan.py:包含所有Vulkan测试。
2.4 查看结果
查看上面测试生成的结果使用如下命令:
./piglit summary html summary/sanity results/sanity
将会在summary/sanity/目录下生成一个结果的html文件:
firefox summary/sanity/index.html
测试结果会包含的状态如下:
pass: 表示测试成功完成
warn: 测试成功完成,但是发生了意外情况。可以查看详细信息以获取更多信息
fail: 表示测试失败
crash: 表示测试用例的二进制退出码为非0
skip: 表示测试跳过
timeout: 表示测试超时并被强制杀死