1f6603c60Sopenharmony_ci### vkgl 测试框架介绍 2f6603c60Sopenharmony_ci 3f6603c60Sopenharmony_ci#### 概要说明 4f6603c60Sopenharmony_ci 5f6603c60Sopenharmony_civkgl 是基于开源库VK-GL-CTS(版本:opengl-es-cts-3.2.8),进行移植开发的OpenHarmony的测试套件,目录结构如下: 6f6603c60Sopenharmony_ci 7f6603c60Sopenharmony_ci```bash 8f6603c60Sopenharmony_ci. 9f6603c60Sopenharmony_ci├── BUILD.gn //编译配置 10f6603c60Sopenharmony_ci├── comm.gni //共同编译参数 11f6603c60Sopenharmony_ci├── cpvkgl.sh //编译打包脚本,负责打包依赖so库和依赖测试数据 12f6603c60Sopenharmony_ci└── src 13f6603c60Sopenharmony_ci ├── ActsApp.cpp //测试项调用入口 14f6603c60Sopenharmony_ci ├── ActsApp.h 15f6603c60Sopenharmony_ci ├── deqpgles2 //deqp gles2测试用例suite 16f6603c60Sopenharmony_ci ├── deqpgles3 //deqp gles3测试用例suite 17f6603c60Sopenharmony_ci ├── deqpgles31 //deqp gles31测试用例suite 18f6603c60Sopenharmony_ci ├── khrgles2 //khr gles2测试用例suite 19f6603c60Sopenharmony_ci ├── khrgles3 //khr gles3测试用例suite 20f6603c60Sopenharmony_ci ├── khrgles31 //khr gles31测试用例suite 21f6603c60Sopenharmony_ci ├── khrgles32 //khr gles32测试用例suite 22f6603c60Sopenharmony_ci ├── khrglesext //khr glesext测试用例suite 23f6603c60Sopenharmony_ci ├── logdefine.h //测试结果数据收集定义 24f6603c60Sopenharmony_ci └── shrinkdefine.h //测试框架简化定义 25f6603c60Sopenharmony_ci``` 26f6603c60Sopenharmony_ci 27f6603c60Sopenharmony_ci其中具体测试项目为: 28f6603c60Sopenharmony_ci 29f6603c60Sopenharmony_ci* deqpgles2:对应vk-gl-cts库的 gles2.txt,路径为external/openglcts/data/mustpass,在此路径下有deqp和khr两种,在此我们选择deqp的case,共包括用例16492条, 30f6603c60Sopenharmony_ci* deqpgles3:对应vk-gl-cts库的 gles3.txt,路径为external/openglcts/data/mustpass,在此路径下有deqp和khr两种,在此我们选择deqp的case,共包括用例44389条, 31f6603c60Sopenharmony_ci* deqpgles31:对应vk-gl-cts库的 gles31.txt,路径为external/openglcts/data/mustpass,在此路径下有deqp和khr两种,在此我们选择deqp的case,共包括用例37854条, 32f6603c60Sopenharmony_ci* khrgles2:对应vk-gl-cts库的 gles2-khr.txt,路径为external/openglcts/data/mustpass,在此路径下有deqp和khr两种,在此我们选择khr的case,共包括用例472条, 33f6603c60Sopenharmony_ci* khrgles3:对应vk-gl-cts库的 gles3-khr.txt,路径为external/openglcts/data/mustpass,在此路径下有deqp和khr两种,在此我们选择khr的case,共包括用例4079条 34f6603c60Sopenharmony_ci* khrgles31:对应vk-gl-cts库的 gles31-khr.txt,路径为external/openglcts/data/mustpass,在此路径下有deqp和khr两种,在此我们选择khr的case,共包括用例3497条 35f6603c60Sopenharmony_ci* khrglesext:对应vk-gl-cts库的 glesext-khr.txt,路径为external/openglcts/data/mustpass,在此路径下有deqp和khr两种,在此我们选择khr的case,共包括用例335条 36f6603c60Sopenharmony_ci 37f6603c60Sopenharmony_ci测试套件执行流程为: 38f6603c60Sopenharmony_ci```mermaid 39f6603c60Sopenharmony_cigraph LR 40f6603c60Sopenharmony_ci测试套件 --> ActsApp --> 三方库vkgl执行单元 41f6603c60Sopenharmony_ci``` 42f6603c60Sopenharmony_ci 43f6603c60Sopenharmony_ci#### 适配说明 44f6603c60Sopenharmony_ci 45f6603c60Sopenharmony_ci* vkgl 测试依赖于三方库内的vk-gl-cts库,以及glslang,spirv-headers,spirv-tools三个库,对应关系如下: 46f6603c60Sopenharmony_ci 47f6603c60Sopenharmony_ci```mermaid 48f6603c60Sopenharmony_cigraph LR 49f6603c60Sopenharmony_civkgl --> vk-gl-cts --> glslang 50f6603c60Sopenharmony_civk-gl-cts --> spirv-headers 51f6603c60Sopenharmony_civk-gl-cts --> spirv-tools 52f6603c60Sopenharmony_ci``` 53f6603c60Sopenharmony_ci 54f6603c60Sopenharmony_ci* vk-gl-cts适配方式:在vk-gl-cts/framework/platform内增加OpenHarmony适配目录,适配目录内增加ohos适配层,针对rosen图形框架进行适配,实现对gpu驱动的加载和对应图形API的测试。 55f6603c60Sopenharmony_ci 56f6603c60Sopenharmony_ci ```bash 57f6603c60Sopenharmony_ci vk-gl-cts/framework/platform 58f6603c60Sopenharmony_ci ├── android 59f6603c60Sopenharmony_ci ├── BUILD.gn 60f6603c60Sopenharmony_ci ├── CMakeLists.txt 61f6603c60Sopenharmony_ci ├── ios 62f6603c60Sopenharmony_ci ├── lnx 63f6603c60Sopenharmony_ci ├── null 64f6603c60Sopenharmony_ci ├── nullws 65f6603c60Sopenharmony_ci ├── ohos //OpenHarmony适配目录 66f6603c60Sopenharmony_ci │ ├── context 67f6603c60Sopenharmony_ci │ ├── display 68f6603c60Sopenharmony_ci │ ├── rosen_context 69f6603c60Sopenharmony_ci │ ├── tcuOhosPlatform.cpp 70f6603c60Sopenharmony_ci │ ├── tcuOhosPlatform.hpp 71f6603c60Sopenharmony_ci ├── osx 72f6603c60Sopenharmony_ci ├── raspi 73f6603c60Sopenharmony_ci ├── surfaceless 74f6603c60Sopenharmony_ci ├── tcuMain.cpp 75f6603c60Sopenharmony_ci ├── vanilla 76f6603c60Sopenharmony_ci └── win32 77f6603c60Sopenharmony_ci ``` 78f6603c60Sopenharmony_ci 79f6603c60Sopenharmony_ci 80f6603c60Sopenharmony_ci* vkgl测试套件的编译: 81f6603c60Sopenharmony_ci 82f6603c60Sopenharmony_ci * 在test/xts/acts/graphic/BUILD.gn里增加deps,如下: 83f6603c60Sopenharmony_ci 84f6603c60Sopenharmony_ci ```bash 85f6603c60Sopenharmony_ci import("//build/ohos_var.gni") 86f6603c60Sopenharmony_ci group("graphic") { 87f6603c60Sopenharmony_ci testonly = true 88f6603c60Sopenharmony_ci if (is_standard_system) { 89f6603c60Sopenharmony_ci deps = [ 90f6603c60Sopenharmony_ci "webGL:webGL_hap_test", 91f6603c60Sopenharmony_ci "windowstandard:window_hap_test", 92f6603c60Sopenharmony_ci #增加下面内容------------------------------------------ 93f6603c60Sopenharmony_ci "vkgl:cpvkgl", //vkgl测试套件入口包括vkgl测试,测试打包脚本 94f6603c60Sopenharmony_ci #到此为止--------------------------------------------- 95f6603c60Sopenharmony_ci ] 96f6603c60Sopenharmony_ci } else { 97f6603c60Sopenharmony_ci deps = [ 98f6603c60Sopenharmony_ci "appaccount:appaccount_hap", 99f6603c60Sopenharmony_ci "osaccount:osaccount_hap", 100f6603c60Sopenharmony_ci ] 101f6603c60Sopenharmony_ci } 102f6603c60Sopenharmony_ci } 103f6603c60Sopenharmony_ci ``` 104f6603c60Sopenharmony_ci 105f6603c60Sopenharmony_ci 106f6603c60Sopenharmony_ci * vkgl测试套件的编译命令(源码根目录执行): 107f6603c60Sopenharmony_ci 108f6603c60Sopenharmony_ci ```bash 109f6603c60Sopenharmony_ci ./build.sh --product-name rk3568 --gn-args build_xts=true --build-target "acts" --gn-args is_standard_system=true 110f6603c60Sopenharmony_ci ``` 111f6603c60Sopenharmony_ci 112f6603c60Sopenharmony_ci#### 使用说明 113f6603c60Sopenharmony_ci 114f6603c60Sopenharmony_ci* vkgl测试套件编译完成后生成的**测试套件**使用流程如下: 115f6603c60Sopenharmony_ci 116f6603c60Sopenharmony_ci * vkgl**测试套件**会输出测试程序至两个路径: 117f6603c60Sopenharmony_ci 118f6603c60Sopenharmony_ci 1. out/rk3568/suites/acts/testcases/ 119f6603c60Sopenharmony_ci 120f6603c60Sopenharmony_ci 此路径下包括测试程序和vkgldata测试依赖库和测试数据包,具体如下: 121f6603c60Sopenharmony_ci 122f6603c60Sopenharmony_ci ```bash 123f6603c60Sopenharmony_ci ├── libdeqp_ohos_platform.z.so 124f6603c60Sopenharmony_ci ├── libdeqp_SPIRV.z.so 125f6603c60Sopenharmony_ci ├── libdeqp_SPVRemapper.z.so 126f6603c60Sopenharmony_ci ├── librosen_context.z.so 127f6603c60Sopenharmony_ci └── vkgldata.tar.gz 128f6603c60Sopenharmony_ci ``` 129f6603c60Sopenharmony_ci 130f6603c60Sopenharmony_ci 2. out/rk3568/common/common 131f6603c60Sopenharmony_ci 132f6603c60Sopenharmony_ci 此路径下的测试程序为glcts,可以直接拷贝至设备上运行,运行命令如下: 133f6603c60Sopenharmony_ci 134f6603c60Sopenharmony_ci ```bash 135f6603c60Sopenharmony_ci ./glcts --deqp-case=dEQP-GLES2.* 136f6603c60Sopenharmony_ci ``` 137f6603c60Sopenharmony_ci 138f6603c60Sopenharmony_ci --deqp-case=参数目前支持:dEQP-GLES2,dEQP-GLES3, dEQP-GLES31, KHR-GLES2, KHR-GLES3, KHR-GLES31, *号意思就是后面的全部,所以如果指定具体case就写完整路径 139f6603c60Sopenharmony_ci 140f6603c60Sopenharmony_ci --deqp-caselist-file=参数支持直接传txt文件进行测试 141f6603c60Sopenharmony_ci 142f6603c60Sopenharmony_ci * vkgl测试套件运行结束会生成qpa文件方便开发人员调试,qpa文件可以通过vk-gl-cts/scripts/log内的脚本进行解析,具体命令如下: 143f6603c60Sopenharmony_ci 144f6603c60Sopenharmony_ci ```bash 145f6603c60Sopenharmony_ci python2 log_to_xml.py TestResults.qpa TestResults.xml 146f6603c60Sopenharmony_ci ``` 147