description | none |
repository URL | https://gitlab.freedesktop.org/mesa/piglit.git |
owner | hramrach@centrum.cz |
last change | Wed, 20 Nov 2024 22:56:01 +0000 (20 22:56 +0000) |
last refresh | Thu, 21 Nov 2024 08:19:43 +0000 (21 09:19 +0100) |
mirror URL | git://repo.or.cz/piglit.git |
https://repo.or.cz/piglit.git | |
ssh://git@repo.or.cz/piglit.git | |
bundle info | piglit.git downloadable bundles |
content tags |
Piglit is a collection of automated tests for OpenGL, Vulkan, and OpenCL implementations.
The goal of Piglit is to help improve the quality of open source OpenGL, Vulkan, and OpenCL drivers by providing developers with a simple means to perform regression tests.
The original tests have been taken from
First of all, you need to make sure that the following are installed:
Optionally, you can install the following:
For testing the python framework using py.test unittests/framework
Now configure the build system:
$ cmake . -G Ninja
Now build everything:
$ cmake --build .
On Linux, if cross-compiling a 32-bit build on a 64-bit host, first make sure
you didn't have CMakeCache.txt file left from 64-bit build (it would retain old
flags), then you must invoke cmake with options
-DCMAKE_SYSTEM_PROCESSOR=x86 -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32
.
Install development packages.
$ 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
Configure and build.
$ cmake . -G Ninja
$ cmake --build .
Install CMake. http://cmake.org/cmake/resources/software.html Download and install 'Mac OSX Universal' platform.
Install Xcode. http://developer.apple.com/xcode
Configure and build.
$ cmake .
$ cmake --build .
Install development packages.
Configure and build.
$ cmake .
$ cmake --build .
Install Python 3. http://www.python.org/download
Install CMake. http://cmake.org/cmake/resources/software.html Download and install 'Windows' platform.
Download and install Ninja https://github.com/ninja-build/ninja/releases
Install MinGW-w64 https://mingw-w64.org/
Download OpenGL Core API and Extension Header Files.
https://github.com/KhronosGroup/OpenGL-Registry
Pass -DGLEXT_INCLUDE_DIR=/path/to/headers
Install python mako.
pip install mako
Install NumPy.
pip install numpy
Download freeglut for Mingw. http://www.transmissionzero.co.uk/software/freeglut-devel/
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
ninja -C build
Download and build waffle for MinGW. https://gitlab.freedesktop.org/mesa/waffle
Open the Command Prompt. CD to piglit directory.
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
Make sure that everything is set up correctly:
$ ./piglit run sanity results/sanity
You may include '.py' on the profile, or you may exclude it (sanity vs sanity.py), both are equally valid.
You may also preface test profiles with tests/ (or any other path you like), which may be useful for shell tab completion.
You may provide multiple profiles to be run at the same time:
$ ./piglit run quick_cl gpu deqp_gles3 results/gl-cl-combined
Use
$ ./piglit run
or
$ ./piglit run -h
To learn more about the command's syntax.
Have a look into the tests/ directory to see what test profiles are available:
$ ls tests/*.py
See also section 4.
To create some nice formatted test summaries, run
$ ./piglit summary html summary/sanity results/sanity
Hint: You can combine multiple test results into a single summary. During development, you can use this to watch for regressions:
$ ./piglit summary html summary/compare results/baseline results/current
You can combine as many testruns as you want this way (in theory; the HTML layout becomes awkward when the number of testruns increases)
Have a look at the results with a browser:
$ xdg-open summary/sanity/index.html
The summary shows the 'status' of a test:
There are also dmesg-* statuses. These have the same meaning as above, but are triggered by dmesg related messages.
There are a number of environment variables that control the way piglit behaves.
PIGLIT_COMPRESSION
Overrides the compression method used. The same values that piglit.conf allows for core:compression.
PIGLIT_PLATFORM
Overrides the platform run on. These allow the same values as piglit run -p
.
This values is honored by the tests themselves, and can be used when running
a single test.
PIGLIT_FORCE_GLSLPARSER_DESKTOP
Force glslparser tests to be run with the desktop (non-gles) version of glslparsertest. This can be used to test ESX_compatability extensions for OpenGL
PIGLIT_NO_FAST_SKIP
Piglit has a mechanism run in the python layer for skipping tests with unmet OpenGL or window system dependencies without starting a new process (which is expensive). Sometimes this system doesn't work or is undesirable, setting this environment variable to True will disable this system.
PIGLIT_NO_TIMEOUT
When this variable is true in python then any timeouts given by tests will be ignored, and they will run until completion or they are killed.
PIGLIT_VKRUNNER_BINARY
Can be used to override the path to the vkrunner executable for running Vulkan shader tests. Alternatively the config option vkrunner:bin can be used instead. If neither are set then vkrunner will be searched for in the search path.
PIGLIT_BUILD_DIR
Used to define the directory with the tests and their executable files. If the project is built out of source, this variable must be set for piglit to run successfully.
The way piglit run
and piglit summary
count tests are different,
piglit run
counts the number of Test derived instance in the profile(s)
selected, while piglit summary
counts the number of subtests a result
contains, or it's result if there are no subtests. This means that the number
shown by piglit run
will be less than or equal to the number calculated by
piglit summary
.
Piglit has completions for bash, located in completions/bash/piglit. Once this
file is sourced into bash piglit
and ./piglit
will have tab completion
available. For global availability place the file somewhere that bash will
source the file on startup. If piglit is installed and bash-completions are
available, then this completion file will be installed system-wide.
Test sets are specified as Python scripts in the tests directory. The following test sets are currently available:
Every test is run as a separate process. This minimizes the impact that severe bugs like memory corruption have on the testing process.
Therefore, tests can be implemented in an arbitrary standalone language. C is the preferred language for compiled tests, piglit also supports its own simple formats for test shaders and glsl parser input.
All new tests must be added to the appropriate profile, all.py profile for OpenGL and cl.py for OpenCL. There are a few basic test classes supported by the python framework:
PiglitBaseTest
A shared base class for all native piglit tests.
It starts each test as a subprocess, captures stdout and stderr, and waits for the test to return.
It provides test timeouts by setting the instances 'timeout' attribute to an integer > 0 which is the number of seconds the test should run.
It interprets output by reading stdout and looking for 'PIGLIT: ' in the output, and then reading any trailing characters as well formed json returning the test result.
This is a base class and should not be used directly, but provides an explanation of the behavior of the following classes.
PiglitGLTest
A test class for native piglit OpenGL tests.
In addition to the properties of PiglitBaseTest it provides a mechanism for detecting test window resizes and rerunning tests as well as keyword arguments for platform requirements.
PiglitCLTest
A test class for native piglit OpenCL tests.
It currently provides no special features.
GLSLParserTest
A class for testing a glsl parser.
It is generally unnecessary to call this class directly as it uses a helper function to search directories for tests.
ShaderTest
A class for testing using OpenGL shaders.
It is generally unnecessary to call this class directly as it uses a helper function to search directories for tests.
See the HACKING file.
Piglit provides integration for other test suites as well. The rational for this is that it provides piglit's one process per test protections (one test crashing does not crash the whole suite), and access to piglit's reporting tools.
Most integration is done through the use of piglit.conf, or through environment
variables, with piglit.conf
being the preferred method.
Piglit provides a generic layer for dEQP based test suites, and specific integration for several suites.
Use the upstream dEQP repo (maintained by Khronos members), which contains the official conformance tests (CTS): https://github.com/KhronosGroup/VK-GL-CTS
Once dEQP is built add the following information to piglit.conf, which can
either be located in the root of the piglit repo, or in $XDG_CONFIG_HOME
(usually $HOME/.config
).
[deqp-gles2]
bin=<deqp source dir>/modules/gles2/deqp-gles2
[deqp-gles3]
bin=<deqp source dir>/modules/gles3/deqp-gles3
[deqp-gles31]
bin=<deqp source dir>/modules/gles31/deqp-gles31
These platforms can be run using deqp_gles*.py as a suite in piglit. For example:
./piglit run deqp_gles31 my_results -c
It is also possible to mix integrated suites and piglit profiles together:
./piglit run deqp_gles31 quick cl my_results
dEQP profiles generally contain all of the tests from the previous profile, so gles31 covers gles3 and gles2.
Add the following to your piglit.conf file:
[cts]
bin=<cts source dir>/cts/glcts
15 years ago | piglit-v1 | commitlog |
9 hours ago | main | logtree |
6 years ago | ppgtt | logtree |
7 years ago | dither | logtree |
14 years ago | glsl2 | logtree |
14 years ago | shader_runner | logtree |
14 years ago | glean-master | logtree |
piglit/hramrach.git | hramrach@centrum.cz | 14 years ago | summarylogtree |