当前位置: 主页 > 图像 >

VK-GL-CTS

时间:2025-05-07  作者:haden   点击:
【摘要】https://github.com/KhronosGroup/VK-GL-CTS# OverviewVK-GL-CTS 是一个图像API测试,包含了OpenGL, OpenGL ES, EGL, Vulkan和Wulkan SC。最开始是由dEQP(drawElements Quality Program)发起,现在由Khronos组织维护。Khronos Gr

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

Overview

VK-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-runner

glcTestRunnerMain[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进行具体测试

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)

测试注册

所有测试都通过glcTestPackageRegistry.cpp注册。主要继承自tcu::TestPackagetcu::TestCaseGrouptcu::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::TestPackagevkt::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()函数,执行具体测试。

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片