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