https://github.com/KhronosGroup/VK-GL-CTS
OverviewVK-GL-CTS 是一个图像API测试,包含了OpenGL, OpenGL ES, EGL, Vulkan和Wulkan SC。最开始是由dEQP(drawElements Quality Program)发起,现在由Khronos组织维护。 Khronos Group团队成立于 2000 年 1 月,由包括 3Dlabs, ATI, Discreet, Evans & Sutherland, Intel, Nvidia, SGI 和 Sun Microsystems 在内的多家国际知名多媒体行业领导者创立,致力于发展开放标准的应用程序接口 API ,以实现在多种平台和终端设备上的富媒体创作、加速和回放。 OpenGL和Vulkan目前都由该组织维护。
目录结构.
├── Android.mk
├── AndroidGen.mk
├── CMakeLists.txt
├── CODE_OF_CONDUCT.md
├── LICENSE
├── MODULE_LICENSE_APACHE2
├── NOTICE
├── OWNERS
├── README.md
├── android
├── data
├── doc
├── execserver
├── executor
├── external
├── framework
├── modules
├── scripts
└── targets
结构说明
- data:测试数据,提供测试图片和测试shader参数;
- execserver:测试服务程序,主要为android和ios平台测试框架提供;
- executor:测试基础程序,测试框架的基础实现,可视作自定义测试框架基础。
- external:依赖的外部库源码和测试case
- framework[^移植]:测试框架,包括测试套装和case的实现框架,wrapper。
- modules:测试目标模块的case
- scrpits:针对不同平台的编译脚本
- targets[^移植]:编译脚本目录
编译git clone https://github.com/KhronosGroup/VK-GL-CTS.git
# download source for zlib, libpng, glslang, spirv-headers and spirv-tools
python external/fetch_sources.py
mkdir build
cd build
cmake .. -DDEQP_TARGET=x11_egl
# for debug
# cmake .. -DDEQP_TARGET=x11_egl -DCMAKE_BUILD_TYPE=Debug
cmake --build external/openglcts
# or
# make -j20
-DDEQP_TARGET :依赖目标,如android,default,iOS,null,osx,raspi,curfaceless,vulkan_headless,wayland,x11_egl,x11_egl_glx,x11_glx
-DCLSTS_GTF_TARGET :测试对象,如gles2,gles3,gles31,gles32和gl
OpenGL CTS测试./cts-runner --type=gl45 (套装级测试)
./glcts --deqp-case=dEQP-GLES2.info.* (用例级测试)
./glcts --deqp-runmod=xml-caselist (打印所有测试用例)
框架详解cts-runnerglcTestRunnerMain[cts-runner] -->main(main)
main --> platform(Platform)
main --> glcTestRunner.cpp(TestRunner)
glcTestRunner.cpp(TestRunner) --> init --> |--type| getDefaultConfigList
init --> |--type| getTestRunParam
glcTestRunner.cpp(TestRunner) --> initSession --> createSession --> tcuApp(createApp) --> tcuTestPackage.cpp(TestPackageRegistry)
glcTestRunner.cpp(TestRunner) --> iterateSession --> glcTestRunner(RunSession.iterate) --> tcuApp.cpp(App.iterate)
cts-runner根据参数里的—type初始化对应的配置文件和运行参数,然后生成 tcuAPP,根据注册的TestPackage进行具体测试
glctstcu::Main[glcts] -->tcu::App(App)
tcu::App(App) --> TestPackageRegistry(TestPackageRoot)
--> tcu::TestSessionExecutor(caseListFilter)
tcu::App(iterate) --> TestSessionExecutor(iterate)
STATE_TRAVERSE_HIERARCHY --> TestSessionExecutor(enterTestCase) --> TestCaseExecutor(init)
STATE_EXECUTE_TEST_CASE --> tcu::TestSessionExecutor(iterateTestCase) --> tcu::TestCaseExecutor(iterate)
测试注册所有测试都通过glcTestPackageRegistry.cpp注册。主要继承自tcu::TestPackage ,tcu::TestCaseGroup 和tcu::TestCase 。
init() 函数完成测试用例的注册,在主函数迭代执行的时候依次调用注册。
iterate() 函数是具体的测试用例执行代码。 tcu::App初始化时创建m_testRoot = new TestPackageRoot() ,在tcu::App::iterate() 迭代执行的时候,调用TestSessionExecutor::iterate ,根据状态选择。
STATE_TRAVERSE_HIERARCHY 时,TestSessionExecutor::enterTestCase() 调用init() 函数,完成测试用例注册。
STATE_EXECUTE_TEST_CASE 时,TestSessionExecutor::iterateTestCase() 调用iterate() 函数,执行具体测试。
Vulkan CTS测试./deqp-vk
./deqp-vksc
./deqp-vk --deqp-runmod=xml-caselist (打印所有测试用例)
框架详解Vulkan和Vulkan SC(safety-critical)都是由Khronos Group开发的图形API。Vulkan SC是Vulkan的一个专门版本,专为需要高可靠性和可预测性的安全关键系统设计,如航空电子、汽车和医疗设备。
deqp-vk和glcts类似
tcu::Main[glcts] -->tcu::App(App)
tcu::App(App) --> TestPackageRegistry(TestPackageRoot)
--> tcu::TestSessionExecutor(caseListFilter)
tcu::App(iterate) --> TestSessionExecutor(iterate)
STATE_TRAVERSE_HIERARCHY --> TestSessionExecutor(enterTestCase) --> TestCaseExecutor(init)
STATE_EXECUTE_TEST_CASE --> tcu::TestSessionExecutor(iterateTestCase) --> tcu::TestCaseExecutor(iterate)
测试注册vk的测试通过vktTestPackageEnry.cpp注册,定义了tcu::TestPackageDescriptor g_vktPackageDescriptor("dEQP-VK", createTestPackage); 和tcu::TestPackageDescriptor g_vktExperimentalPackageDescriptor("dEQP-VK-experimental", createExperimentalTestPackage); 。 分别初始化了vkt::TestPackage 和 vkt::ExperimentalTestPackage 。 在vktTestPackage.cpp里分别实现TestPackage::Init() 和ExperimentalTestPackage::Init() ,具体完成testcase的注册。 在tcu::App::iterate() 迭代执行的时候,调用TestSessionExecutor::iterate ,根据状态选择。
STATE_TRAVERSE_HIERARCHY 时,TestSessionExecutor::enterTestCase() 调用init() 函数,完成测试用例注册。
STATE_EXECUTE_TEST_CASE 时,TestSessionExecutor::iterateTestCase() 调用iterate() 函数,执行具体测试。
|