1 OpenGL and OpenGL ES 2.0/3.X Conformance Test Instructions
4 This document describes how to build, port, and run the OpenGL and OpenGL ES
5 2.0/3.X conformance tests, and how to verify and submit test results.
7 The Conformance Tests are built on dEQP framework. dEQP documentation is
8 available at http://source.android.com/devices/graphics/testing.html
12 ------------------------
13 - [Test History](#test-history)
14 - [Introduction](#introduction)
15 - [Test Environment Requirements](#test-environment-requirements)
16 - [Configuring and Building the Tests](#configuring-and-building-the-tests)
17 - [Configuration](#configuration)
18 - [Building the Tests](#building-the-tests)
23 - [Common Porting Changes](#common-porting-changes)
24 - [Other Allowable Porting Changes](#other-allowable-porting-changes)
25 - [Running the Tests](#running-the-tests)
26 - [Conformance runs](#conformance-runs)
27 - [Linux and Windows](#linux-and-windows)
28 - [Android](#android-1)
29 - [Running Subsets](#running-subsets)
30 - [Command line options](#command-line-options)
31 - [Understanding the Results](#understanding-the-results)
32 - [Test Logs](#test-logs)
33 - [Debugging Test Failures](#debugging-test-failures)
35 - [Creating a Submission Package](#creating-a-submission-package)
36 - [Submission Update Package](#submission-update-package)
37 - [Passing Criteria](#passing-criteria)
38 - [Troubleshooting](#troubleshooting)
39 - [Crashes early on in the run](#crashes-early-on-in-the-run)
40 - [Build fails](#build-fails)
41 - [Adding new tests](#adding-new-tests)
42 - [Acknowledgments](#acknowledgments)
43 - [Revision History](#revision-history)
46 ------------------------
47 The OpenGL and OpenGL ES Conformance Tests are expanded versions of the
48 OpenGL ES 2.x Conformance Test. Much of the development was done by Symbio, Inc.
49 under a contract with The Khronos Group. drawElements donated a considerable
50 number of new tests and a new execution framework for version 1.1.
51 The tests are built from the same source code base, although some individual
52 feature tests are specific to OpenGL or OpenGL ES and their specification
53 versions, and compilation options differing between OpenGL and OpenGL ES affect
54 how the tests are compiled and executed in some cases.
57 ------------------------
59 This document contains instructions for certifying conformance of implementations
60 of the OpenGL and OpenGL ES APIs. The steps of the process are as follows:
62 1. Configure the conformance tests and port them to your platform.
63 2. Build a test executable and run it against your implementation to produce
65 3. Debug any test failures and modify your implementation as needed until it
67 4. Create a Submission Package containing your final result logs and other
68 documents describing the tested platform.
69 5. Submit the results to the appropriate Review Committee via the
70 Khronos Adopters web page. The Committee will examine your submission and will
71 notify you within thirty days if they find any issues requiring action on your part.
73 This document describes each of these steps in detail. It also provides advice
74 on reproducing, understanding, and debugging test failures, and discusses how
75 to extend or modify the tests and the test framework.
77 The reader is assumed to be a fluent programmer experienced with command line
78 utilities and build tools, such as CMake or Make.
80 Test Environment Requirements
81 ------------------------
83 The conformance tests require a file system. The file system requires support
84 for long file names (i.e. > 8.3 name format). Source files in the conformance
85 tests use mixed case file names. When the `--verbose` option is used, rendered
86 images and test case shaders are copied to the log files. This can lead to quite
87 large log files, up to hundreds of megabytes on disk.
89 Each execution of the conformance test writes a text-format results log to a disk.
90 You will need to include this log as part of your conformance submission package.
92 The conformance test executable can be large. Compiler options and CPU instruction
93 sets can cause substantial variation. The disk space required for the build
94 including all the temporary files can be up to 400MB.
96 The build environment is expected to support C++ with exceptions and
97 the Standard Template Library (STL).
99 Configuring and Building the Tests
100 ------------------------
101 The CTS is built via CMake build system. The requirements for the build are as follows:
102 - CMake 2.8 or newer, 2.8.8 or newer recommended
103 - C++ compiler with STL and exceptions support
104 - Unix: Make + GCC / Clang
105 - Windows: Visual Studio or Windows SDK (available free-of-charge)
106 - Android: Android SDK and NDK for host platform
108 The build is controlled by the file CMakeLists.txt found at the root of
111 If the platform and compiler tools you use are not supported, you may be able to
112 add support for that platform and tools to the build system. If you do this,
113 please submit your changes back to Khronos for inclusion in the official tests
116 Otherwise, if you choose not to use the supplied Makefiles, you must construct
117 an equivalent build system for the chosen development environment(s).
121 The build is configured by using `CMakeLists.txt` files in the build target
122 directory (`targets/`). They specify platform-specific configuration, including
123 include paths and link libraries.
125 The main `CMakeLists.txt` includes the target file based on the `DEQP_TARGET`
126 variable. For example `-DDEQP_TARGET=my_target` will use the target description
127 file `targets/my_target/my_target.cmake`.
129 See the main `CMakeLists.txt` file for the description of the variables that
130 the target file can set.
132 Porting to a new platform includes either creating a new target file, or
133 modifying an existing target description.
135 **NOTE**: All paths, except `TCUTIL_PLATFORM_SRCS` are relative to root source
136 directory. `TCUTIL_PLATFORM_SRCS` is relative to `framework/platform` directory.
138 Following target files are provided with the package:
140 | Name | Description |
141 |:---------|-----------------|
142 |android | Used in Android build. Requires use of suitable toolchain file (see `cmake/` directory) |
143 |default| Checks for presence of GL, ES2, ES3, and EGL libraries and headers in default search paths and configures build accordingly|
144 |null | Null build target |
145 |nullws | NullWS build target |
146 |x11_egl| X11 build for platforms with native EGL support|
147 |x11_glx| X11 build for platforms with native GLX support|
148 |x11_egl_glx| X11 build for platforms with native EGL/GLX support|
150 **Example target file (targets/null/null.cmake):**
152 message("*** Using null context target")
154 set(DEQP_TARGET_NAME "Null")
156 set(TCUTIL_PLATFORM_SRCS
157 null/tcuNullPlatform.cpp
158 null/tcuNullPlatform.hpp
159 null/tcuNullRenderContext.cpp
160 null/tcuNullRenderContext.hpp
161 null/tcuNullContextFactory.cpp
162 null/tcuNullContextFactory.hpp
166 **Common configuration variables and their default values in CMake syntax:**
170 set(DEQP_TARGET_NAME "UNKNOWN")
173 - List of link libraries per API. If no libraries are specified, entry points
174 are loaded at run-time by default for OpenGL ES APIs. EGL always requires link
175 libraries. OpenGL always uses run-time loading.
177 set(DEQP_GLES2_LIBRARIES )
178 set(DEQP_GLES3_LIBRARIES )
179 set(DEQP_GLES31_LIBRARIES )
180 set(DEQP_GLES32_LIBRARIES )
181 set(DEQP_EGL_LIBRARIES )
182 set(DEQP_OPENGL_LIBRARIES )
185 - Generic platform libraries required to link a working OpenGL (ES) Application
186 (e.g. X11 libraries on Unix/X11)
188 set(DEQP_PLATFORM_LIBRARIES )
191 - Libraries / binaries that need to be copied to the build target dir
193 set(DEQP_PLATFORM_COPY_LIBRARIES )
196 - If running on Linux using X11 for creating windows etc., enable this.
198 set(DEQP_USE_X11 OFF)
201 - Embed the test files in the test Before building with this set (if GTF module is present), run these commands:
203 cd external/kc-cts/src/GTF_ES/glsl/GTF
204 perl mergeTestFilesToCSource.pl
207 In your target `.cmake` file add
209 set(DEQP_EMBED_TESTS ON)
210 add_definitions(-DHKEMBEDDEDFILESYSTEM)
213 ### Building the Tests
215 To build the framework, you need first to download sources for zlib, libpng.
217 To download sources, run:
219 python external/fetch_sources.py
221 To download Khronos Confidential Conformance Test Suite, run:
223 python external/fetch_kc_cts.py
225 The results for the tests included in this suite must be included in a
226 conformance submission.
228 **NOTE**: You need to be a Khronos Adopter and have an active account
229 at [Khronos Gitlab](https://gitlab.khronos.org/) to be able to download
230 Khronos Confidential CTS.
231 It is possible to run and build the CTS without the Khronos Confidential CTS.
232 Khronos Confidential CTS is mandatory only if you plan to make a
233 conformance submission (see [Creating a Submission Package](#creating-a-submission-package)).
235 With CMake out-of-source builds are always recommended. Create a build directory
236 of your choosing, and in that directory generate Makefiles or IDE project
242 - Visual Studio (2010 or newer recommended) or Windows SDK
243 - CMake 2.8.x Windows native version (i.e. not Cygwin version)
244 - For GL/ES2/ES3.x tests: OpengGL, OpenGL ES 2 or ES 3.x libraries and headers
246 To choose the backend build system for CMake, choose one of the following Generator Names for the
247 command line examples in the next steps:
248 - VS2010: "Visual Studio 10"
249 - VS2012: "Visual Studio 11"
250 - NMake (must be run in VS or SDK command prompt): "NMake Makefiles"
252 Building GL, ES2, or ES3.x conformance tests:
254 cmake <path to openglcts> -DDEQP_TARGET=default -G"<Generator Name>"
257 Khronos Confidential CTS doesn't support run-time selection of API context.
258 If you intend to run it you need to additionally supply `GLCTS_GTF_TARGET`
259 option to you cmake command, e.g.:
261 cmake <path to openglcts> -DDEQP_TARGET=default -DGLCTS_GTF_TARGET=<target> -G"<Generator Name>"
263 Available `<target>`s are `gles2`, `gles3`, `gles31`, `gles32`, and `gl`.
264 The default `<target>` is `gles32`.
266 It's also possible to build `GL-CTS.sln` in Visual Studio instead of running
267 the `cmake --build .` command.
269 **NOTE**: Do not create the build directory under the source directory
270 (i.e anywhere under `<path to openglcts>`) on Windows, since it causes
271 random build failures when copying data files around.
273 **NOTE**: You can use the CMake for Windows GUI to do configuration and project
276 **NOTE**: If using cygwin, you must install and ensure you use the Windows
277 version of cmake. The cygwin vesion does not contain the Visual Studio
278 generators. Here is a shell function you can put in your cygwin `.bash_profile`
279 to use it easily. With this you can simply type `wcmake` to run the Windows version.
283 (TMP=$tmp TEMP=$temp; unset tmp; unset temp; "C:/Program Files (x86)/CMake 2.8/bin/cmake" "$@")
290 - Standard build utilities (make, gcc, etc.)
292 - Necessary API libraries (OpenGL, GLES, EGL depending on configuration)
294 Building ES2 or ES3.x conformance tests:
296 cmake <path to openglcts> -DDEQP_TARGET=null -DGLCTS_GTF_TARGET=gles32
299 Building OpenGL conformance tests:
301 cmake <path to openglcts> -DDEQP_TARGET=null -DGLCTS_GTF_TARGET=gl
304 Khronos Confidential CTS doesn't support run-time selection of API context.
305 If you intend to run it then the `GLCTS_GTF_TARGET` option is necessary.
307 Available values for `GLCTS_GTF_TARGET` are `gles2`, `gles3`, `gles31`, `gles32`, and `gl`.
308 The default value is `gles32`.
310 CMake chooses to generate Makefiles by default. Other generators can be used
311 as well. See CMake help for more details.
315 The conformance tests come with native Android support. The following packages
316 are needed in order to build an Android binary:
319 - Android SDK with API 24 packages and tools installed
322 An Android binary (for ES 3.2) can be built using command:
324 python external/openglcts/scripts/build_android.py
326 If Khronos Confidential CTS is present then the script will set `GLCTS_GTF_TARGET`
327 to `gles32` by default.
328 It is possible to specify a different `GLCTS_GTF_TARGET` target by invoking the script
329 with the `--glcts-gtf-target` option, e.g.:
331 python external/openglcts/scripts/build_android.py --glcts-gtf-target=gles31
333 Available values for `--glcts-gtf-target` are `gles32`, `gles31`, `gles3`, `gles2` and `gl`.
335 The package can be installed by either running:
337 python android/scripts/install.py
339 By default the CTS package will contain libdeqp.so built for `armeabi-v7a`, `arm64-v8a`,
340 `x86`, and `x86_64` ABIs, but that can be changed in `android/scripts/common.py` script.
342 To pick which ABI to use at install time, following commands must be used
345 adb install --abi <ABI name> android/openglcts/bin/dEQP-debug.apk /data/local/tmp/dEQP-debug.apk
347 The script assumes some default install locations, which should be changed based
348 on your environment. It is a good idea to check at least variables
349 `ANDROID_NDK_PATH`, `ANDROID_SDK_PATH`, and `ANDROID_NDK_HOST_OS`.
350 The `ANDROID_NDK_HOST_OS` is used to select the correct compiler binaries from
351 in the Android NDK package.
354 ------------------------
355 The Conformance Tests have been designed to be relatively platform-, OS-, and
356 compiler-independent. Adopters are responsible for final changes needed to allow
357 the Test to run on the platform they wish to
358 certify as conformant.
360 ### Common Porting Changes
362 Porting the dEQP framework requires implementation of either `glu::Platform` or,
363 on platforms supporting EGL, the `tcu::EglPlatform` interface. The porting layer
364 API is described in detail in following files:
366 framework/common/tcuPlatform.hpp
367 framework/opengl/gluPlatform.hpp
368 framework/egl/egluPlatform.hpp
369 framework/platform/tcuMain.cpp
371 This version of the dEQP framework includes ports for Windows (both EGL and WGL),
372 X11 (EGL and XGL), and Android.
374 Base portability libraries in `framework/delibs` seldom need changes. However,
375 introducing support for a new compiler or a new processor family may require
376 some changes to correctly detect and parameterize the environment.
378 Porting typically involves three types of changes:
379 1. Changes to the make system used to generate the test executable.
380 2. Changes needed to adapt the test executable to the operating system used on the platform.
381 3. Changes to the platform specific GL and EGL header files.
383 Changes should normally be confined to build files (CMake or Python) or source
384 files (.c, .h, .cpp, and .h files) in the following directories or their
386 - `framework/platform`
389 If you find that you must change other source (.c, .cpp, .h, or .hpp) files,
390 you will need to file a waiver as described below.
392 Note that the conformance tests assume that the implementation supports EGL.
393 However EGL is not required for OpenGL or OpenGL ES conformance.
395 Most of the tests require at least 256x256 pixels resolution in order to run properly
396 and produce stable results. It is, therefore, important to ensure that a port to a
397 new platform can support surfaces that fulfill width and height requirements.
399 ### Other Allowable Porting Changes
401 Other than changes needed for porting, the only changes that are permitted are
402 changes to fix bugs in the conformance test. A bug in the conformance test is
403 a behavior which causes clearly incorrect execution (e.g., hanging, crashing,
404 or memory corruption), OR which requires behavior which contradicts or exceeds
405 the requirements of the relevant OpenGL or OpenGL ES Specification. Changes
406 required to address either of these issues typically require [waivers](#waivers).
409 ------------------------
410 All the following commands need to be run in the CTS build directory. If you
411 need to move the binaries from the build directory, remember to copy the
412 data directory named `gl_cts` and its subdirectories from the build directory
413 to the test target in the same relative locations. For more information on data
414 files, see Section [Data Files](#data-files) later in the document.
416 If the build instructions have been followed as-is, the correct path is:
418 cd <builddir>/external/openglcts/modules
421 A conformance run can be launched either by running the `cts-runner` binary with
422 appropriate options on Linux/Windows or by running an Android application.
424 ### Linux and Windows
425 Conformance run for OpenGL ES 3.2 on Windows:
427 Debug/cts-runner.exe --type=es32
428 [For ES 3.1 use --type=es31; ES 3.0 use --type=es3; for ES 2.0, use --type=es2]
430 Conformance run for OpenGL 3.0 - 4.4 on Windows:
432 Debug/cts-runner.exe --type=glxy
433 [x and y are the major and minor specifiction versions]
435 Full list of parameters for the `cts-runner` binary:
437 --type=[esN[M]|glNM] Conformance test run type. Choose from
438 ES: es2, es3, es31, es32
439 GL: gl30, gl31, gl32, gl33, gl40, gl41, gl42, gl43, gl44, gl45
440 --logdir=[path] Destination directory for log files
441 --summary Print summary without running the tests
442 --verbose Print out and log more information
445 The conformance run will create one or more `.qpa` files per tested config, a
446 summary `.qpa` file containing run results and a summary `.xml` file containing
447 command line options for each run, all of which should be included in your
448 conformance submission package. The final verdict will be printed out at
451 Sometimes it is useful to know the command line options used for the conformance
452 before the run completed. Full conformance run configuration is written
453 to `cts-run-summary.xml` and this file can be generated by adding `--summary`
456 By default the `cts-runner` does not include result images or shaders used in
457 the logs. Adding parameter `--verbose` will cause them to be included in
458 the logs. Images will be embedded as PNG data into the`.qpa` log files.
459 See Section [Test Logs](#test-logs) for instructions on how to view the images.
461 To direct logs to a directory, add `--logdir=[path]` parameter.
463 **NOTE**: Due to the lack of support for run-time selection of API context in the
464 Khronos Confidential CTS, a conformance run may fail if it is executed for an API
465 version that doesn't match the `GLCTS_GTF_TARGET` value used during the build step.
469 Once the CTS binary is built and installed on the device, a new application
470 called `ES3.2 CTS`, `ES3.1 CTS`, `ES3 CTS`, `ES2 CTS`, or `GL4.5 CTS` (depending
471 on the test version you built) should appear in the launcher. Conformance test
472 runs can be done by launching the applications.
474 Alternatively it is possible to start a conformance run from the command line,
475 for example to launch a GLES 3.2 conformance run use:
477 am start -n org.khronos.gl_cts/org.khronos.cts.ES32Activity -e logdir "/sdcard/logs"
479 For GLES 2.0, GLES 3.0, GLES 3.1, or GL 4.5 conformance runs, substitute the following
480 activity name (respectively) ES2Activity, ES3Activity, ES31Activity, or GL45Activity.
482 Test logs will be written to `/sdcard` by default. The log path can be
483 customized by supplying a `logdir` string extra in launch intent. Verbose mode
484 can be enabled by supplying a `verbose` = `"true"` string extra. See
485 the following example:
487 am start -n org.khronos.gl_cts/org.khronos.cts.ES32Activity -e logdir "/sdcard/logs" -e verbose "true"
489 Conformance run configuration can be generated by supplying a `summary` = `"true"`
490 string extra. See the following example:
492 am start -n org.khronos.gl_cts/org.khronos.cts.ES32Activity -e logdir "/sdcard/logs" -e summary "true"
494 **NOTE**: Supplying a `summary` = `"true"` string extra will result in the `cts-run-summary.xml` file
495 being written out but no tests will be executed.
497 Individual tests can be launched as well by targeting
498 `org.khronos.gl_cts/android.app.NativeActivity` activity. Command line
499 arguments must be supplied in a `cmdLine` string extra. See following example:
501 am start -n org.khronos.gl_cts/android.app.NativeActivity -e cmdLine "cts --deqp-case=KHR-GLES32.info.version --deqp-gl-config-id=1 --deqp-log-filename=/sdcard/ES32-egl-config-1.qpa --deqp-surface-width=128 --deqp-surface-height=128"
503 In addition to the detailed `*.qpa` output files, the Android port of the CTS
504 logs a summary of the test run, including the pass/fail status of each test.
505 This summary can be viewed using the Android *logcat* utility.
507 See Section [Running Subsets](#running-subsets) above for details on command
512 Run shader compiler loop test cases from the OpenGL ES 3.0 CTS using EGL config with ID 3:
514 Debug/glcts.exe --deqp-case=KHR-GLES3.shaders.loops.* --deqp-gl-config-id=3
516 Note that the GL context version is determined by the case name. `KHR-GLES3` in
517 the example above selects OpenGL ES 3.0. The command to run the same test
518 against OpenGL version 4.1 is:
520 Debug/glcts.exe --deqp-case=GL41-CTS.shaders.loops.* --deqp-gl-config-id=3
522 To list available test cases (writes out `*-cases.txt` files per module), run:
524 Debug/glcts.exe --deqp-runmode=txt-caselist
526 The type of the run for cts-runner chooses a specific list of test cases to
527 be run. The selected tests can be checked from the summary logs. To run
528 the same tests, just give equivalent test selection parameters to the `glcts`.
530 #### Command line options
532 Full list of parameters for the `glcts` binary:
537 -n, --deqp-case=<value>
538 Test case(s) to run, supports wildcards (e.g. dEQP-GLES2.info.*)
540 --deqp-caselist=<value>
541 Case list to run in trie format (e.g. {dEQP-GLES2{info{version,renderer}}})
543 --deqp-caselist-file=<value>
544 Read case list (in trie format) from given file
546 --deqp-stdin-caselist
547 Read case list (in trie format) from stdin
549 --deqp-log-filename=<value>
550 Write test results to given file
551 default: 'TestResults.qpa'
553 --deqp-runmode=[execute|xml-caselist|txt-caselist|stdout-caselist]
554 Execute tests, or write list of test cases into a file
557 --deqp-caselist-export-file=<value>
558 Set the target file name pattern for caselist export
559 default: '${packageName}-cases.${typeExtension}'
561 --deqp-watchdog=[enable|disable]
565 --deqp-crashhandler=[enable|disable]
566 Enable crash handling
569 --deqp-base-seed=<value>
570 Base seed for test cases that use randomization
573 --deqp-test-iteration-count=<value>
574 Iteration count for cases that support variable number of iterations
577 --deqp-visibility=[windowed|fullscreen|hidden]
578 Default test window visibility
581 --deqp-surface-width=<value>
582 Use given surface width if possible
585 --deqp-surface-height=<value>
586 Use given surface height if possible
589 --deqp-surface-type=[window|pixmap|pbuffer|fbo]
590 Use given surface type
593 --deqp-screen-rotation=[unspecified|0|90|180|270]
594 Screen rotation for platforms that support it
597 --deqp-gl-context-type=<value>
598 OpenGL context type for platforms that support multiple
600 --deqp-gl-config-id=<value>
601 OpenGL (ES) render config ID (EGL config id on EGL platforms)
604 --deqp-gl-config-name=<value>
605 Symbolic OpenGL (ES) render config name
607 --deqp-gl-context-flags=<value>
608 OpenGL context flags (comma-separated, supports debug and robust)
610 --deqp-cl-platform-id=<value>
611 Execute tests on given OpenCL platform (IDs start from 1)
614 --deqp-cl-device-ids=<value>
615 Execute tests on given CL devices (comma-separated, IDs start from 1)
618 --deqp-cl-build-options=<value>
619 Extra build options for OpenCL compiler
621 --deqp-egl-display-type=<value>
622 EGL native display type
624 --deqp-egl-window-type=<value>
625 EGL native window type
627 --deqp-egl-pixmap-type=<value>
628 EGL native pixmap type
630 --deqp-log-images=[enable|disable]
631 Enable or disable logging of result images
634 --deqp-log-shaders=[enable|disable]
635 Enable or disable logging of shaders
638 --deqp-test-oom=[enable|disable]
639 Run tests that exhaust memory on purpose
642 --deqp-egl-config-id=<value>
643 Legacy name for --deqp-gl-config-id
646 --deqp-egl-config-name=<value>
647 Legacy name for --deqp-gl-config-name
650 ### Understanding the Results
652 At the end of a completed test run, a file called `cts-run-summary.xml` is
653 generated. It will contain summaries per configuration and the full command
654 lines for the `glcts` application
655 (See Section [Running Subsets](#running-subsets)) for debugging purposes.
656 Additionally, a summary string similar to one below is printed:
658 4/4 sessions passed, conformance test PASSED
661 If the run fails, the message will say `FAILED` instead of `PASSED`. Under
662 Linux or Windows, this string is printed to stdout if available. Under Android,
663 it is emitted to the Android logging system for access via *logcat*.
665 Each test case will be logged into the `.qpa` files in XML. Below is a minimal
666 example of a test case log. The Result element contains the final verdict in
667 the `StatusCode` attribute. Passing cases will have `Pass` and failing cases
668 `Fail`. Other results such as `QualityWarning`, `CompatibilityWarning`,
669 `NotSupported` or `ResourceError` are possible. Only `Fail` status will count
670 as failure for conformance purposes.
672 <TestCaseResult Version="0.3.2" CasePath="ES2-CTS.info.vendor" CaseType="SelfValidate">
673 <Text>Vendor A</Text>
674 <Result StatusCode="Pass">Pass</Result>
678 If the failure count is zero for all config sequences, the implementation
679 passes the test. Note that in addition to a successful test result,
680 a Submission Package must satisfy the conditions specified below under
681 [Passing Criteria](#passing-criteria) in order to achieve conformance certification.
685 The CTS writes test logs in XML encapsulated in a simple plain-text container
686 format. Each tested configuration listed in `cts-run-summary.xml`
688 To analyse and process the log files, run the following scripts
689 - `external/openglcts/scripts/verify_submission.py`: Script that verifies logs based on `cts-run-summary.xml` file.
690 - `scripts/log/log_to_csv.py`: This utility converts `.qpa` log into CSV format. This is
691 useful for importing results into other systems.
692 - `scripts/log/log_to_xml.py`: Converts `.qpa` into well-formed XML document. The document
693 can be then viewed in browser using the testlog.{xsl,css} files.
695 Some browsers, like Chrome, limit local file access. In such case, the files
696 must be accessed over HTTP. Python comes with a simple HTTP server suitable
697 for the purpose. Run `python -m SimpleHTTPServer` in the directory containing
698 the generated XML files and point the browser to `127.0.0.1:8000`.
700 Parser for the `.qpa` log file format in python is provided in
701 `scripts/log/log_parser.py`.
703 Python scripts require python 2.7 or newer in 2.x series. They are not
704 compatible with python 3.x.
706 Debugging Test Failures
707 ------------------------
708 The best first step is to run the failing test cases via `glcts` executable to
709 get the more verbose logs. Use, for example, the `log_to_xml.py` script
710 detailed in Section [Test Logs](#test-logs), to view the generated logs.
711 If the visual inspection of the logs does not give sufficient hints on the
712 nature of the issue, inspecting the test code and stepping through it in
713 debugger should help.
716 ------------------------
717 The procedure for requesting a waiver is to report the issue by filing a bug
718 report in the Gitlab VK GL CTS project
719 (https://gitlab.khronos.org/Tracker/vk-gl-cts). When you create your submission
720 package, include references to the waivers as described in the adopters' agreement.
721 [Fully-qualified links](https://en.wikipedia.org/wiki/Fully_qualified_domain_name)
722 to bug reports are highly recommended.
723 Including as much information as possible in your bug report will ensure the issue
724 can be progressed as speedily as possible. Such bug report must
725 include a link to suggested file changes. Issues must be labeled `Waiver` and `OpenGL-ES`
726 (for OpenGL ES submissions) or `Waiver` and `OpenGL` (for OpenGL submissions) and
727 identify the CTS release tag and affected tests.
729 Creating a Submission Package
730 ------------------------
731 Please see the [Creating a Submission Package page](https://github.com/KhronosGroup/VK-GL-CTS/wiki/Creating-a-OpenGL-and-OpenGL-ES-Submission-Package).
733 Submission Update Package
734 ------------------------
735 Please see the [Submission Update Package page](https://github.com/KhronosGroup/VK-GL-CTS/wiki/Submission-Update-Package).
738 ------------------------
739 Please see the [Conformance Submission Passing Criteria page](https://github.com/KhronosGroup/VK-GL-CTS/wiki/OpenGL-and-OpenGL-ES-Conformance-Submission-Passing-Criteria).
742 ------------------------
743 ### Crashes early on in the run
744 If using run-time entry point loading, it is possible that not all required
745 entry points are available. This will result in `NULL` pointer dereferencing.
748 First try re-running the build. If that does not help and you have used the
749 same build directory with different version of the CTS, remove the build
750 directory and run the CMake again.
753 ------------------------
755 See the [Contribution Guide](CONTRIBUTING.md)
758 ------------------------
759 The Khronos Group gratefully acknowledges the support of drawElements Oy,
760 who donated a large number of GLSL tests and a new test framework and build system.
762 The Khronos Group also gratefully acknowledges the support of 3DLabs Inc.,
763 who gave permission to use the 3DLabs Graphics Test Framework (GTF).
765 The first internal version of the test was created by Bruno Schwander of
766 Hooked Wireless, under a development contract with the Khronos Group.
768 Symbio added tests specific to OpenGL and OpenGL ES 3.0.
770 drawElements added their donated language tests and build system.
772 The CTS results from these efforts, together with additional hard work by
773 volunteers from the OpenGL ES Working Group, the OpenGL ARB Working Group,
774 and their member companies, including:
776 - Sumit Agarwal, Imagination Technologies
778 - Oleksiy Avramchenko, Sony
779 - Anthony Berent, ARM
780 - Joseph Blankenship, AMD
782 - Pierre Boudier, AMD
783 - Benji Bowman, Imagination Technologies
785 - David Cairns, Apple
786 - Mark Callow, ArtSpark
787 - Antoine Chauveau, NVIDIA
788 - Aske Simon Christensen, ARM
790 - Mathieu Comeau, QNX
791 - Graham Connor, Imagination Technologies
792 - Slawomir Cygan, Intel
793 - Piotr Czubak, Intel
794 - Piers Daniell, NVIDIA
795 - Matthias Dejaegher, ZiiLabs
797 - David Donohoe, Movidius
800 - Bryan Eyler, NVIDIA
801 - Erik Faye-Lund, ARM
802 - Nicholas FitzRoy-Dale, Broadcom
803 - Michael Frydrych, NVIDIA
804 - Toshiki Fujimori, Takumi
805 - David Garcia, Qualcomm
806 - Frido Garritsen, Vivante
807 - Klaus Gerlicher, NVIDIA
808 - Slawomir Grajewski, Intel
809 - Jonas Gustavsson, Sony
810 - Nick Haemel, NVIDIA
811 - Matthew Harrison, Imagination Technologies
812 - Pyry Haulos, drawElements
813 - Jim Hauxwell, Broadcom
814 - Valtteri Heikkil, Symbio
816 - Mathias Heyer, NVIDIA
817 - Atsuko Hirose, Fujitsu
818 - Ari Hirvonen, NVIDIA
820 - Jaakko Huovinen, Nokia
821 - James Jones, Imagination Technologies
822 - Norbert Juffa, NVIDIA
823 - Jordan Justen, Intel
824 - Sandeep Kakarlapudi, ARM
825 - Anssi Kalliolahti, NVIDIA
826 - Philip Kamenarsky, NVIDIA
827 - Krzysztof Kaminski, Intel
828 - Daniel Kartch, NVIDIA
830 - Jon Kennedy, 3DLabs
832 - Daniel Koch, NVIDIA
833 - Benjamin Kohler-Crowe, NVIDIA
834 - Georg Kolling, Imagination Technologies
836 - Boguslaw Kowalik, Intel
837 - Aleksandra Krstic, Qualcomm
838 - Karol Kurach, NVIDIA
840 - Sami Kyostila, Google
841 - Teemu Laakso, Symbio
842 - Antoine Labour, Sony
843 - Alexandre Laurent, Imagination Technologies
845 - Graeme Leese, Broadcom
846 - I-Gene Leong, Intel
847 - Radoslava Leseva, Imagination Technologies
849 - Fred Liao, MediaTek
850 - Bill Licea-Kane, Qualcomm
851 - Benj Lipchak, Apple
852 - Wayne Lister, Imagination Technologies
855 - Zhifang Long, Marvell
856 - Toni Lönnberg, AMD
858 - Christer Lunde, ARM
860 - Daniel Mahashin, NVIDIA
861 - Rob Matthesen, NVIDIA
862 - Tom McReynolds, NVIDIA (CTS TSG Chair, ES 1.1)
864 - Assif Mirza, Imagination Technologies
866 - Kazuhiro Mochizuki, Fujitsu
867 - Affie Munshi, Apple
868 - Yeshwant Muthusamy, Samsung
869 - Mirela Nicolescu, Broadcom
870 - Glenn Nissen, Broadcom
871 - Michael O'Hara, AMD
872 - Eisaku Ohbuchi, DMP
874 - Tapani Palli, Intel
877 - Adrian Peirson, ARM
878 - Russell Pflughaupt, NVIDIA
880 - Tero Pihlajakoski, Nokia
881 - Peter Pipkorn, NVIDIA
882 - Acorn Pooley, NVIDIA
883 - Guillaume Portier, ArtSpark
884 - Greg Prisament, Lychee Software
885 - Jonathan Putsman, Imagination Technologies
887 - Tarik Rahman, CodePlay
888 - Kalle Raita, drawElements
890 - Manjunatha Ramachandra
891 - John Recker, NVIDIA
892 - Maurice Ribble, Qualcomm (CTS TSG Chair, ES 2.0)
893 - James Riordon, Khronos
894 - Lane Roberts, Samsung
895 - Ian Romanick, Intel
897 - Kenneth Russell, Google
898 - Matteo Salardi, Imagination Technologies
899 - Jeremy Sandmel, Apple
900 - Shusaku Sawato, DMP
901 - Chris Scholtes, Fujitsu
902 - Mathias Schott, NVIDIA
903 - Bruno Schwander, Hooked Wireless
904 - Graham Sellers, AMD
905 - Shereef Shehata, Texas Instruments
906 - Benjamin Shen, Vivante
907 - Robert Simpson, Qualcomm
908 - Stuart Smith, Imagination Technologies
909 - Janusz Sobczak, Mobica
910 - Jacob Strom, Ericsson
911 - Timo Suoranta, Broadcom
912 - Jan Svarovsky, Ideaworks3D
914 - Payal Talati, Imagination Technologies
915 - Gregg Tavares, Google
916 - Ross Thompson, NVIDIA
917 - Jeremy Thorne, Broadcom
918 - Jani Tikkanen, Symbio
919 - Antti Tirronen, Qualcomm (CTS TSG Chair, ES 3.0/3.1)
920 - Robert Tray, NVIDIA
922 - Eben Upton, Broadcom
923 - Jani Vaarala, Nokia
924 - Dmitriy Vasilev, NVIDIA
925 - Chad Versace, Intel
926 - Holger Waechtler, Broadcom
928 - Jun Wang, Imagination Technologies
929 - Yuan Wang, Imagination Technologies
931 - Ewa Wisniewska, Mobica
932 - Dominik Witczak, Mobica
933 - Oliver Wohlmuth, Fujitsu
934 - Yanjun Zhang, Vivante
935 - Lefan Zhong, Vivante
937 - Marek Zylak, NVIDIA
938 - Iliyan Dinev, Imagination Technologies
939 - James Glanville, Imagination Technologies
941 - Alexander Galazin, ARM
942 - Riccardo Capra, ARM
943 - Lars-Ivar Simonsen, ARM
947 ------------------------
950 Initial version cloned from `ES2_Readme`, plus feedback from Mark Callow.
954 Modified to incorporate feedback in bug 8534.
958 Added details for OpenGL Conformance.
960 - 0.4 - Jon Leech 2012/10/31
962 Add configuration & build section, and table of contents
964 - 0.5 - Jon Leech 2012/10/31
966 Fix typos noted by Mark Callow in bug 8534.
968 - 0.6 - Jon Leech 2012/11/13
970 Discuss automatic version selection and document support for OpenGL 3.3-4.3.
972 - 0.7 - Jon Leech 2012/11/14
974 Minor cleanup for GL version numbers per Bug 8534 comment #41.
976 - 0.8 - Tom Olson 2013/1/25
978 Updated GL status in preparation for ES 3.0 release, removed display
979 parameters from product description, and removed mention of sample submission.
981 - 0.9 - Jon Leech 2013/07/17
983 Restore GL-specific details in preparation for initial GL CTS release.
985 - 1.0 - Jon Leech 2013/07/17
987 Change references to Visual Studio 11 to Visual Studio 2012 per bug 9862.
988 Reset change tracking to reduce clutter.
990 - 1.1 - Kalle Raita 2013/10/30
992 Updated documentation after the integration of the drawElements framework and
995 - 1.2 - Kalle Raita 2013/12/03
997 Removed TODOs, added some notes on further development, and notes on file
998 dependencies. Exact list of directory sub-trees that can be modified during porting.
1000 - 1.3 - Tom Olson 2014/05/27
1002 Updates for ES CTS 3.1.1.0 . Added Passing Criteria, updated examples to
1003 include 3.1 versioning, and updated Acknowledgements.
1005 - 1.4 - Alexander Galazin 2016/05/12
1007 Updates for ES CTS 3.2.1.0.
1009 - 2.0 - Alexander Galazin 2016/09/23
1011 Moved the contents to README.md.
1012 Updated to reflect new CTS structure and build instructions.
1014 - 2.1 - Alexander Galazin 2016/12/15
1016 Updates in preparation for the new release.
1017 Document restructuring, more detailed process of creating a submission package.
1018 Incorporated OpenGL/CTS issue 39 and 40 in the Passing Criteria.