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