# Vulkan测试套件说明
- [介绍](#section_Vulkan_001)
- [使用说明](#section_Vulkan_002)
## 介绍
Vulkan测试套件使用VK-GL-CTS三方库内原有的vulkancts,通过acts测试套件框架在运行时调用运行,具体目录结构如下:
```bash
.
├── BUILD.gn
├── comm.gni
├── cpVulkan.sh
├── genlocal.py
├── README_zh.md
├── src
│ ├── ActsVulkanTest.cpp
│ ├── ActsVulkanTest.h
│ ├── apitest
│ │ ├── ActsVulkanApiTest.cpp
│ │ ├── ActsVulkanApiTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── bindingmodeltest
│ │ ├── ActsVulkanBinding_modelTest.cpp
│ │ ├── ActsVulkanBinding_modelTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── clippingtest
│ │ ├── ActsVulkanClippingTest.cpp
│ │ ├── ActsVulkanClippingTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── computetest
│ │ ├── ActsVulkanComputeTest.cpp
│ │ ├── ActsVulkanComputeTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── conditionalrenderingtest
│ │ ├── ActsVulkanConditional_renderingTest.cpp
│ │ ├── ActsVulkanConditional_renderingTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── descriptorindexingtest
│ │ ├── ActsVulkanDescriptor_indexingTest.cpp
│ │ ├── ActsVulkanDescriptor_indexingTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── devicegrouptest
│ │ ├── ActsVulkanDevice_groupTest.cpp
│ │ ├── ActsVulkanDevice_groupTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── drawtest
│ │ ├── ActsVulkanDrawTest.cpp
│ │ ├── ActsVulkanDrawTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── drmformatmodifierstest
│ │ ├── ActsVulkanDrm_format_modifiersTest.cpp
│ │ ├── ActsVulkanDrm_format_modifiersTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── dynamicrenderingtest
│ │ ├── ActsVulkanDynamic_renderingTest.cpp
│ │ ├── ActsVulkanDynamic_renderingTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── dynamicstatetest
│ │ ├── ActsVulkanDynamic_stateTest.cpp
│ │ ├── ActsVulkanDynamic_stateTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── fastlinkedlibrary
│ │ ├── ActsVulkanFastlinkedLibraryTest.cpp
│ │ ├── ActsVulkanFastlinkedLibraryTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── fractionmandatorytests
│ │ ├── ActsVulkanFraction_mandatory_testsTest.cpp
│ │ ├── ActsVulkanFraction_mandatory_testsTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── fragmentoperationstest
│ │ ├── ActsVulkanFragment_operationsTest.cpp
│ │ ├── ActsVulkanFragment_operationsTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── fragmentshaderinterlocktest
│ │ ├── ActsVulkanFragment_shader_interlockTest.cpp
│ │ ├── ActsVulkanFragment_shader_interlockTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── fragmentshadingratetest
│ │ ├── ActsVulkanFragment_shading_rateTest.cpp
│ │ ├── ActsVulkanFragment_shading_rateTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── geometrytest
│ │ ├── ActsVulkanGeometryTest.cpp
│ │ ├── ActsVulkanGeometryTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── glsltest
│ │ ├── ActsVulkanGlslTest.cpp
│ │ ├── ActsVulkanGlslTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── graphicsfuzztest
│ │ ├── ActsVulkanGraphicsfuzzTest.cpp
│ │ ├── ActsVulkanGraphicsfuzzTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── imagelessframebuffertest
│ │ ├── ActsVulkanImageless_framebufferTest.cpp
│ │ ├── ActsVulkanImageless_framebufferTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── imagetest
│ │ ├── ActsVulkanImageTest.cpp
│ │ ├── ActsVulkanImageTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── infotest
│ │ ├── ActsVulkanInfoTest.cpp
│ │ ├── ActsVulkanInfoTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── mastertest
│ │ ├── ActsVulkanMasterTest.cpp
│ │ ├── ActsVulkanMasterTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── memorymodeltest
│ │ ├── ActsVulkanMemory_modelTest.cpp
│ │ ├── ActsVulkanMemory_modelTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── memorytest
│ │ ├── ActsVulkanMemoryTest.cpp
│ │ ├── ActsVulkanMemoryTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── meshshadertest
│ │ ├── ActsVulkanMesh_shaderTest.cpp
│ │ ├── ActsVulkanMesh_shaderTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── monolithic
│ │ ├── ActsVulkanMonolithicTest.cpp
│ │ ├── ActsVulkanMonolithicTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── multiviewtest
│ │ ├── ActsVulkanMultiviewTest.cpp
│ │ ├── ActsVulkanMultiviewTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── pipelinelibrary
│ │ ├── ActsVulkanPipelineLibraryTest.cpp
│ │ ├── ActsVulkanPipelineLibraryTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── protectedmemorytest
│ │ ├── ActsVulkanProtected_memoryTest.cpp
│ │ ├── ActsVulkanProtected_memoryTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── querypooltest
│ │ ├── ActsVulkanQuery_poolTest.cpp
│ │ ├── ActsVulkanQuery_poolTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── rasterizationtest
│ │ ├── ActsVulkanRasterizationTest.cpp
│ │ ├── ActsVulkanRasterizationTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── rayquerytest
│ │ ├── ActsVulkanRay_queryTest.cpp
│ │ ├── ActsVulkanRay_queryTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── raytracingpipelinetest
│ │ ├── ActsVulkanRay_tracing_pipelineTest.cpp
│ │ ├── ActsVulkanRay_tracing_pipelineTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── reconvergencetest
│ │ ├── ActsVulkanReconvergenceTest.cpp
│ │ ├── ActsVulkanReconvergenceTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── renderpass2test
│ │ ├── ActsVulkanRenderpass2Test.cpp
│ │ ├── ActsVulkanRenderpass2Test.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── renderpasstest
│ │ ├── ActsVulkanRenderpassTest.cpp
│ │ ├── ActsVulkanRenderpassTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── robustnesstest
│ │ ├── ActsVulkanRobustnessTest.cpp
│ │ ├── ActsVulkanRobustnessTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── sparseresourcestest
│ │ ├── ActsVulkanSparse_resourcesTest.cpp
│ │ ├── ActsVulkanSparse_resourcesTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── spirvassemblytest
│ │ ├── ActsVulkanSpirv_assemblyTest.cpp
│ │ ├── ActsVulkanSpirv_assemblyTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── ssbotest
│ │ ├── ActsVulkanSsboTest.cpp
│ │ ├── ActsVulkanSsboTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── subgroupstest
│ │ ├── ActsVulkanSubgroupsTest.cpp
│ │ ├── ActsVulkanSubgroupsTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── synchronization2test
│ │ ├── ActsVulkanSynchronization2Test.cpp
│ │ ├── ActsVulkanSynchronization2Test.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── synchronizationtest
│ │ ├── ActsVulkanSynchronizationTest.cpp
│ │ ├── ActsVulkanSynchronizationTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── tessellationtest
│ │ ├── ActsVulkanTessellationTest.cpp
│ │ ├── ActsVulkanTessellationTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── testissuestest
│ │ ├── ActsVulkanTest_issuesTest.cpp
│ │ ├── ActsVulkanTest_issuesTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── texturetest
│ │ ├── ActsVulkanTextureTest.cpp
│ │ ├── ActsVulkanTextureTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── transformfeedbacktest
│ │ ├── ActsVulkanTransform_feedbackTest.cpp
│ │ ├── ActsVulkanTransform_feedbackTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── ubotest
│ │ ├── ActsVulkanUboTest.cpp
│ │ ├── ActsVulkanUboTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ ├── wsitest
│ │ ├── ActsVulkanWsiTest.cpp
│ │ ├── ActsVulkanWsiTest.h
│ │ ├── BUILD.gn
│ │ └── Test.json
│ └── ycbcrtest
│ ├── ActsVulkanYcbcrTest.cpp
│ ├── ActsVulkanYcbcrTest.h
│ ├── BUILD.gn
│ └── Test.json
└── Test.json
```
* BUILD.gn:编译脚本,编译acts测试套件,编译Vulkan三方库测试代码,执行actions事件在acts测试套件对应的testcases目录下建立Vulkandata目录,然后将运行测试需要的Vulkan测试进程,解析运行日志所需的Python脚本拷贝到Vulkandata目录。
* comm.gni:通用编译配置。
* cpVulkan.sh:编译后actions事件执行的脚本。
* genlocal.py:Vulkan的test程序运行后结果会保存在task_log.log文件内,分析运行日志后会存储结果在summary_report.xml文件内,然后根据xdevice流程生成summary_report。
* src:测试套件的实现,内部直接调用Vulkan的unittest进程。
* Test.json:运行测试需要json脚本,包括拷贝内容到开发板。
## 使用说明
* 编译运行
```bash
./build.sh --product-name rk3568 --gn-args build_xts=true --build-target "acts" --gn-args is_standard_system=true
```
* 测试运行:进入suites/acts目录,执行python -m xdevice,然后在命令框里输入一下命令
```bash
run -l ActsVulkanApiTest,
run -l ActsVulkanBindingmodelTest,
run -l ActsVulkanClippingTest,
run -l ActsVulkanComputeTest,
run -l ActsVulkanConditionalrenderingTest,
run -l ActsVulkanDescriptorindexingTest,
run -l ActsVulkanDevicegroupTest,
run -l ActsVulkanDrawTest,
run -l ActsVulkanDrmformatmodifiersTest,
run -l ActsVulkanDynamicrenderingTest,
run -l ActsVulkanDynamicstateTest,
run -l ActsVulkanFastlinkedLibraryTest,
run -l ActsVulkanFractionmandatorytestsTest,
run -l ActsVulkanFragmentoperationsTest,
run -l ActsVulkanFragmentshaderinterlockTest,
run -l ActsVulkanFragmentshadingrateTest,
run -l ActsVulkanGeometryTest,
run -l ActsVulkanGlslTest,
run -l ActsVulkanGraphicsfuzzTest,
run -l ActsVulkanImagelessframebufferTest,
run -l ActsVulkanImageTest,
run -l ActsVulkanInfoTest,
run -l ActsVulkanMasterTest,
run -l ActsVulkanMemorymodelTest,
run -l ActsVulkanMemoryTest,
run -l ActsVulkanMeshshaderTest,
run -l ActsVulkanMonolithicTest,
run -l ActsVulkanMultiviewTest,
run -l ActsVulkanPipelineLibraryTest,
run -l ActsVulkanProtectedmemoryTest,
run -l ActsVulkanQuerypoolTest,
run -l ActsVulkanRasterizationTest,
run -l ActsVulkanRayqueryTest,
run -l ActsVulkanRaytracingpipelineTest,
run -l ActsVulkanReconvergenceTest,
run -l ActsVulkanRenderpass2Test,
run -l ActsVulkanRenderpassTest,
run -l ActsVulkanRobustnessTest,
run -l ActsVulkanSparseresourcesTest,
run -l ActsVulkanSpirvassemblyTest,
run -l ActsVulkanSsboTest,
run -l ActsVulkanSubgroupsTest,
run -l ActsVulkanSynchronization2Test,
run -l ActsVulkanSynchronizationTest,
run -l ActsVulkanTessellationTest,
run -l ActsVulkanTestissuesTest,
run -l ActsVulkanTextureTest,
run -l ActsVulkanTransformfeedbackTest,
run -l ActsVulkanUboTest,
run -l ActsVulkanWsiTest,
run -l ActsVulkanYcbcrTest
```
* vkgl测试套件运行结束会生成qpa文件方便开发人员调试,qpa文件可以通过vk-gl-cts/scripts/log内的脚本进行解析,具体命令如下:
```bash
python2 log_to_xml.py TestResults.qpa TestResults.xml
```