本文档介绍如何构建、移植和运行 OpenGL 和 OpenGL ES 2.0/3.X 一致性测试,以及如何验证和提交测试结果。
@[TOC]目录
一致性测试需要文件系统。文件系统需要支持长文件名(即 > 8.3 名称格式)。一致性测试中的源文件使用大小写混合的文件名。使用该 --verbose 选项时,渲染的图像和测试用例着色器将复制到日志文件中。这可能会导致相当大的日志文件,磁盘上最多有数百兆字节。
每次执行一致性测试时,都会将文本格式的结果日志写入磁盘。您需要将此日志作为一致性提交包的一部分包含在内。
一致性测试可执行文件可能很大。编译器选项和 CPU 指令集可能会导致很大的变化。构建所需的磁盘空间(包括所有临时文件)最多可达 400MB。
构建环境应支持 C++(有例外)和标准模板库 (STL)。
CTS 是通过 CMake 构建系统构建的。构建的要求如下:
构建由在 CTS 源根目录中找到的文件 CMakeLists.txt 控制。
如果您使用的平台和编译器工具不受支持,则可以将对该平台和工具的支持添加到生成系统中。如果您这样做,请将您的更改提交回 Khronos,以便包含在以后的官方测试中。
否则,如果选择不使用提供的 Makefile,则必须为所选的开发环境构建等效的构建系统。
使用 CMakeLists.txt 构建目标目录 ( ) 中的文件配置构建 targets/ 。它们指定特定于平台的配置,包括包含路径和链接库。
main CMakeLists.txt 包括基于变量的目标 DEQP_TARGET 文件。例如 -DDEQP_TARGET=my_target ,将使用目标描述文件 targets/my_target/my_target.cmake 。
有关目标文件可以设置的变量的说明,请参阅主 CMakeLists.txt 文件。
移植到新平台包括创建新的目标文件或修改现有目标描述。
注意:所有路径(除根源目录外 TCUTIL_PLATFORM_SRCS )均为相关路径。 TCUTIL_PLATFORM_SRCS 是相对于 framework/platform 目录的。
message("*** Using null context target")
set(DEQP_TARGET_NAME "Null")
set(TCUTIL_PLATFORM_SRCS
null/tcuNullPlatform.cpp
null/tcuNullPlatform.hpp
null/tcuNullRenderContext.cpp
null/tcuNullRenderContext.hpp
null/tcuNullContextFactory.cpp
null/tcuNullContextFactory.hpp
)
set(DEQP_TARGET_NAME "UNKNOWN")
set(DEQP_GLES2_LIBRARIES )
set(DEQP_GLES3_LIBRARIES )
set(DEQP_GLES31_LIBRARIES )
set(DEQP_GLES32_LIBRARIES )
set(DEQP_EGL_LIBRARIES )
set(DEQP_OPENGL_LIBRARIES )
set(DEQP_PLATFORM_LIBRARIES )
set(DEQP_PLATFORM_COPY_LIBRARIES )
set(DEQP_USE_X11 OFF)
cd external/kc-cts/src/GTF_ES/glsl/GTF
perl mergeTestFilesToCSource.pl
在目标 .cmake 文件中添加
set(DEQP_EMBED_TESTS ON)
add_definitions(-DHKEMBEDDEDFILESYSTEM)
要构建框架,首先需要下载 zlib、libpng、glslang、spirv-headers 和 spirv-tools 的源代码。
若要下载源代码,请运行:
python external/fetch_sources.py
对于 OpenGL CTS 版本和 opengl-es-cts-3.2.4.0 之前的 OpenGL ES CTS 版本,请下载 Khronos 机密一致性测试套件:
python external/fetch_kc_cts.py
对于 opengl-es-cts-3.2.4.0 之前的 OpenGL CTS 版本和 OpenGL ES CTS 版本,此套件中包含的测试结果必须包含在一致性提交中。
注意:您需要成为 Khronos 采用者并在 Khronos Gitlab 上拥有有效帐户才能下载 Khronos 机密 CTS。可以在没有 Khronos 机密 CTS 的情况下运行和构建 CTS。对于 OpenGL CTS 版本和 opengl-es-cts-3.2.4.0 之前的 OpenGL ES CTS 版本,如果您计划提交一致性,则必须使用 Khronos 机密 CTS(请参阅创建提交包)。对于 opengl-es-cts-3.2.4.0 及更高版本,OpenGL ES CTS 版本不得将 Khronos 机密 CTS 结果包含在提交包中。
使用 CMake 时,始终建议使用源代码外构建。创建一个您选择的构建目录,并在该目录中使用 Cmake 生成 Makefile 或 IDE 项目。
Required tools: 所需工具:
构建 ES2 或 ES3.x 一致性测试:
cmake <path to VK-GL-CTS> -DDEQP_TARGET=null -DGLCTS_GTF_TARGET=gles32
cmake --build external/openglcts
构建 OpenGL 一致性测试:
cmake <path to VK-GL-CTS> -DDEQP_TARGET=null -DGLCTS_GTF_TARGET=gl
cmake --build external/openglcts
Khronos 机密 CTS 不支持 API 上下文的运行时选择。如果您打算运行它,那么该 GLCTS_GTF_TARGET 选项是必要的。
CMake 默认选择生成 Makefile。也可以使用其他发电机。有关更多详细信息,请参阅 CMake 帮助。
一致性测试被设计为相对独立于平台、操作系统和编译器。采用者负责允许测试在他们希望认证为符合标准的平台上运行所需的最终更改。
移植 dEQP 框架需要实现接口,或者在支持 EGL 的平台上实现 tcu::EglPlatform 接口 glu::Platform 。以下文件中详细介绍了移植层 API:
framework/common/tcuPlatform.hpp
framework/opengl/gluPlatform.hpp
framework/egl/egluPlatform.hpp
framework/platform/tcuMain.cpp
此版本的 dEQP 框架包括适用于 Windows(EGL 和 WGL)、X11(EGL 和 XGL)和 Android 的端口。
基本的可移植性库 framework/delibs 很少需要更改。但是,引入对新编译器或新处理器系列的支持可能需要进行一些更改才能正确检测和参数化环境。
移植通常涉及三种类型的更改:
更改通常应限制在以下目录或其子目录中的构建文件(CMake 或 Python)或源文件(.c、.h、.cpp 和 .h 文件):
如果您发现必须更改其他来源(.c、.cpp、.h 或 .hpp)文件,则需要提交如下所述的弃权。
请注意,一致性测试假定实现支持 EGL。但是,符合 OpenGL 或 OpenGL ES 标准不需要 EGL。
大多数测试需要至少 256x256 像素的分辨率才能正常运行并产生稳定的结果。因此,确保新平台的端口能够支持满足宽度和高度要求的表面非常重要。
以下所有命令都需要在 CTS 构建目录下运行。如果需要将二进制文件从生成目录移动,请记住将名为 gl_cts 、 、 gles2 gles3 和 的数据 gles31 目录及其子目录从生成目录复制到相同相对位置的测试目标。
如果已按原样遵循构建说明,则正确的路径为:
cd <builddir>/external/openglcts/modules
可以通过在 Linux/Windows 上运行带有适当选项的 cts-runner 二进制文件或运行 Android 应用程序来启动一致性运行。
OpenGL ES 3.2 的一致性运行:
Debug/cts-runner.exe --type=es32
[For ES 3.1 use --type=es31; ES 3.0 use --type=es3; for ES 2.0, use --type=es2]