summaryrefslogtreecommitdiff
path: root/README
blob: 530879dc02b2ca74277e44823666c8ab33a7d96a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302

Piglit
------
1. About
2. Setup
3. How to run tests
4. Available test sets
5. How to write tests
6. Todo


1. About
--------

Piglit is a collection of automated tests for OpenGL and OpenCL
implementations.

The goal of Piglit is to help improve the quality of open source
OpenGL and OpenCL drivers by providing developers with a simple means to
perform regression tests.

The original tests have been taken from
- Glean ( http://glean.sf.net/ ) and
- Mesa ( http://www.mesa3d.org/ )


2. Setup
--------

First of all, you need to make sure that the following are installed:

  - Python 2.7 or greater
  - Python Mako module
  - numpy (http://www.numpy.org)
  - cmake (http://www.cmake.org)
  - GL, glu and glut libraries and development packages (i.e. headers)
  - X11 libraries and development packages (i.e. headers)
  - waffle (http://people.freedesktop.org/~chadversary/waffle)
  - nose. Only needed for python framework tests
    (https://nose.readthedocs.org/en/latest/)

Now configure the build system:

  $ ccmake .

This will start cmake's configuration tool, just follow the onscreen
instructions. The default settings should be fine, but I recommend you:
 - Press 'c' once (this will also check for dependencies) and then
 - Set "CMAKE_BUILD_TYPE" to "Debug"
Now you can press 'c' again and then 'g' to generate the build system.
Now build everything:

  $ make


2.1 Cross Compiling
-------------------

On Linux, if cross-compiling a 32-bit build on a 64-bit host, then you must
invoke cmake with option "-DCMAKE_SYSTEM_PROCESSOR=i386".


2.2 Ubuntu
----------

Install development packages.
  $ sudo apt-get install cmake g++ mesa-common-dev libgl1-mesa-dev python-numpy python-mako freeglut3-dev x11proto-gl-dev libxrender-dev

Install additional components for which Ubuntu packages do not yet exist:
  - waffle (http://people.freedesktop.org/~chadversary/waffle)

Configure and build.
  $ cmake .
  $ make


2.3 Mac OS X
------------

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 .
  $ make

glean

glean will not build with MacOSX10.7.sdk. If you are trying to 
build glean on Mac OS 10.7 (Lion), you will have to use MacOSX10.6.sdk.
  $ ccmake .
Set 'CMAKE_OSX_SYSROOT' to '/Developer/SDKs/MacOSX10.6.sdk'. Configure. 
Generate and exit.
  $ make


2.4 Cygwin
----------

Install development packages.
  - cmake
  - gcc4
  - make
  - opengl
  - libGL-devel
  - python
  - python-numpy
  - libglut-devel
  - libGLU-devel

Configure and build.
  $ cmake .
  $ make


2.5 Windows
-----------

Install Python.
http://www.python.org/download

Install NumPy.
http://sourceforge.net/projects/numpy/files/NumPy

Install CMake.
http://cmake.org/cmake/resources/software.html
Download and install 'Windows' platform.

Install Microsoft Visual Studio.
Install 'Visual C++' feature.

Download OpenGL Core API and Extension Header Files.
http://www.opengl.org/registry/#headers
Copy header files to MSVC.
C:\Program Files\Microsoft Visual Studio 10.0\VC\include\GL

Download freeglut for MSVC.
http://www.transmissionzero.co.uk/software/freeglut-devel

Install pip.
http://www.pip-installer.org/en/latest/installing.html

Install python mako.
  > c:\Python27\Scripts\pip.exe install mako

Open Visual Studio Command Prompt.
Start Menu->All Programs->Microsoft Visual Studio 2010->Visual Studio Tools->Visual Studio Command Prompt (2010)
CD to piglit directory.

Run CMake GUI.
  > C:\Program Files\CMake 2.8\bin\cmake-gui.exe .
Configure
  - NMake Makefiles
  - Use default native compilers
Set these variables in the Advanced view.
  - GLUT_INCLUDE_DIR
  - GLUT_glut_LIBRARY
Configure
Generate
File->Exit

Build from the Visual Studio Command Prompt.
  > nmake


3. How to run tests
-------------------

Make sure that everything is set up correctly:

  $ ./piglit-run.py tests/sanity.tests results/sanity.results

This will run some minimal tests.  If you built Piglit out-of-source, then the
environment variable PIGLIT_BUILD_DIR must be set:

  $ env PIGLIT_BUILD_DIR=/path/to/piglit/build/dir \
    ./piglit-run.py tests/sanity.tests results/sanity.results

Use

  $ ./piglit-run.py

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.py summary/sanity results/sanity.results

Hint: You can combine multiple test results into a single summary.
      During development, you can use this to watch for regressions:

  $ ./piglit-summary-html.py summary/compare results/baseline.results results/current.results

      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:

 pass  This test has completed successfully.

 warn  The test completed successfully, but something unexpected happened.
       Look at the details for more information.

 fail  The test failed.

 skip  The test was skipped.

[Note: Once performance tests are implemented, 'fail' will mean that the test
       rendered incorrectly or didn't complete, while 'warn' will indicate a
       performance regression]
[Note: For performance tests, result and status will be different concepts.
       While status is always restricted to one of the four values above,
       the result can contain a performance number like frames per second]


4. Available test sets
----------------------

Test sets are specified as Python scripts in the tests directory.
The following test sets are currently available:

sanity.py
    This suite contains minimal sanity tests. These tests must
    pass, otherwise the other tests will not generate reliable results.

all.py
    This suite contains all OpenGL tests.

all_cl.py
    This suite contains all OpenCL tests.

quick.py
    Run all tests, but cut down significantly on their runtime
    (and thus on the number of problems they can find).
    In particular, this runs Glean with the --quick option, which
    reduces the number of visuals and state combinations tested.

radeon.py
r300.py
r500.py
    These test suites are adaptations of all.tests, with some tweaks
    to account for hardware limitations in Radeon chips.


5. How to write tests
---------------------

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.
I recommend C, C++ and Python, as these are the languages that are already
used in Piglit.

All new tests must be added to the all.py profile. The test profiles
are simply Python scripts. There are currently two supported test types:

 PlainExecTest
   This test starts a new process and watches the process output (stdout and
   stderr). Lines that start with "PIGLIT:" are collected and interpreted as
   a Python dictionary that contains test result details.

 GleanTest
   This is a test that is only used to integrate Glean tests

Additional test types (e.g. for automatic image comparison) would have to
be added to core.py.

Rules of thumb:
  Test process that exit with a nonzero returncode are considered to have
  failed.

  Output on stderr causes a warning.


6. Todo
-------

 Get automated tests into widespread use ;)

 Automate and integrate tests and demos from Mesa
   Add code that automatically tests whether the test has rendered correctly

 Performance regression tests
   Ideally, this should be done by summarizing / comparing a history of
   test results
   Note that while some small artificial micro-benchmark could be added to
   Piglit, the Phoronix test suite is probably a better place for
   realistic performance testing.