arb_texture_buffer_object/texture-buffer-size-clamp: fix samplerBuffer typing
[piglit.git] / README.md
blobc9105025b7c027aa3d8246ca15ec8616ba51752f
2 Piglit
3 ======
5 1. [About](#1-about)
6 2. [Setup](#2-setup)
7 3. [How to run tests](#3-how-to-run-tests)
8 4. [Available test sets](#4-available-test-sets)
9 5. [How to write tests](#5-how-to-write-tests)
10 6. [Integration](#6-integration)
13 ## 1. About
15 Piglit is a collection of automated tests for OpenGL and OpenCL
16 implementations.
18 The goal of Piglit is to help improve the quality of open source
19 OpenGL and OpenCL drivers by providing developers with a simple means to
20 perform regression tests.
22 The original tests have been taken from
23 - Glean ( http://glean.sf.net/ ) and
24 - Mesa ( http://www.mesa3d.org/ )
27 ## 2. Setup
29 First of all, you need to make sure that the following are installed:
31   - Python >=3.6
32   - Python Mako module
33   - numpy (http://www.numpy.org)
34   - cmake (http://www.cmake.org)
35   - GL, glu and glut libraries and development packages (i.e. headers)
36   - X11 libraries and development packages (i.e. headers)
37   - waffle (http://www.waffle-gl.org)
39 Optionally, you can install the following:
41   - lxml. An accelerated python xml library using libxml2 (http://lxml.de/)
42   - jsonstreams. A JSON stream writer for python.
43     (https://jsonstreams.readthedocs.io/en/stable/)
44   - VkRunner. A shader script testing tool for Vulkan.
45     (https://github.com/igalia/vkrunner)
47 For testing the python framework using `py.test unittests/framework`
48   - py.test. A python test framework, used for running the python framework
49     test suite.
50   - tox. A tool for testing python packages against multiple configurations of
51     python (https://tox.readthedocs.org/en/latest/index.html)
52   - mock. A python module for mocking other python modules. Required only for
53     unittests (https://github.com/testing-cabal/mock)
54   - psutil. A portable process library for python
55   - jsonschema. A JSON validator library for python
56   - pytest-mock. A mock plugin for pytest
57   - pytest-pythonpath. A plugin for pytest to do automagic with sys.path
58   - pytest-raises. A plugin for pytest that allows decorating tests that expect
59     failure
60   - pytest-warnings. A plugin for pytest that handles python warnings
61   - pytest-timeout. A plugin for pytest to timeout tests.
63 Now configure the build system:
65     $ ccmake .
67 This will start cmake's configuration tool, just follow the onscreen
68 instructions. The default settings should be fine, but I recommend you:
69  - Press 'c' once (this will also check for dependencies) and then
70  - Set `CMAKE_BUILD_TYPE` to `Debug` Now you can press 'c' again and then 'g' to generate the build system.
71 Now build everything:
73     $ make
76 ### 2.1 Cross Compiling
78 On Linux, if cross-compiling a 32-bit build on a 64-bit host, first make sure
79 you didn't have CMakeCache.txt file left from 64-bit build (it would retain old
80 flags), then you must invoke cmake with options
81 `-DCMAKE_SYSTEM_PROCESSOR=x86 -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32`.
84 ### 2.2 Ubuntu
86 Install development packages.
88     $ sudo apt-get install cmake g++ mesa-common-dev libgl1-mesa-dev python3-numpy python3-mako freeglut3-dev x11proto-gl-dev libxrender-dev libwaffle-dev libudev-dev
90 Configure and build.
92     $ cmake .
93     $ make
96 ### 2.3 Mac OS X
98 Install CMake.
99 http://cmake.org/cmake/resources/software.html
100 Download and install 'Mac OSX Universal' platform.
102 Install Xcode.
103 http://developer.apple.com/xcode
105 Configure and build.
107     $ cmake .
108     $ make
111 ### 2.4 Cygwin
113 Install development packages.
114   - cmake
115   - gcc4
116   - make
117   - opengl
118   - libGL-devel
119   - python
120   - python-numpy
121   - libglut-devel
123 Configure and build.
125     $ cmake .
126     $ make
129 ### 2.5 Windows
131 Install Python 3.
132 http://www.python.org/download
134 Install CMake.
135 http://cmake.org/cmake/resources/software.html
136 Download and install 'Windows' platform.
138 Download and install Ninja
139 https://github.com/ninja-build/ninja/releases
141 Install MinGW-w64
142 https://mingw-w64.org/
144 Download OpenGL Core API and Extension Header Files.
145 https://github.com/KhronosGroup/OpenGL-Registry
146 Pass `-DGLEXT_INCLUDE_DIR=/path/to/headers`
148 Install python mako.
150     pip install mako
152 Install NumPy.
154     pip install numpy
157 #### 2.5.1 GLUT
159 Download freeglut for Mingw.
160 http://www.transmissionzero.co.uk/software/freeglut-devel/
162     cmake -H. -Bbuild -G "Ninja" -DGLEXT_INCLUDE_DIR=\path\to\glext -DGLUT_INCLUDE_DIR=\path\to\freeglut\include -DGLUT_glut_LIBRARY=\path\to\freeglut\lib\x64\libfreeglut.a -DGLEXT_INCLUDE_DIR=\path\to\glext
163     ninja -C build
166 #### 2.5.2 Waffle
168 Download and build waffle for MinGW.
169 https://gitlab.freedesktop.org/mesa/waffle
171 Open the Command Prompt.
172 CD to piglit directory.
174     cmake -H. -Bbuild -G "Ninja" -DGLEXT_INCLUDE_DIR=\path\to\glext -DPIGLIT_USE_WAFFLE=TRUE -DWaffle_INCLUDE_DIRS=\path\to\waffle\include\waffle -DWaffle_LDFLAGS=\path\to\waffle\lib\libwaffle-1.dll.a
177 ## 3. How to run tests
179 Make sure that everything is set up correctly:
181     $ ./piglit run sanity results/sanity
183 You may include '.py' on the profile, or you may exclude it (sanity vs sanity.py),
184 both are equally valid.
186 You may also preface test profiles with tests/ (or any other path you like),
187 which may be useful for shell tab completion.
189 You may provide multiple profiles to be run at the same time:
191     $ ./piglit run quick_cl gpu deqp_gles3 results/gl-cl-combined
195     $ ./piglit run
199     $ ./piglit run -h
201 To learn more about the command's syntax.
203 Have a look into the tests/ directory to see what test profiles are available:
205     $ ls tests/*.py
207 See also section 4.
209 To create some nice formatted test summaries, run
211     $ ./piglit summary html summary/sanity results/sanity
213 Hint: You can combine multiple test results into a single summary.
214 During development, you can use this to watch for regressions:
216     $ ./piglit summary html summary/compare results/baseline results/current
218 You can combine as many testruns as you want this way (in theory;
219 the HTML layout becomes awkward when the number of testruns increases)
221 Have a look at the results with a browser:
223     $ xdg-open summary/sanity/index.html
225 The summary shows the 'status' of a test:
227   - **pass:**   This test has completed successfully.
228   - **warn:**   The test completed successfully, but something unexpected happened.
229     Look at the details for more information.
230   - **fail:**   The test failed.
231   - **crash:**  The test binary exited with a non-zero exit code.
232   - **skip:**   The test was skipped.
233   - **timeout:**  The test ran longer than its allotted time and was forcibly killed.
236 There are also dmesg-* statuses. These have the same meaning as above, but are
237 triggered by dmesg related messages.
240 ### 3.1 Environment Variables
242 There are a number of environment variables that control the way piglit
243 behaves.
245   - `PIGLIT_COMPRESSION`
247     Overrides the compression method used. The same values that piglit.conf
248     allows for core:compression.
250   - `PIGLIT_PLATFORM`
252     Overrides the platform run on. These allow the same values as `piglit run -p`.
253     This values is honored by the tests themselves, and can be used when running
254     a single test.
256   - `PIGLIT_FORCE_GLSLPARSER_DESKTOP`
258     Force glslparser tests to be run with the desktop (non-gles) version of
259     glslparsertest. This can be used to test ESX_compatability extensions
260     for OpenGL
262   - `PIGLIT_NO_FAST_SKIP`
264     Piglit has a mechanism run in the python layer for skipping tests with
265     unmet OpenGL or window system dependencies without starting a new
266     process (which is expensive). Sometimes this system doesn't work or is
267     undesirable, setting this environment variable to True will disable this
268     system.
270   - `PIGLIT_NO_TIMEOUT`
272     When this variable is true in python then any timeouts given by tests
273     will be ignored, and they will run until completion or they are killed.
275   - `PIGLIT_VKRUNNER_BINARY`
277     Can be used to override the path to the vkrunner executable for
278     running Vulkan shader tests. Alternatively the config option
279     vkrunner:bin can be used instead. If neither are set then vkrunner
280     will be searched for in the search path.
282   - `PIGLIT_BUILD_DIR`
284     Used to define the directory with the tests and their executable files.
285     If the project is built out of source, this variable must be set for
286     piglit to run successfully.
289 ### 3.2 Note
291 The way `piglit run` and `piglit summary` count tests are different,
292 `piglit run` counts the number of Test derived instance in the profile(s)
293 selected, while `piglit summary` counts the number of subtests a result
294 contains, or it's result if there are no subtests. This means that the number
295 shown by `piglit run` will be less than or equal to the number calculated by
296 `piglit summary`.
299 ### 3.3 Shell Completions
301 Piglit has completions for bash, located in completions/bash/piglit. Once this
302 file is sourced into bash `piglit` and `./piglit` will have tab completion
303 available. For global availability place the file somewhere that bash will
304 source the file on startup. If piglit is installed and bash-completions are
305 available, then this completion file will be installed system-wide.
308 ## 4. Available test sets
310 Test sets are specified as Python scripts in the tests directory.
311 The following test sets are currently available:
314 ### 4.1 OpenGL Tests
316   - **sanity.py** This suite contains minimal OpenGL sanity tests. These tests
317     must pass, otherwise the other tests will not generate reliable results.
318   - **all.py** This suite contains all OpenGL tests.
319   - **quick.py** Run all tests, but cut down significantly on their runtime
320     (and thus on the number of problems they can find).
321   - **gpu.py** A further reduced set of tests from quick.py, this runs tests
322     only for hardware functionality and not tests for the software stack.
323   - **llvmpipe.py** A reduced set of tests from gpu.py removing tests that are
324     problematic using llvmpipe
325   - **cpu.py** This profile runs tests that don't touch the gpu, in other words
326     all of the tests in quick.py that are not run by gpu.py
327   - **glslparser.py** A subset of all.py which runs only glslparser tests
328   - **shader.py** A subset of all.py which runs only shader tests
329   - **no_error.py** A modified version of the test list run as khr_no_error
330     variants
333 ### 4.2 OpenCL Tests
335   - **cl.py** This suite contains all OpenCL tests.
336   - **quick_cl.py** This runs all of the tests from cl.py as well as tests from
337     opencv and oclconform.
340 ### 4.3 Vulkan tests
342   - **vulkan.py** This suite contains all Vulkan tests. Note that
343     currently all of the Vulkan tests require VkRunner. If it is not
344     installed then all of the tests will be skipped.
347 ### 4.4 Replay tests
349   - **replay.py** This profile allows running
350     [replayer.py](replayer/replayer.py) tests from a traces
351     description file. Check its [README](replayer/README.md) for
352     further information about the format of the description files and
353     running dependencies.
355 ### 4.5 External Integration
357   - **xts.py** Support for running the X Test Suite using piglit.
358   - **igt.py** Support for running Intel-gpu-tools test suite using piglit.
359   - **deqp_egl.py** Support for running dEQP's EGL profile with piglit.
360   - **deqp_gles2.py** Support for running dEQP's gles2 profile with piglit.
361   - **deqp_gles3.py** Support for running dEQP's gles3 profile with piglit.
362   - **deqp_gles31.py** Support for running dEQP's gles3.1 profile with piglit.
363   - **deqp_vk.py** Support for running the official Khronos Vulkan CTS profile
364     with piglit.
365   - **khr_gl.py** Support for running the open source Khronos OpenGL CTS tests
366     with piglit.
367   - **khr_gl45.py** Support for running the open source Khronos OpenGL 4.5 CTS
368     tests with piglit.
369   - **cts_gl.py** Support for running the closed source Khronos OpenGL CTS
370     tests with piglit.
371   - **cts_gl45.py** Support for running the closed source Khronos OpenGL 4.5
372     CTS tests with piglit.
373   - **cts_gles.py** Support for running the closed source Khronos GLES CTS
374     tests with piglit.
375   - **oglconform.py** Support for running sub-test of the Intel oglconform test
376     suite with piglit.
379 ## 5. How to write tests
381 Every test is run as a separate process. This minimizes the impact that
382 severe bugs like memory corruption have on the testing process.
384 Therefore, tests can be implemented in an arbitrary standalone language.
385 C is the preferred language for compiled tests, piglit also supports its own
386 simple formats for test shaders and glsl parser input.
388 All new tests must be added to the appropriate profile, all.py profile for
389 OpenGL and cl.py for OpenCL. There are a few basic test classes supported by the
390 python framework:
392   - `PiglitBaseTest`
393     A shared base class for all native piglit tests.
395     It starts each test as a subprocess, captures stdout and stderr, and waits
396     for the test to return.
398     It provides test timeouts by setting the instances 'timeout' attribute to an
399     integer > 0 which is the number of seconds the test should run.
401     It interprets output by reading stdout and looking for 'PIGLIT: ' in the
402     output, and then reading any trailing characters as well formed json
403     returning the test result.
405     This is a base class and should not be used directly, but provides an
406     explanation of the behavior of the following classes.
408   - `PiglitGLTest`
409     A test class for native piglit OpenGL tests.
411     In addition to the properties of PiglitBaseTest it provides a mechanism for
412     detecting test window resizes and rerunning tests as well as keyword
413     arguments for platform requirements.
415   - `PiglitCLTest`
416     A test class for native piglit OpenCL tests.
418     It currently provides no special features.
420   - `GLSLParserTest`
421     A class for testing a glsl parser.
423     It is generally unnecessary to call this class directly as it uses a helper
424     function to search directories for tests.
426   - `ShaderTest`
427     A class for testing using OpenGL shaders.
429     It is generally unnecessary to call this class directly as it uses a helper
430     function to search directories for tests.
433 ## 6. Integration
435 Piglit provides integration for other test suites as well. The rational for
436 this is that it provides piglit's one process per test protections (one test
437 crashing does not crash the whole suite), and access to piglit's reporting
438 tools.
440 Most integration is done through the use of piglit.conf, or through environment
441 variables, with piglit.conf being the preferred method.
444 ### 6.1 dEQP
446 Piglit provides a generic layer for dEQP based test suites, and specific
447 integration for several suites.
449 I suggest using Chad Versace's repo of dEQP, which contains a gbm target.
450 https://github.com/chadversary/deqp
452 It should be built as follows:
454     cmake . -DDEQP_TARGET=gbm -GNinja
456 Additional targets are available in the targets directory. gbm isn't compatible
457 for most (any?) blob driver, so another target might be necessary if that is a
458 requirement. One of the x11_* targets or drm is probably a good choice.
460 The use of ninja is optional.
462 Once dEQP is built add the following information to piglit.conf, which can
463 either be located in the root of the piglit repo, or in `$XDG_CONFIG_HOME`
464 (usually `$HOME/.config`).
466     [deqp-gles2]
467     bin=<deqp source dir>/modules/gles2/deqp-gles2
469     [deqp-gles3]
470     bin=<deqp source dir>/modules/gles3/deqp-gles3
472     [deqp-gles31]
473     bin=<deqp source dir>/modules/gles31/deqp-gles31
475 These platforms can be run using deqp_gles*.py as a suite in piglit.
476 For example:
478     ./piglit run deqp_gles31 my_results -c
480 It is also possible to mix integrated suites and piglit profiles together:
482     ./piglit run deqp_gles31 quick cl my_results
484 dEQP profiles generally contain all of the tests from the previous profile, so
485 gles31 covers gles3 and gles2.
488 ### 6.2 Khronos CTS
490 Add the following to your piglit.conf file:
492     [cts]
493     bin=<cts source dir>/cts/glcts