1.概述
CTS是一套开源测试套件,可以实现对OpenGL、ES、OpenCL、Vulkan的兼容性测试。OpenGL ES CTS的测试集,其测试用例涵盖了各种OpenGL ES 的功能和特性。这些功能包括着色器编译和链接、图元绘制、纹理操作、帧缓冲操作、深度测试、模板测试以及其他一些图形渲染相关的功能。通过执行这些测试用例,可以验证OpenGL ES实现在各种情况下的正确性和一致性。
2.套件安装
从OpenGL ES官方网站上下载最新的CTS测试套件源码。网址为
GitHub - KhronosGroup/VK-GL-CTS: Khronos Vulkan, OpenGL, and OpenGL ES Conformance Tests
源码目录如上图。还需要下载依赖的外部库源码和测试case,依赖zlib, libpng, glslang, spirv-headers, spirv-tools,renderdoc。
在external目录下执行python fetch_sources.py。可能下载失败,需要科学上网。
3.套件内容
· data:测试数据,提供测试图片和测试shader参数;
· execserver:测试服务程序,主要为android和ios平台测试框架提供;
· executor:测试基础程序,测试框架的基础实现,可视作自定义测试框架基础。
· external:依赖的外部库源码和测试case
· framework:测试框架,包括测试套装和case的实现框架,wrapper。
· modules:测试目标模块的case
· scrpits:针对不同平台的编译脚本
· targets:编译脚本目录
4.测试套件适配
添加自定义的目标文件:targets/*/*.cmake。
根据需要配置这个文件。*文件名即为目标文件。
5.套件编译
使用cmake构建,需要安装cmake: sudo apt install cmake。
注意这里的cmake版本最好在3.20以上。
cmake 编译有两个选项:
这里使用自定义的构建目标*,在targets/*/*.cmake文件中定义构建参数。
在cts目录下执行编译步骤如下:
1、cmake ./ -DDEQP_TARGET=* -DGLCTS_GTF_TARGET=gles32 2、cmake --build external/openglcts |
编译根据CMakeList.txt执行。其内部过程如下:
1、编译external里的第三方库,如glslang,spirv-tools,amber等; 2、编译framework里的delibs,如debase,depool等,相当于自己实现的基础库函数以避免对不同平台的依赖; 3、编译execserver和executor,测试框架的基础库 4、编译全部framework,modules,framework主要是针对不同的平台开发的平台适配内容,即为实现接口测试而需要的基础适配代码;modules是针对不同版本gl库开发的接口测试用例; 5、最后编译external/openglcts,生成测试对应的可执行文件 cts-runner 和 glcts 。 |
6.测试流程
cts支持的测试有:
ES: es2, es3, es31, es32;
GL: gl30, gl31, gl32, gl33, gl40, gl41, gl42, gl43, gl44, gl45, gl46。
测试程序生成在external/openglcts/modules目录下。包含glcts(用例级测试)
和cts-runner(套装级测试)二个测试程序。
这里的测试使用的是opengl es。
测试指令参考如下:
1、./glcts --deqp-case=dEQP-GLES2.info.* 2、./cts-runner --type=es32 --logdir=./ |
--logdir=./表示在当前目录生成log文件。
如果是使用用例测试glcts,使用./glcts -h查看支持的参数。
7.测试结果
测试结果默认输出在external/openglcts/modules目录下。文件如下图所示。
log.txt中时运行的log信息记录。
cts-run-summary.xml是qpa的汇总文件,包含每一个testcase的结果路径,每个testcase的结果存在相应的qpa文件中。
8.测试结果分析
套件中还提供了一些工具来辅助分析结果。
在scripts/log/目录下提供了以下python工具:
参考资料:
VK-GL-CTS 初步了解 - 简书 (jianshu.com)
VK-GL-CTS(一)环境配置 - 简书 (jianshu.com)
VK-GL-CTS(二) - 简书 (jianshu.com)