Merge vk-gl-cts/main into vk-gl-cts/dev/VK_EXT_attachment_feedback_loop_layout
[platform/upstream/VK-GL-CTS.git] / external / vulkancts / README.md
1 Vulkan CTS README
2 =================
3
4 This document describes how to build and run Vulkan Conformance Test suite.
5
6 Vulkan CTS is built on the dEQP framework.
7 Up-to-date documentation for dEQP is available at:
8
9 * [The VK-GL-CTS wiki for Khronos members](https://gitlab.khronos.org/Tracker/vk-gl-cts/wikis/home)
10 * [The VK-GL-CTS wiki for non-Khronos members](https://github.com/KhronosGroup/VK-GL-CTS/wiki)
11
12
13 Requirements
14 ------------
15
16 ### Common
17
18 The following tools must be installed and present in the PATH variable:
19
20  * Git (for checking out sources)
21  * Python 3.x (for the build related scripts, some other scripts still use Python 2.7.x)
22  * CMake 3.10.2 or newer
23
24 ### Win32
25
26  * Visual Studio 2015 or newer (glslang uses several C++11 features)
27
28 ### Linux
29
30  * Standard toolchain (make, gcc/clang)
31  * If you have X11 installed, then the build assumes you also have the `GL/glx.h` header
32    file.
33     * You can get this from the `mesa-common-dev` Ubuntu package.
34
35 ### MacOS
36
37  * Xcode
38
39 Vulkan SDK for macOS includes a MoltenVK runtime library which is recommended method for
40 developing a Vulkan application.
41
42 ### Android
43
44  * Android NDK r17c or later.
45  * Android SDK with: SDK Tools, SDK Platform-tools, SDK Build-tools, and API 28
46  * Java Development Kit (JDK)
47  * Windows: either NMake or Ninja in PATH
48
49 If you have downloaded the Android SDK command line tools package (25.2.3 or higher) then
50 you can install the necessary components by running:
51
52         tools/bin/sdkmanager tools platform-tools 'build-tools;25.0.2' 'platforms;android-28'
53
54
55 Building CTS
56 ------------
57
58 To build dEQP, you need first to download sources for zlib, libpng, jsoncpp, glslang,
59 vulkan-docs, spirv-headers, and spirv-tools.
60
61 To download sources, run:
62
63         python3 external/fetch_sources.py
64
65 You may need to re-run `fetch_sources.py` to update to the latest glslang,
66 vulkan-docs and spirv-tools revisions occasionally.
67
68 You also need to install lxml python module by running:
69
70         python3 -m pip install lxml
71
72 With CMake out-of-source builds are always recommended. Create a build directory
73 of your choosing, and in that directory generate Makefiles or IDE project
74 using cmake.
75
76
77 ### Windows x86-32
78
79         cmake <path to vulkancts> -G"Visual Studio 14"
80         start dEQP-Core-default.sln
81
82 ### Windows x86-64
83
84         cmake <path to vulkancts> -G"Visual Studio 14 Win64"
85         start dEQP-Core-default.sln
86
87 ### Linux 32-bit Debug
88
89         cmake <path to vulkancts> -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32
90         make -j
91
92 Release build can be done by using -DCMAKE_BUILD_TYPE=Release
93
94 If building for 32-bit x86 with GCC, you probably also want to add `-msse2
95 -mfpmath=sse` to ensure that you get correct IEEE floating-point behavior.
96
97 ### Linux 64-bit Debug
98
99         cmake <path to vulkancts> -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_FLAGS=-m64 -DCMAKE_CXX_FLAGS=-m64
100         make -j
101
102
103 ### MacOS 64-bit Debug
104
105         cmake <path to vulkancts> -DCMAKE_BUILD_TYPE=Debug -DDEQP_TARGET=osx -DCMAKE_C_FLAGS=-m64 -DCMAKE_CXX_FLAGS=-m64
106         make -j
107
108 ### Android
109
110 Following command will build dEQP.apk:
111
112         python3 scripts/android/build_apk.py --sdk <path to Android SDK> --ndk <path to Android NDK>
113
114 By default the CTS package will be built for the Android API level 28.
115 Another API level may be supplied using --native-api command line option.
116
117 The package can be installed by either running:
118
119         python3 scripts/android/install_apk.py
120
121 By default the CTS package will contain libdeqp.so built for armeabi-v7a, arm64-v8a,
122 x86, and x86_64 ABIs, but that can be changed at build time by passing the --abis command line
123 option to `scripts/android/build_apk.py`.
124
125 To pick which ABI to use at _install time_, use the following command instead:
126
127         adb install -g --abi <ABI name> <build-root>/package/dEQP.apk
128
129
130 Building Mustpass
131 -----------------
132
133 Current Vulkan mustpass is checked into repository and can be found at:
134
135         external/vulkancts/mustpass/main/vk-default.txt
136
137 Current Vulkan SC mustpass can be found at:
138
139         external/vulkancts/mustpass/master/vksc-default.txt
140
141 This file contains list of files located in vk-default or vksc-default subdirectory. Those files contain
142 tests from bigest test groups and together they contain all test cases that should pass.
143
144 Vulkan CTS mustpass can be re-generated by running:
145
146         python3 <vulkancts>/external/vulkancts/scripts/build_mustpass.py
147
148
149 Running CTS
150 -----------
151
152 Following command line options MUST be used when running CTS:
153
154         --deqp-caselist-file=<vulkancts>/external/vulkancts/mustpass/main/vk-default.txt (or vksc-default.txt for Vulkan SC implementations)
155         --deqp-log-images=disable
156         --deqp-log-shader-sources=disable
157
158 If an implementation ships with [implicit layers](https://github.com/KhronosGroup/Vulkan-Loader/blob/master/loader/LoaderAndLayerInterface.md#implicit-vs-explicit-layers) enabled, then such layers must be enabled
159 when running CTS.
160
161 In addition, on multi-device systems the device for which conformance is claimed
162 can be selected with:
163
164         --deqp-vk-device-id=<value>
165
166 To speed up the conformance run on some platforms the following command line
167 option may be used to disable frequent fflush() calls to the output logs:
168
169         --deqp-log-flush=disable
170
171 By default, the test log will be written into the path "TestResults.qpa". If the
172 platform requires a different path, it can be specified with:
173
174         --deqp-log-filename=<path>
175
176 By default, the CTS will expect to find its test resource files in the current
177 working directory. This can be overridden with:
178
179         --deqp-archive-dir=<path>
180
181 By default, the shader cache will be written into the path "shadercache.bin". If the
182 platform requires a different path, it can be specified with:
183
184         --deqp-shadercache-filename=<path>
185
186 If the shader cache is not desired, it can be disabled with:
187
188         --deqp-shadercache=disable
189
190 CTS execution may be split into N fractions ( for the purpose of running it in parallel ) using
191
192         --deqp-fraction=I,N
193
194 where I denotes index of current CTS execution ( I=[0..N-1], N=[1..8] )
195
196 When collecting results for a Conformance Submission Package the number of fractions must not exceed 8,
197 and a list of mandatory information tests for each fraction must be supplied:
198
199         --deqp-fraction-mandatory-caselist-file=<vulkancts>external/vulkancts/mustpass/main/vk-fraction-mandatory-tests.txt
200
201 To specify file containing waived tests that are omitted only by specified vendor and renderer/device
202 the following command line option may be used:
203
204         --deqp-waiver-file=<path>
205
206 To make log more clear for high level shader source analysis
207 output of decompiled SPIR-V shader sources can be disabled:
208
209         --deqp-log-decompiled-spirv=disable
210
211 Also non-informative empty LogInfo sections can be removed
212 from output into log by specifying:
213
214         --deqp-log-empty-loginfo=disable
215
216 There are several additional options used only in conjunction with Vulkan SC tests
217 ( for Vulkan SC CTS tests deqp-vksc application should be used ).
218
219 To define minimum size of the command pool use parameter:
220
221         --deqp-command-pool-min-size=<value>
222
223 To define minimum size of a single command buffer use parameter:
224
225         --deqp-command-buffer-min-size=<value>
226
227 If minimum size will not be defined, then the size of single command buffer will be estimated
228 from number of commands multiplied by value of parameter deqp-command-default-size.
229 Default size of a single command may be defined using:
230
231         --deqp-command-default-size=<value>
232
233 Another group of Vulkan SC options enable use of offline pipeline compiler:
234
235         --deqp-pipeline-compiler=<value>
236         --deqp-pipeline-dir=<value>
237         --deqp-pipeline-args=<value>
238         --deqp-pipeline-file=<value>
239         --deqp-pipeline-logfile=<value>
240         --deqp-pipeline-prefix=<value>
241
242 In case of offline pipeline compilers the size of the pipeline will be returned by
243 pipeline compiler. If we use internal pipeline compilation then pipeline size will be
244 equal to default size. This size may be modified using:
245
246         --deqp-pipeline-default-size=<value>
247
248 Vulkan SC may be implemented on embedded platform that is not able to
249 read from/write to files, write logs, etc. In this case you may use
250 external server that will perform these tasks on another machine:
251
252         --deqp-server-address=<value>
253
254 In Vulkan SC CTS tests are performed twice. You may define how many tests
255 are performed on separate process in a single batch:
256
257         --deqp-subprocess-test-count=<value>
258
259 Above mentioned parameter works as default value for all tests.
260 You may also define how many tests are performed on a separate process
261 for specific test tree branch using parameter:
262
263         --deqp-subprocess-cfg-file=<path>
264
265 File should contain test pattern followed by numeric value, for example:
266 dEQP-VKSC.api.copy_and_blit.core.image_to_image.dimensions.src32768x4_dst32768x4.*, 5
267 dEQP-VKSC.texture.explicit_lod.2d.sizes.*, 20
268 dEQP-VKSC.texture.explicit_lod.2d.sizes.128x128_*, 4
269
270 There is also one option used by CTS internally and should not be used manually.
271 It informs deqp-vksc application that it works as subprocess:
272
273         --deqp-subprocess=[enable|disable]
274
275 No other command line options are allowed.
276
277 ### Win32
278
279         Vulkan:
280
281         cd <builddir>/external/vulkancts/modules/vulkan
282         Debug\deqp-vk.exe --deqp-caselist-file=...
283
284         Vulkan SC:
285
286         cd <builddir>/external/vulkancts/modules/vulkan
287         Debug\deqp-vksc.exe --deqp-caselist-file=...
288
289 Test log will be written into TestResults.qpa
290
291 ### Linux
292
293         Vulkan:
294
295         cd <builddir>/external/vulkancts/modules/vulkan
296         ./deqp-vk --deqp-caselist-file=...
297
298         Vulkan SC:
299
300         cd <builddir>/external/vulkancts/modules/vulkan
301         ./deqp-vksc --deqp-caselist-file=...
302
303 ### MacOS
304
305         cd <builddir>/external/vulkancts/modules/vulkan
306         ./deqp-vk --deqp-caselist-file=...
307
308 ### Android
309
310         adb push <vulkancts>/external/vulkancts/mustpass/main/vk-default.txt /sdcard/vk-default.txt
311         adb shell
312
313 In device shell:
314
315         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"
316
317 Test progress will be written to device log and can be displayed with:
318
319         adb logcat -s dEQP
320
321 Test log will be written into `/sdcard/TestResults.qpa`.
322
323
324 Conformance Submission Package Requirements
325 -------------------------------------------
326
327 The conformance submission package must contain the following:
328
329 1. Full test logs (`TestResults.qpa`) from CTS runs against all driver builds and all fractions
330 2. Result of `git status` and `git log` from CTS source directory
331 3. Any patches used on top of release tag
332 4. Conformance statement
333
334 Test logs (1) should be named `<submission pkg dir>/TestResults-<driver build type>-<fraction id>-of-<total fractions>.qpa`,
335 for example `TestResults-armeabi-v7a-1-of-8.qpa`. On platforms where multiple different driver
336 builds (for example 64-bit and 32-bit) are present, CTS logs must be provided
337 for each driver build as part of the submission package. If CTS run was split into multiple
338 fractions then result files for all fractions must be provided, each file must
339 contain results of the mandatory information tests.
340
341 Fractions may be run on different physical devices but each device must represent
342 the same Conformant Product.
343
344 Test logs generated on a system which exposes more than one physical device
345 in a device group can be used for products that expose one or more physical
346 devices in their device group.
347
348 The CTS build must always be done from clean git repository that doesn't have any
349 uncommitted changes. Thus it is necessary to run and capture output of `git
350 status` and `git log` (2) in the source directory:
351
352         git status > <submission pkg dir>/git-status.txt
353         git log --first-parent <release tag>^..HEAD > <submission pkg dir>/git-log.txt
354
355 Any changes made to CTS must be committed to the local repository, and provided
356 as part of the submission package (3). This can be done by running:
357
358         git format-patch -o <submission pkg dir> <release tag>..HEAD
359
360 Changes to platform-specific code (mostly under `framework/platform`)
361 are allowed. The commit message for each change must include a clear
362 description of the change and why it is necessary.
363 For Vulkan SC, changes are also permitted to the vksc-pipeline-compiler
364 (under `vkscpc/`) and the vksc-server (under `vkscserver/`).
365
366 Bugfixes to the tests are allowed. Before being used for a submission,
367 bugfixes must be accepted and merged into the CTS repository.
368 `git cherry-pick` is strongly recommended as a method of applying bug fixes.
369
370 If command line parameter --deqp-subprocess-cfg-file was used then the file
371 pointed by this parameter must also be added to submission package.
372
373 Other changes must be accompanied by a waiver (see below).
374
375 NOTE: When cherry-picking patches on top of release tag, please use `git cherry-pick -x`
376 to include original commit hash in the commit message.
377
378 Conformance statement (4) must be included in a file called `STATEMENT-<adopter>`
379 and must contain following:
380
381         CONFORM_VERSION:         <git tag of CTS release>
382         PRODUCT:                 <string-value>
383         CPU:                     <string-value>
384         OS:                      <string-value>
385
386 Note that product/cpu/os information is also captured in `dEQP-VK.info.*` tests
387 if `vk::Platform::describePlatform()` is implemented.
388
389 If the submission package covers multiple products, you can list them by appending
390 additional `PRODUCT:` lines to the conformance statement. For example:
391
392         CONFORM_VERSION:         vulkan-cts-1.2.6.0
393         PRODUCT:                 Product A
394         PRODUCT:                 Product B
395         ...
396
397 The actual submission package consists of the above set of files which must
398 be bundled into a gzipped tar file.
399
400 For Vulkan this must be named `VK<API major><API minor>_<adopter><_info>.tgz`.
401
402 For Vulkan SC this must be named `VKSC<API major><API minor>_<adopter><_info>.tgz`.
403
404 `<API major>` is the major version of the Vulkan {SC} API specification.
405 `<API minor>`is the minor version of the Vulkan {SC} API specification.
406
407 `<adopter>` is the name of the Adopting member company, or some recognizable abbreviation.
408 The `<_info>` field is optional. It may be used to uniquely identify a submission
409 by OS, platform, date, or other criteria when making multiple submissions.
410 For example, a company XYZ may make a submission for a Vulkan 1.1 implementation named
411 `VK11_XYZ_PRODUCTA_Windows10.tgz`
412
413 One way to create a suiteable gzipped tar file is to execute the command:
414
415         tar -cvzf <filename.tgz> -C <submission pkg dir> .
416
417 where `<submission pkg dir>` is the directory containing the files from (1)-(4)
418 from above. A submission package must contain all of the files listed above,
419 and only those files.
420
421 As an example submission package could contain:
422
423         STATEMENT-Khronos
424         git-log.txt
425         git-status.txt
426         0001-Remove-Waived-Filtering-Tests.patch
427         0002-Fix-Pipeline-Parameters.patch
428         TestResults-armeabi-v7a.qpa
429         TestResults-arm64-v8a.qpa
430
431
432 Waivers
433 -------
434
435 The process for requesting a waiver is to report the issue by filing a bug
436 report in the Gitlab VulkanCTS project (TODO Github?). When creating the
437 submission package, include references to the waiver in the commit message of
438 the relevant change. Including as much information as possible in your bug
439 report (including a unified diff or a merge request of suggested file changes)
440 will ensure the issue can be progressed as rapidly as possible. Issues must
441 be labeled "Waiver" (TODO!) and identify the version of the CTS and affected
442 tests.
443
444 Conformance Criteria
445 --------------------
446
447 Conformance run is considered passing if all tests finish with allowed result
448 codes. Test results are contained in the TestResults.qpa log. Each
449 test case section contains XML tag Result, for example:
450
451         <Result StatusCode="Pass">Not validated</Result>
452
453 The result code is the value of the StatusCode attribute. Following status
454 codes are allowed:
455
456         Pass
457         NotSupported
458         QualityWarning
459         CompatibilityWarning
460         Waiver
461
462 Submission package can be verified using `verify_submission.py`
463 script located in [VK-GL-CTS-Tools](https://github.com/KhronosGroup/VK-GL-CTS-Tools).
464
465 Vulkan platform port
466 --------------------
467
468 Vulkan support from Platform implementation requires providing
469 `getVulkanPlatform()` method in `tcu::Platform` class implementation.
470
471 See `framework/common/tcuPlatform.hpp` and examples in
472 `framework/platform/win32/tcuWin32Platform.cpp` and
473 `framework/platform/android/tcuAndroidPlatform.cpp`.
474
475 If any WSI extensions are supported, platform port must also implement
476 methods for creating native display (`vk::Platform::createWsiDisplay`)
477 and window handles (`vk::wsi::Display::createWindow`). Otherwise tests
478 under `dEQP-VK.wsi` will fail.
479
480
481 Null (dummy) driver
482 -------------------
483
484 For testing and development purposes it might be useful to be able to run
485 tests on dummy Vulkan implementation. One such implementation is provided in
486 vkNullDriver.cpp. To use that, implement `vk::Platform::createLibrary()` with
487 `vk::createNullDriver()`.
488
489
490 Validation Layers
491 -----------------
492
493 Vulkan CTS framework includes first-party support for validation layers, that
494 can be turned on with `--deqp-validation=enable` command line option.
495
496 When validation is turned on, default instance and device will be created with
497 validation layers enabled and debug callback is registered to record any
498 messages. Debug messages collected during test execution will be included at
499 the end of the test case log.
500
501 In addition, when the `--deqp-print-validation-errors` command line option is
502 used, validation errors are additionally printed to standard error in the
503 moment they are generated.
504
505 If any validation errors are found, test result will be set to `InternalError`.
506
507 By default `VK_DEBUG_REPORT_INFORMATION_BIT_EXT` and `_DEBUG_BIT_EXT` messages
508 are excluded from the log, but that can be customized by modifying
509 `vk::DebugReportMessage::shouldBeLogged()` in `vkDebugReportUtil.hpp`.
510
511 On the Android target, layers can be added to the APK during the build process
512 by setting the `--layers-path` command line option to point into the NDK or to
513 a locally-built layers tree. The layers are expected to be found under $abi/
514 under the layers path.
515
516
517 Cherry GUI
518 ----------
519
520 Vulkan test module can be used with Cherry (GUI for test execution and
521 analysis). Cherry is available at
522 https://android.googlesource.com/platform/external/cherry. Please follow
523 instructions in README to get started.
524
525 Before first launch, and every time test hierarchy has been modified, test
526 case list must be refreshed by running:
527
528         python scripts/build_caselists.py path/to/cherry/data
529
530 Cherry must be restarted for the case list update to take effect.
531
532
533 Shader Optimizer
534 ----------------
535
536 Vulkan CTS can be optionally run with the shader optimizer enabled. This
537 is an experimental feature which can be used to further stress both the
538 drivers as well as the optimizer itself. The shader optimizer is disabled
539 by default.
540
541 The following command line options can be used to configure the shader
542 optimizer:
543
544         --deqp-optimization-recipe=<number>
545
546 The list of the optimization recipes can be found and customized in the
547 `optimizeCompiledBinary()` function in `vkPrograms.cpp`.
548
549 As of this writing, there are 2 recipes to choose from:
550
551         0. Disabled (default)
552         1. Optimize for performance
553         2. Optimize for size
554
555 The performance and size optimization recipes are defined by the spir-v
556 optimizer, and will change from time to time as the optimizer matures.
557
558         --deqp-optimize-spirv=enable
559
560 This option is not required to run the optimizer. By default, the shader
561 optimizer only optimizes shaders generated from GLSL or HLSL, and leaves
562 hand-written SPIR-V shaders alone.
563
564 Many of the hand-written SPIR-V tests stress specific features of the
565 SPIR-V which might get optimized out. Using this option will enable the
566 optimizer on the hand-written SPIR-V as well, which may be useful in
567 finding new bugs in drivers or the optimizer itself, but will likely
568 invalidate the tests themselves.
569
570
571 Shader Cache
572 ------------
573
574 The Vulkan CTS framework contains a shader cache for speeding up the running
575 of the CTS. Skipping shader compilation can significantly reduce runtime,
576 especially for repeated runs.
577
578 Default behavior is to have the shader cache enabled, but truncated at the
579 start of the CTS run. This still gives the benefit of skipping shader
580 compilation for identical shaders in different tests (which there are many),
581 while making sure that the shader cache file does not grow indefinitely.
582
583 The shader cache identifies the shaders by hashing the shader source code
584 along with various bits of information that may affect the shader compilation
585 (such as shader stage, CTS version, possible compilation flags, etc). If a
586 cached shader with matching hash is found, a byte-by-byte comparison of the
587 shader sources is made to make sure that the correct shader is being
588 retrieved from the cache.
589
590 The behavior of the shader cache can be modified with the following command
591 line options:
592
593         --deqp-shadercache=disable
594
595 Disable the shader cache. All shaders will be compiled every time.
596
597         --deqp-shadercache-filename=<filename>
598
599 Set the name of the file where the cached shaders will be stored. This
600 option may be required for the shader cache to work at all on Android
601 targets.
602
603         --deqp-shadercache-truncate=disable
604
605 Do not truncate the shader cache file at startup. No shader compilation will
606 occur on repeated runs of the CTS.
607
608         --deqp-shadercache-ipc=enable
609
610 Enables the use of inter-process communication primitives to allow several
611 instances of CTS to share a single cache file. All of the instances must
612 use the same shader cache filename.
613
614 Note that if one instance should crash while holding the cache file lock,
615 the other instances will hang. The lock is only held while reading or
616 writing to the cache, so crashes are unlikely.
617
618 In case of a crash outside the cache file lock, the named shared memory
619 and shared semaphore may be left behind. These will be re-used by CTS on
620 subsequent runs, so additional memory leak will not occur. Shader cache
621 truncate may not work in this case. On Windows, when all instances of
622 CTS have terminated the shared resources get automatically cleaned up.
623
624 RenderDoc
625 ---------
626 The RenderDoc (https://renderdoc.org/) graphics debugger may be used to debug
627 Vulkan tests.
628
629 Following command line option should be used when launching tests from
630 RenderDoc UI:
631
632         --deqp-renderdoc=enable
633
634 This causes the framework to interface with the debugger and mark each dEQP
635 test case as a separate 'frame', just for the purpose of capturing. The frames
636 are added using RenderDoc 'In-Application API', instead of swapchain operations.
637
638 Third Party Runners
639 -------------------
640
641 Some CTS tests use third-party runners. By default all tests are executed
642 regardless of runner type (`any`). To exclude all tests using any of the
643 external runners (`none`) or to only include tests using a certain runner:
644
645         --deqp-runner-type=(any|none|amber)
646
647 Vulkan SC Conformance Test suite
648 --------------------------------
649
650 This project is also able to perform conformance tests for Vulkan SC
651 implementations. For this purpose Vulkan CTS framework has been adapted
652 to Vulkan SC requirements:
653
654 - Vulkan SC CTS contains its own mustpass list
655
656   external/vulkancts/mustpass/master/vksc-default.txt
657
658 - Vulkan SC CTS uses its own executable module to perform tests: deqp-vksc
659
660 - Each test in deqp-vksc is performed twice.
661   First test run is performed in main process and its purpose is to collect
662   information about used pipelines, number of created Vulkan objects etc.
663   Second test run is done in separate process ( subprocess ) and it performs
664   the real tests.
665
666 - Vulkan SC pipelines may be compiled using offline pipeline compiler
667   delivered by implementation vendor. You can use command line parameters
668   to achieve this ( see parameters: --deqp-pipeline-compiler, --deqp-pipeline-dir,
669   --deqp-pipeline-args, --deqp-pipeline-file, --deqp-pipeline-logfile,
670   --deqp-pipeline-prefix )
671
672   Reference offline pipeline compiler was created to showcase how input and output
673   should look like for such application. It uses Vulkan API to create pipeline cache.
674   The name of the executable is vksc-pipeline-compiler.
675
676 - Some of the future Vulkan SC implementations may not have a possibility to use
677   filesystem, create pipeline caches or log results to file. For these implementations
678   Vulkan SC CTS contains server application that may handle such requests on external
679   host machine. Define parameter --deqp-server-address in deqp-vksc application
680   to use external server.
681   Server application's name is vksc-server and its parameters are listed below,
682   in Command Line section.
683
684 Command Line
685 ------------
686 Full list of parameters for the `deqp-vk` and `deqp-vksc` modules:
687
688 OpenGL and OpenCL parameters not affecting Vulkan API were suppressed.
689
690   -h, --help
691     Show this help
692
693   -n, --deqp-case=<value>
694     Test case(s) to run, supports wildcards (e.g. dEQP-GLES2.info.*)
695
696   --deqp-caselist=<value>
697     Case list to run in trie format (e.g. {dEQP-GLES2{info{version,renderer}}})
698
699   --deqp-caselist-file=<value>
700     Read case list (in trie format) from given file
701
702   --deqp-caselist-resource=<value>
703     Read case list (in trie format) from given file located application's assets
704
705   --deqp-stdin-caselist
706     Read case list (in trie format) from stdin
707
708   --deqp-log-filename=<value>
709     Write test results to given file
710     default: 'TestResults.qpa'
711
712   --deqp-runmode=[execute|xml-caselist|txt-caselist|stdout-caselist]
713     Execute tests, or write list of test cases into a file
714     default: 'execute'
715
716   --deqp-caselist-export-file=<value>
717     Set the target file name pattern for caselist export
718     default: '${packageName}-cases.${typeExtension}'
719
720   --deqp-watchdog=[enable|disable]
721     Enable test watchdog
722     default: 'disable'
723
724   --deqp-crashhandler=[enable|disable]
725     Enable crash handling
726     default: 'disable'
727
728   --deqp-base-seed=<value>
729     Base seed for test cases that use randomization
730     default: '0'
731
732   --deqp-test-iteration-count=<value>
733     Iteration count for cases that support variable number of iterations
734     default: '0'
735
736   --deqp-visibility=[windowed|fullscreen|hidden]
737     Default test window visibility
738     default: 'windowed'
739
740   --deqp-surface-width=<value>
741     Use given surface width if possible
742     default: '-1'
743
744   --deqp-surface-height=<value>
745     Use given surface height if possible
746     default: '-1'
747
748   --deqp-surface-type=[window|pixmap|pbuffer|fbo]
749     Use given surface type
750     default: 'window'
751
752   --deqp-screen-rotation=[unspecified|0|90|180|270]
753     Screen rotation for platforms that support it
754     default: '0'
755
756   --deqp-vk-device-id=<value>
757     Vulkan device ID (IDs start from 1)
758     default: '1'
759
760   --deqp-vk-device-group-id=<value>
761     Vulkan device Group ID (IDs start from 1)
762     default: '1'
763
764   --deqp-log-images=[enable|disable]
765     Enable or disable logging of result images
766     default: 'enable'
767
768   --deqp-log-shader-sources=[enable|disable]
769     Enable or disable logging of shader sources
770     default: 'enable'
771
772   --deqp-test-oom=[enable|disable]
773     Run tests that exhaust memory on purpose
774     default: 'enable'
775
776   --deqp-archive-dir=<value>
777     Path to test resource files
778     default: '.'
779
780   --deqp-log-flush=[enable|disable]
781     Enable or disable log file fflush
782     default: 'enable'
783
784   --deqp-validation=[enable|disable]
785     Enable or disable test case validation
786     default: 'disable'
787
788   --deqp-print-validation-errors
789     Print validation errors to standard error
790
791   --deqp-optimization-recipe=<value>
792     Shader optimization recipe (0=disabled, 1=performance, 2=size)
793     default: '0'
794
795   --deqp-optimize-spirv=[enable|disable]
796     Apply optimization to spir-v shaders as well
797     default: 'disable'
798
799   --deqp-shadercache=[enable|disable]
800     Enable or disable shader cache
801     default: 'enable'
802
803   --deqp-shadercache-filename=<value>
804     Write shader cache to given file
805     default: 'shadercache.bin'
806
807   --deqp-shadercache-truncate=[enable|disable]
808     Truncate shader cache before running tests
809     default: 'enable'
810
811   --deqp-renderdoc=[enable|disable]
812     Enable RenderDoc frame markers
813     default: 'disable'
814
815   --deqp-fraction=<value>
816     Run a fraction of the test cases (e.g. N,M means run group%M==N)
817     default: ''
818
819   --deqp-fraction-mandatory-caselist-file=<value>
820     Case list file that must be run for each fraction
821     default: ''
822
823   --deqp-waiver-file=<value>
824     Read waived tests from given file
825     default: ''
826
827   --deqp-runner-type=[any|none|amber]
828     Filter test cases based on runner
829     default: 'any'
830
831   --deqp-terminate-on-fail=[enable|disable]
832     Terminate the run on first failure
833     default: 'disable'
834
835   --deqp-subprocess=[enable|disable]
836     Inform app that it works as subprocess (Vulkan SC only, do not use manually)
837     default: 'disable'
838
839   --deqp-subprocess-test-count=<value>
840     Define default number of tests performed in subprocess (Vulkan SC only)
841     default: '65536'
842
843   --deqp-subprocess-cfg-file=<path>
844         Config file defining number of tests performed in subprocess for specific test branches (Vulkan SC only)
845     default: ''
846
847   --deqp-server-address=<value>
848     Server address (host:port) responsible for shader compilation (Vulkan SC only)
849     default: ''
850
851   --deqp-command-pool-min-size=<value>
852     Define minimum size of the command pool (in bytes) to use (Vulkan SC only)
853         default: '0'
854
855   --deqp-command-buffer-min-size=<value>
856     Define minimum size of the command buffer (in bytes) to use (Vulkan SC only)
857         default: '0'
858
859   --deqp-command-default-size=<value>
860     Define default single command size (in bytes) to use (Vulkan SC only)
861         default: '256'
862
863   --deqp-pipeline-default-size=<value>
864     Define default pipeline size (in bytes) to use (Vulkan SC only)
865         default: '16384'
866
867   --deqp-pipeline-compiler=<value>
868     Path to offline pipeline compiler (Vulkan SC only)
869     default: ''
870
871   --deqp-pipeline-dir=<value>
872     Offline pipeline data directory (Vulkan SC only)
873     default: ''
874
875   --deqp-pipeline-args=<value>
876     Additional compiler parameters (Vulkan SC only)
877     default: ''
878
879   --deqp-pipeline-file=<value>
880     Output file with pipeline cache (Vulkan SC only, do not use manually)
881     default: ''
882
883   --deqp-pipeline-logfile=<value>
884     Log file for pipeline compiler (Vulkan SC only, do not use manually)
885     default: ''
886
887   --deqp-pipeline-prefix=<value>
888     Prefix for input pipeline compiler files (Vulkan SC only, do not use manually)
889     default: ''
890
891 Full list of parameters for the `vksc-server` application:
892
893   --port
894     Port
895     default: '59333'
896
897   --log
898     Log filename
899     default: 'dummy.log'
900
901   --pipeline-compiler
902     Path to offline pipeline compiler
903     default: ''
904
905   --pipeline-dir
906     Offline pipeline data directory
907     default: ''
908
909   --pipeline-file
910     Output file with pipeline cache
911     default: ''
912
913   --pipeline-log
914     Compiler log file
915     default: 'compiler.log'
916
917   --pipeline-args
918     Additional compiler parameters
919     default: ''