summaryrefslogtreecommitdiff
path: root/README.md
blob: 201b3c1fb1acb5d2ceb8c71e3abae22e939fd96f (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
Crucible: a Vulkan test suite
=============================

  cru·ci·ble
  ˈkro͞osəb(ə)l/
  noun

  [literal] a ceramic or metal container in which metals or other substances
  may be melted or subjected to very high temperatures.

  [symbolic] a place or occasion of severe test or trial.
  ex: "the crucible of combat"


Feature Summary
---------------

- Crucible requires no window system, as all tests run headless. To allow
  inspection of test images, tests may optionally dumping them to PNG files.
  (See option '--dump' in crucible-run.1.txt).

- The test runner and the tests themselves reside in different processes. This
  protects the test runner from crashing tests.

- Crucible can run each test as a separate process, providing better isolation
  between tests and thus improving reproducibility of results. (See option
  '--isolation' in crucible-run.1.txt).

- Crucible can also run each test as a separate thread in a single process,
  providing better testing of concurrent use of Vulkan. (See option
  '--isolation' in crucible-run.1.txt).

- Tests are based on comparison of reference images to actual images.
  Most reference images are PNG files committed into the source repository or
  generated at build-time. Some are generated at runtime with CPU rasterization.

- Tests can optionally dump their reference images and actual images to PNG
  files to a temporary directory, allowing easy inspection when debugging
  failing tests.  (See option '--dump' in crucible-run.1.txt).


Supported Platforms
-------------------

- Crucible requires a C11 compiler. This language requirement may be lowered to
  C99 for the sake of portability. (The language requirement will *not* be
  lowered to C90).

- Operating Systems
    - Linux: Crucible has been exclusively developed on Fedora 22. Porting to other
      Linux distributions should require only minimal effort consisting of
      generalizing some header and library names. Crucible is independent of window
      system.

    - Other Unixen: Porting to Mac OS X or Android should be straightforward, as
      Crucible mostly conforms to POSIX.

    - Non-Unixy: Patches welcome.

- Hardware and Drivers
    - Intel: Crucible has been exclusively developed against Intel's Mesa
      drivers for Broadwell and Ivybridge. (That is, the drivers directly
      developed by Intel, not by LunarG).

    - Other: Not yet tested.


Contributing
------------

Crucible uses merge requests in https://gitlab.freedesktop.org/mesa/crucible
for code review.  When submitting merge requests, please check the box labeled
"Allow commits from members who can merge to the target branch".  This allows
maintainers to rebase your branch prior to merging.

Read the HACKING file for information about how the code is organized.


License
-------

Crucible is opensource software. See the LICENSE file for details.