4 This document describes how to build and run Vulkan Conformance Test suite.
6 Vulkan CTS is built on dEQP framework. dEQP documentation is available
7 at http://source.android.com/devices/graphics/testing.html
15 * Git (for checking out sources)
16 * Python 2.7.x (all recent versions in 2.x should work, 3.x is not supported)
21 * Visual Studio 2013 or newer (glslang uses several C++11 features)
25 * Standard toolchain (make, gcc/clang)
30 * Android SDK with: SDK Tools, SDK Platform-tools, SDK Build-tools, and API 22
31 * Java Development Kit (JDK)
33 * Windows: either NMake or JOM in PATH
35 See `android/scripts/common.py` for a list locations where the build system
36 expects to find these.
42 To build dEQP, you need first to download sources for zlib, libpng, glslang,
45 To download sources, run:
47 python external/fetch_sources.py
49 You may need to re-run `fetch_sources.py` to update to the latest glslang and
50 spirv-tools revisions occasionally.
52 With CMake out-of-source builds are always recommended. Create a build directory
53 of your choosing, and in that directory generate Makefiles or IDE project
59 cmake <path to vulkancts> -G"Visual Studio 12"
60 start dEQP-Core-default.sln
64 cmake <path to vulkancts> -G"Visual Studio 12 Win64"
65 start dEQP-Core-default.sln
67 ### Linux 32-bit Debug
69 cmake <path to vulkancts> -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32
72 Release build can be done by using -DCMAKE_BUILD_TYPE=Release
74 ### Linux 64-bit Debug
76 cmake <path to vulkancts> -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-m64 -DCMAKE_CXX_FLAGS=-m64
81 Following command will build CTS into android/package/bin/dEQP-debug.apk.
83 python android/scripts/build.py
85 The package can be installed by either running:
87 python android/scripts/install.py
89 By default the CTS package will contain libdeqp.so built for armeabi-v7a, arm64-v8a,
90 and x86 ABIs, but that can be changed in android/scripts/common.py script.
92 To pick which ABI to use at install time, following commands must be used
95 adb install --abi <ABI name> android/package/bin/dEQP-debug.apk /data/local/tmp/dEQP-debug.apk
101 Current mustpass is checked into repository and can be found at:
103 external/vulkancts/mustpass/1.0.2/vk-default.txt
105 Vulkan CTS mustpass can be re-generated by running:
107 python <vulkancts>/external/vulkancts/build_mustpass.py
110 Pre-compiling SPIR-V binaries
111 -----------------------------
113 For distribution, and platforms that don't support GLSL to SPIR-V compilation,
114 SPIR-V binaries can be pre-built with following command:
116 python external/vulkancts/scripts/build_spirv_binaries.py
118 Binaries will be written to `external/vulkancts/data/vulkan/prebuilt/`.
120 Test modules (or in case of Android, the APK) must be re-built after building
121 SPIR-V programs in order for the binaries to be available.
127 Following command line options MUST be used when running CTS:
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
133 In addition on multi-device systems the device for which conformance is claimed
134 can be selected with:
136 --deqp-vk-device-id=<value>
138 To speed up the conformance run on some platforms the following command line
139 option may be used to disable frequent fflush() calls to the output logs:
141 --deqp-log-flush=disable
143 By default, the test log will be written into the path "TestResults.qpa". If the
144 platform requires a different path, it can be specified with:
146 --deqp-log-filename=<path>
148 No other command line options are allowed.
152 cd <builddir>/external/vulkancts/modules/vulkan
153 Debug/deqp-vk.exe --deqp-caselist-file=...
155 Test log will be written into TestResults.qpa
159 cd <builddir>/external/vulkancts/modules/vulkan
160 ./deqp-vk --deqp-vk-caselist-file=...
164 adb push <vulkancts>/external/vulkancts/mustpass/1.0.2/vk-default.txt /sdcard/vk-default.txt
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"
171 Test progress will be written to device log and can be displayed with:
175 Test log will be written into `/sdcard/TestResults.qpa`.
178 Conformance Submission Package Requirements
179 -------------------------------------------
181 The conformance submission package must contain the following:
183 1. Full test logs (`TestResults.qpa`) from CTS runs against all driver builds
184 2. Result of `git status` and `git log` from CTS source directory
185 3. Any patches used on top of release tag
186 4. Conformance statement
188 Test logs (1) should be named `<submission pkg dir>/TestResults-<driver build type>.qpa`,
189 for example `TestResults-armeabi-v7a.qpa`. On platforms where multiple different driver
190 builds (for example 64-bit and 32-bit) are present, CTS logs must be provided
191 for each driver build as part of the submission package.
193 The CTS build must always be done from clean git repository that doesn't have any
194 uncommitted changes. Thus it is necessary to run and capture output of `git
195 status` and `git log` (2) in the source directory:
197 git status > <submission pkg dir>/git-status.txt
198 git log --first-parent <release tag>^..HEAD > <submission pkg dir>/git-log.txt
200 Any changes made to CTS must be committed to the local repository, and provided
201 as part of the submission package (3). This can be done by running:
203 git format-patch -o <submission pkg dir> <release tag>..HEAD
205 In general, bugfixes and changes to platform-specific code (mostly under
206 `framework/platform`) are allowed. The commit message for each change must
207 include a clear description of the change and why it is necessary. Non-porting
208 related changes must be accompanied by a waiver (see below).
210 NOTE: When cherry-picking patches on top of release tag, please use `git cherry-pick -x`
211 to include original commit hash in the commit message.
213 Conformance statement (4) must be included in a file called `STATEMENT-<adopter>`
214 and must contain following:
216 CONFORM_VERSION: <git tag of CTS release>
217 PRODUCT: <string-value>
221 Note that product/cpu/os information is also captured in `dEQP-VK.info.*` tests
222 if `vk::Platform::describePlatform()` is implemented.
224 If the submission package covers multiple products, you can list them by appending
225 additional `PRODUCT:` lines to the conformance statement. For example:
227 CONFORM_VERSION: vulkan-cts-1.0.2.0
232 The actual submission package consists of the above set of files which must
233 be bundled into a gzipped tar file named `VK10_<adopter><_info>.tgz`. `<adopter>`
234 is the name of the Adopting member company, or some recognizable abbreviation.
235 The `<_info>` field is optional. It may be used to uniquely identify a submission
236 by OS, platform, date, or other criteria when making multiple submissions.
238 One way to create a suiteable gzipped tar file is to execute the command:
240 tar -cvzf <filename.tgz> -C <submission pkg dir> .
242 where `<submission pkg dir>` is the directory containing the files from (1)-(4)
243 from above. A submission package must contain all of the files listed above,
244 and only those files.
246 As an example submission package could contain:
251 0001-Remove-Waived-Filtering-Tests.patch
252 0002-Fix-Pipeline-Parameters.patch
253 TestResults-armeabi-v7a.qpa
254 TestResults-arm64-v8a.qpa
260 The process for requesting a waiver is to report the issue by filing a bug
261 report in the Gitlab VulkanCTS project (TODO Github?). When creating the
262 submission package, include references to the waiver in the commit message of
263 the relevant change. Including as much information as possible in your bug
264 report (including a unified diff or a merge request of suggested file changes)
265 will ensure the issue can be progressed as rapidly as possible. Issues must
266 be labeled "Waiver" (TODO!) and identify the version of the CTS and affected
272 Conformance run is considered passing if all tests finish with allowed result
273 codes. Test results are contained in the TestResults.qpa log. Each
274 test case section contains XML tag Result, for example:
276 <Result StatusCode="Pass">Not validated</Result>
278 The result code is the value of the StatusCode attribute. Following status
286 Submission package can be verified using `external/vulkancts/scripts/verify_submission.py`
287 script. The script takes two arguments: path to extracted submission package
288 and path to current mustpass list. For example:
290 python external/vulkancts/scripts/verify_submission.py VK_10_Khronos_1/ external/vulkancts/mustpass/1.0.2/vk-default.txt
296 Vulkan support from Platform implementation requires providing
297 `getVulkanPlatform()` method in `tcu::Platform` class implementation.
299 See `framework/common/tcuPlatform.hpp` and examples in
300 `framework/platform/win32/tcuWin32Platform.cpp` and
301 `framework/platform/android/tcuAndroidPlatform.cpp`.
303 If any WSI extensions are supported, platform port must also implement
304 methods for creating native display (`vk::Platform::createWsiDisplay`)
305 and window handles (`vk::wsi::Display::createWindow`). Otherwise tests
306 under `dEQP-VK.wsi` will fail.
312 For testing and development purposes it might be useful to be able to run
313 tests on dummy Vulkan implementation. One such implementation is provided in
314 vkNullDriver.cpp. To use that, implement `vk::Platform::createLibrary()` with
315 `vk::createNullDriver()`.
321 Vulkan CTS framework includes first-party support for validation layers, that
322 can be turned on with `--deqp-validation=enable` command line option.
324 When validation is turned on, default instance and device will be created with
325 validation layers enabled and debug callback is registered to record any
326 messages. Debug messages collected during test execution will be included at
327 the end of the test case log.
329 If any validation errors are found, test result will be set to `InternalError`.
331 By default `VK_DEBUG_REPORT_INFORMATION_BIT_EXT` and `_DEBUG_BIT_EXT` messages
332 are excluded from the log, but that can be customized by modifying
333 `vkt::TestCaseExecutor::deinit()` in `vktTestPackage.cpp`.
339 Vulkan test module can be used with Cherry (GUI for test execution and
340 analysis). Cherry is available at
341 https://android.googlesource.com/platform/external/cherry. Please follow
342 instructions in README to get started.
344 Before first launch, and every time test hierarchy has been modified, test
345 case list must be refreshed by running:
347 python scripts/build_caselists.py path/to/cherry/data
349 Cherry must be restarted for the case list update to take effect.