1Vulkan CTS README 2================= 3 4This document describes how to build and run Vulkan Conformance Test suite. 5 6Vulkan CTS is built on dEQP framework. dEQP documentation is available 7at http://source.android.com/devices/graphics/testing.html 8 9 10Requirements 11------------ 12 13### Common 14 15 * Git (for checking out sources) 16 * Python 2.7.x (all recent versions in 2.x should work, 3.x is not supported) 17 * CMake 2.8 or newer 18 19### Win32 20 21 * Visual Studio 2013 or newer (glslang uses several C++11 features) 22 23### Linux 24 25 * Standard toolchain (make, gcc/clang) 26 27### Android 28 29 * Android NDK r11 30 * Android SDK with: SDK Tools, SDK Platform-tools, SDK Build-tools, and API 22 31 * Java Development Kit (JDK) 32 * Apache Ant 33 * Windows: either NMake or JOM in PATH 34 35See `android/scripts/common.py` for a list locations where the build system 36expects to find these. 37 38 39Building CTS 40------------ 41 42To build dEQP, you need first to download sources for zlib, libpng, glslang, 43and spirv-tools. 44 45To download sources, run: 46 47 python external/fetch_sources.py 48 49You may need to re-run `fetch_sources.py` to update to the latest glslang and 50spirv-tools revisions occasionally. 51 52With CMake out-of-source builds are always recommended. Create a build directory 53of your choosing, and in that directory generate Makefiles or IDE project 54using cmake. 55 56 57### Windows x86-32 58 59 cmake <path to vulkancts> -G"Visual Studio 12" 60 start dEQP-Core-default.sln 61 62### Windows x86-64 63 64 cmake <path to vulkancts> -G"Visual Studio 12 Win64" 65 start dEQP-Core-default.sln 66 67### Linux 32-bit Debug 68 69 cmake <path to vulkancts> -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32 70 make -j 71 72Release build can be done by using -DCMAKE_BUILD_TYPE=Release 73 74### Linux 64-bit Debug 75 76 cmake <path to vulkancts> -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-m64 -DCMAKE_CXX_FLAGS=-m64 77 make -j 78 79### Android 80 81Following command will build CTS into android/package/bin/dEQP-debug.apk. 82 83 python android/scripts/build.py 84 85The package can be installed by either running: 86 87 python android/scripts/install.py 88 89By default the CTS package will contain libdeqp.so built for armeabi-v7a, arm64-v8a, 90and x86 ABIs, but that can be changed in android/scripts/common.py script. 91 92To pick which ABI to use at install time, following commands must be used 93instead: 94 95 adb install --abi <ABI name> android/package/bin/dEQP-debug.apk /data/local/tmp/dEQP-debug.apk 96 97 98Building Mustpass 99----------------- 100 101Current mustpass is checked into repository and can be found at: 102 103 external/vulkancts/mustpass/1.0.2/vk-default.txt 104 105Vulkan CTS mustpass can be re-generated by running: 106 107 python <vulkancts>/external/vulkancts/build_mustpass.py 108 109 110Pre-compiling SPIR-V binaries 111----------------------------- 112 113For distribution, and platforms that don't support GLSL to SPIR-V compilation, 114SPIR-V binaries can be pre-built with following command: 115 116 python external/vulkancts/scripts/build_spirv_binaries.py 117 118Binaries will be written to `external/vulkancts/data/vulkan/prebuilt/`. 119 120Test modules (or in case of Android, the APK) must be re-built after building 121SPIR-V programs in order for the binaries to be available. 122 123 124Running CTS 125----------- 126 127Following command line options MUST be used when running CTS: 128 129 --deqp-caselist-file=<vulkancts>/external/vulkancts/mustpass/1.0.2/vk-default.txt 130 --deqp-log-images=disable 131 --deqp-log-shader-sources=disable 132 133In addition on multi-device systems the device for which conformance is claimed 134can be selected with: 135 136 --deqp-vk-device-id=<value> 137 138To speed up the conformance run on some platforms the following command line 139option may be used to disable frequent fflush() calls to the output logs: 140 141 --deqp-log-flush=disable 142 143By default, the test log will be written into the path "TestResults.qpa". If the 144platform requires a different path, it can be specified with: 145 146 --deqp-log-filename=<path> 147 148No other command line options are allowed. 149 150### Win32 151 152 cd <builddir>/external/vulkancts/modules/vulkan 153 Debug/deqp-vk.exe --deqp-caselist-file=... 154 155Test log will be written into TestResults.qpa 156 157### Linux 158 159 cd <builddir>/external/vulkancts/modules/vulkan 160 ./deqp-vk --deqp-vk-caselist-file=... 161 162### Android 163 164 adb push <vulkancts>/external/vulkancts/mustpass/1.0.2/vk-default.txt /sdcard/vk-default.txt 165 adb shell 166 167In device shell: 168 169 am start -n com.drawelements.deqp/android.app.NativeActivity -e cmdLine "deqp --deqp-caselist-file=/sdcard/vk-default.txt --deqp-log-images=disable --deqp-log-shader-sources=disable --deqp-log-filename=/sdcard/TestResults.qpa" 170 171Test progress will be written to device log and can be displayed with: 172 173 adb logcat -s dEQP 174 175Test log will be written into `/sdcard/TestResults.qpa`. 176 177 178Conformance Submission Package Requirements 179------------------------------------------- 180 181The conformance submission package must contain the following: 182 1831. Full test logs (`TestResults.qpa`) from CTS runs against all driver builds 1842. Result of `git status` and `git log` from CTS source directory 1853. Any patches used on top of release tag 1864. Conformance statement 187 188Test logs (1) should be named `<submission pkg dir>/TestResults-<driver build type>.qpa`, 189for example `TestResults-armeabi-v7a.qpa`. On platforms where multiple different driver 190builds (for example 64-bit and 32-bit) are present, CTS logs must be provided 191for each driver build as part of the submission package. 192 193The CTS build must always be done from clean git repository that doesn't have any 194uncommitted changes. Thus it is necessary to run and capture output of `git 195status` and `git log` (2) in the source directory: 196 197 git status > <submission pkg dir>/git-status.txt 198 git log --first-parent <release tag>^..HEAD > <submission pkg dir>/git-log.txt 199 200Any changes made to CTS must be committed to the local repository, and provided 201as part of the submission package (3). This can be done by running: 202 203 git format-patch -o <submission pkg dir> <release tag>..HEAD 204 205In general, bugfixes and changes to platform-specific code (mostly under 206`framework/platform`) are allowed. The commit message for each change must 207include a clear description of the change and why it is necessary. Non-porting 208related changes must be accompanied by a waiver (see below). 209 210NOTE: When cherry-picking patches on top of release tag, please use `git cherry-pick -x` 211to include original commit hash in the commit message. 212 213Conformance statement (4) must be included in a file called `STATEMENT-<adopter>` 214and must contain following: 215 216 CONFORM_VERSION: <git tag of CTS release> 217 PRODUCT: <string-value> 218 CPU: <string-value> 219 OS: <string-value> 220 221Note that product/cpu/os information is also captured in `dEQP-VK.info.*` tests 222if `vk::Platform::describePlatform()` is implemented. 223 224If the submission package covers multiple products, you can list them by appending 225additional `PRODUCT:` lines to the conformance statement. For example: 226 227 CONFORM_VERSION: vulkan-cts-1.0.2.0 228 PRODUCT: Product A 229 PRODUCT: Product B 230 ... 231 232The actual submission package consists of the above set of files which must 233be bundled into a gzipped tar file named `VK10_<adopter><_info>.tgz`. `<adopter>` 234is the name of the Adopting member company, or some recognizable abbreviation. 235The `<_info>` field is optional. It may be used to uniquely identify a submission 236by OS, platform, date, or other criteria when making multiple submissions. 237 238One way to create a suiteable gzipped tar file is to execute the command: 239 240 tar -cvzf <filename.tgz> -C <submission pkg dir> . 241 242where `<submission pkg dir>` is the directory containing the files from (1)-(4) 243from above. A submission package must contain all of the files listed above, 244and only those files. 245 246As an example submission package could contain: 247 248 STATEMENT-Khronos 249 git-log.txt 250 git-status.txt 251 0001-Remove-Waived-Filtering-Tests.patch 252 0002-Fix-Pipeline-Parameters.patch 253 TestResults-armeabi-v7a.qpa 254 TestResults-arm64-v8a.qpa 255 256 257Waivers 258------- 259 260The process for requesting a waiver is to report the issue by filing a bug 261report in the Gitlab VulkanCTS project (TODO Github?). When creating the 262submission package, include references to the waiver in the commit message of 263the relevant change. Including as much information as possible in your bug 264report (including a unified diff or a merge request of suggested file changes) 265will ensure the issue can be progressed as rapidly as possible. Issues must 266be labeled "Waiver" (TODO!) and identify the version of the CTS and affected 267tests. 268 269Conformance Criteria 270-------------------- 271 272Conformance run is considered passing if all tests finish with allowed result 273codes. Test results are contained in the TestResults.qpa log. Each 274test case section contains XML tag Result, for example: 275 276 <Result StatusCode="Pass">Not validated</Result> 277 278The result code is the value of the StatusCode attribute. Following status 279codes are allowed: 280 281 Pass 282 NotSupported 283 QualityWarning 284 CompatibilityWarning 285 286Submission package can be verified using `external/vulkancts/scripts/verify_submission.py` 287script. The script takes two arguments: path to extracted submission package 288and path to current mustpass list. For example: 289 290 python external/vulkancts/scripts/verify_submission.py VK_10_Khronos_1/ external/vulkancts/mustpass/1.0.2/vk-default.txt 291 292 293Vulkan platform port 294-------------------- 295 296Vulkan support from Platform implementation requires providing 297`getVulkanPlatform()` method in `tcu::Platform` class implementation. 298 299See `framework/common/tcuPlatform.hpp` and examples in 300`framework/platform/win32/tcuWin32Platform.cpp` and 301`framework/platform/android/tcuAndroidPlatform.cpp`. 302 303If any WSI extensions are supported, platform port must also implement 304methods for creating native display (`vk::Platform::createWsiDisplay`) 305and window handles (`vk::wsi::Display::createWindow`). Otherwise tests 306under `dEQP-VK.wsi` will fail. 307 308 309Null (dummy) driver 310------------------- 311 312For testing and development purposes it might be useful to be able to run 313tests on dummy Vulkan implementation. One such implementation is provided in 314vkNullDriver.cpp. To use that, implement `vk::Platform::createLibrary()` with 315`vk::createNullDriver()`. 316 317 318Validation Layers 319----------------- 320 321Vulkan CTS framework includes first-party support for validation layers, that 322can be turned on with `--deqp-validation=enable` command line option. 323 324When validation is turned on, default instance and device will be created with 325validation layers enabled and debug callback is registered to record any 326messages. Debug messages collected during test execution will be included at 327the end of the test case log. 328 329If any validation errors are found, test result will be set to `InternalError`. 330 331By default `VK_DEBUG_REPORT_INFORMATION_BIT_EXT` and `_DEBUG_BIT_EXT` messages 332are excluded from the log, but that can be customized by modifying 333`vkt::TestCaseExecutor::deinit()` in `vktTestPackage.cpp`. 334 335 336Cherry GUI 337---------- 338 339Vulkan test module can be used with Cherry (GUI for test execution and 340analysis). Cherry is available at 341https://android.googlesource.com/platform/external/cherry. Please follow 342instructions in README to get started. 343 344Before first launch, and every time test hierarchy has been modified, test 345case list must be refreshed by running: 346 347 python scripts/build_caselists.py path/to/cherry/data 348 349Cherry must be restarted for the case list update to take effect. 350