This is a collection of tools for development and testing of the Intel DRM
driver.  There are many macro-level test suites that get used against our
driver, including xtest, rendercheck, piglit, and oglconform, but failures
from those can be difficult to track down to kernel changes, and many require
complicated build procedures or specific testing environments to get useful
results.

Thus, intel-graphics-tools was a project I started to collect some low-level
tools I intended to build.

benchmarks/
	This should be a collection of useful microbenchmarks.  The hope is
	that people can use these to tune some pieces of DRM code in relevant
	ways.

	The benchmarks require KMS to be enabled.  When run with an X Server
	running, they must be run as root to avoid the authentication
	requirement.

	Note that a few other microbenchmarks are in tests (like gem_gtt_speed).

tests/
	This is a set of automated tests to run against the DRM to validate
	changes.  Hopefully this can cover the relevant cases we need to
	worry about, including backwards compatibility.

	Run this tests with "make test" as root from this directory. Note that
	no other drm clients (X server) may run.

	"make test" only runs a default set of tests and is useful for
	regression testing. Other tests not run are:
	- tests that might hang the gpu, see HANG in Makefile.am
	- gem_stress, a stress test suite. Look at the source for all the
	  various options.
	- testdisplay is only run in the default mode. testdisplay has tons of
	  options to test different kms functionality, again read the source for
	  the details.

	The more comfortable way to run tests is with piglit. First grab piglit
	from:

	git://anongit.freedesktop.org/piglit

	and build it (no need to install anything). Then we need to link up the
	i-g-t sources with piglit

	piglit-sources $ cd bin
	piglit-sources/bin $ ln $i-g-t-sources igt -s

	The tests in the i-g-t sources need to have been built already. Then we
	can run the testcases with (as usual as root, no other drm clients
	running):

	piglit-sources # ./piglit-run.py tests/igt.tests <results-file>

	The testlist is built at runtime, so no need to update anything in
	piglit when adding new tests. See

	piglit-sources $ ./piglit-run.py -h

	for some useful options.

lib/
	Common helper functions and headers used by the other tools.

man/
	Manpages, unfortunately rather incomplete.

tools/
	This is a collection of debugging tools that had previously been
	built with the 2D driver but not shipped.  Some distros were hacking
	up the 2D build to ship them.  Instead, here's a separate package for
	people debugging the driver.

	These tools generally must be run as root, safe for the ones that just
	decode dumps.

tools/quick_dump
	Quick dumper is a python tool built with SWIG bindings to
	important libraries exported by the rest of the tool suite. The tool
	itself is quite straight forward, and should also be a useful example
	for others wishing to write python based i915 tools.

	Note to package maintainers: It is not recommended to package
	this directory, as the tool is not yet designed for wide usage. If the
	package is installed via "make install" the users will have to set
	their python library path appropriately. Use --disable-dumper

debugger/
	This tool is to be used to do shader debugging. It acts like a
	debug server accepting connections from debug clients such as
	mesa. The connections is made with unix domain sockets, and at some
	point it would be nice if this directory contained a library for
	initiating connections with debug clients..

	The debugger must be run as root: "sudo debugger/eudb"
