Release 1.15 (2016-05-31)
-------------------------

- New KMS test: tests/kms_cursor_legacy (Stress legacy cursor ioctl)
(Chris Wilson)

- Several GEM tests have been removed from BAT: tests/gem_exec_whisper,
tests/gem_sync (dropped individual engines), test/gem_cs_prefetch (replaced
by test/gem_exec_gttfill), tests/gem_ctx_param_basic (got relabeled
to tests/gem_ctx_param) (Chris Wilson)

- build: Skip configure step if is NOCONFIGURE set (Tomeu Vizoso)

- tools/intel_bios_reader: Added options for dumping individual panels, specific
section, hex format and other various fixes (Jani Nikula)

- build: Add optional --enable-werror
(hard-fail in case of compiler warnings) (Marius Vlad)

- New KMS test: tests/prime_mmap_kms (show case dma-buf new API
and processes restrictions) (Tiago Vignatti)

- Several tests have gained to ability to be run on different platforms
than Intel: tests/testdisplay (Tomeu Vizoso), tests/kms_panel_fitting
(Robert Foss), tests/kms_flip_event_leak, tests/kms_flip (Tomeu Vizoso).

- compute exitcode first: In the case of running multiple subtests which all
happen to be skipped, igt_exitcode is 0, but the final exit code will be 77.
(Chris Wilson)

- Shorten tests/kms_flip test (Tvrtko Ursulin)

- Half the timeout for suspend to RAM and a third for suspend to disk
(Marius Vlad)

- lib: Pass format instead of bpp to create_bo_for_fb (Ville Syrjälä)

- Removed from tests/test-list.txt, tests/gem_concurrent_all and added
tests/test-list-full.txt that contains all the tests. This will speed
up considerably piglit when starting tests. (Gabriel Feceoru)

- piglit changed its behaviour to prevent overwriting the results. A fairly new
version of piglit is required to run i-g-t tests. (Gabriel Feceoru)

- lib: Replace drmIoctl() with a layer of indirection (Chris Wilson)

- Adding missing Broxton PCI IDs (Rodrigo Vivi)

- Added COMMIT_ATOMIC (lib/igt_kms, w/ tests/kms_rotation_crc).
Requires nuclear_pageflip parameter turned on in the i915 driver.
(Mayuresh Gharpure, Pratik Vishwakarma)

- man/: rewrite manual pages in reStructuredText (Jani Nikula)

- tests/drv_module_reload_basic: perform fault injection (Chris Wilson)
with various improvements (Imre Deak)

- Removed tests/gem_multi_bsd_sync_loop which was superseded by
tests/gem_ring_sync_loop and tests/gem_dummy_reloc_loop by
tests/gem_exec_reloc (Chris Wilson)

- New GEM tests: tests/gem_exec_whisper, tests/gem_exec_store,
test/gem_exec_gttfill, tests/gem_exec_suspend, tests/gem_exec_flush
(Chris Wilson)

- New benchmarks: benchmarks/gem_syslatency, benchmarks/gem_exec_fault
(Chris Wilson)

- tests/gem_exec_nop included in BAT (Chris Wilson)

- tests/pm_rpm: Fix crash on machines that lack LLC (David Weinehall)

- lib/igt_fb: Fix domain tracking for GTT cairo surfaces (Chris Wilson)

- Add igt_subtest_group to allow igt_fixture for only a subset of subtests
without skipping/failing all subsequent subtests. (Daniel Vetter)

- Many more fixes and improvements.

Release 1.14 (2016-03-01)
-------------------------

- New test: gem_create validate parameters for GEM_CREATE ioctl
(Ankitprasad Sharma)

- New test: gem_softpin exercise the userptr ioctl to create shared
buffers between CPU and GPU (Vinay Belgaumkar)

- New tests: prime_mmap_coherency/kms_mmap_write_crc cache coherency
tests (Tiago Vignatti)

- New test: prime_mmap mmap() on dma-buf fds (Rob Bradford)

- New test: gem_exec_reloc sanity check of execbuf-ioctl relocations (Chris
Wilson)

- New test: gem_exec_basic sanity check of execbuf-ioctl rings (Chris Wilson)

- improved igt_hang_ring() infrastructure for generic hang injection support in
the core library (Chris Wilson)

- new igt_pm library to collect power management testing helpers (David
Weinehall)

- lig/igt_vc4: VC4 support library (Eric Anholt)

- kms_frontbuffer_tracking: included in BAT (Paulo Zanoni)

- kms_psr_sink_crc: Add BAT test for PSR active (Rodrigo Vivi)

- gem_wait: test superseded by gem_latency in benchmarks (Chris Wilson)

- igt_core: Fix logging to display extended line (Derek Morton)

- igt_core: Expand --run-subtest functionality (Derek Morton)

- kms_force_connector_basic: various fixes and included in BAT set (Daniel
Vetter)

- Many other improvements and bug fixes.

Release 1.13 (2015-12-02)
-------------------------

- New test: kms_atomic tests atomic mode setting (Daniel Stone)

- New test: core_prop_blob tests blob properties (Daniel Stone)

- New test: gem_request_retire targets request retirement code paths
  (Tvrtko Ursulin)

- New test: core_setmaster_vs_auth checks that drop/setMaster correctly
  transfer master state (Thomas Hellstrom/Daniel Vetter)

- Wildcard characters are now accepted when using the --run-subtest command
  line option to specify multiple subtests to run. (Thomas Wood)

- Add support for Broxton in intel_audio_dump (Han Lu)

- Added Kabylake support (Rodrigo Vivi/Wayne Boyer)

- Many other bug fixes and improvements

Release 1.12 (2015-09-11)
-------------------------

- Various new tests and tools

- New statistical analysis functions. (Damien Lespiau)

- New benchmark tests. (Chris Wilson)

- Old register tools that were superseded by intel_reg have been removed.

- Various tests have been marked "basic", to indicate they are suitable for
  use in basic acceptance testing. (Jesse Barnes)

- Per-ring gem_storedw_loop tests combined into a single test with subtests.
  (Jesse Barnes)

- New "aubdump" tool, used to launch an application and capture rendering to
  an AUB file. (Kristian Høgsberg Kristensen)

- Cherryview support added to intel_display_poller. (Ville Syrjälä)

- Skylake and Broadwell support added to gem_gpgpu_fill tests.
  (Dominik Zeromski)

- Support for running core drm tests on any platform. (Micah Fedke)

- Many other bug fixes

Release 1.11 (2015-06-11)
-------------------------

- Various new tests and tools

- Single combined test list (supported by piglit since commit 8a122bb)

- Optional dependency on libunwind to provide automatic stack traces on test
  failures. (Thomas Wood)

- Add optional default debug and optimisation flags for tests to enable better
  stack traces and debugging. (Thomas Wood)

- Test programs are now installed into libexec. This is useful when building a
  complete software stack for a DUT from scratch. (Building and installing
  tests can still be disabled by the --disable-tests configure flag.)
  (Joonas Lahtinen)

- New tool to decode watermark registers (Ville Syrjälä)

- Timeout mechanism now reports test as failed

- Introduce intel_reg as the one Intel graphics register multitool to replace
  intel_reg_read, intel_reg_write, intel_iosf_sb_read, intel_iosf_sb_write,
  intel_vga_read, intel_vga_write, intel_reg_dumper, intel_reg_snapshot,
  and quick_dump.py. (Jani Nikula)

- Add functions to manipulate i915.ko parameters and ensure features are enabled
  for testing. (Paulo Zanoni)

Release 1.10 (2015-03-12)
-------------------------

- New frequency manipulation tool (intel_gpu_frequency)

- Adjustments for the Solaris port (Alan Coopersmith).

- Remove tests/NAMING-CONVENTION since it's all in the docbook now, to avoid
  divergent conventions.

- New CRITICAL log level for really serious stuff (Thomas Wood).

- Interactive test mode can now be enabled by the shared cmdline option
  --interactive-debug=$var (Rodrigo Vivi).

- Improved logging to kmsg to better line up test runs with kernel messages
  (Chris Wilson).

- Record all log levels (including disabled levels) in a ringbuffer and dump
  that on test failures for quicker diagnostics of automated test run results
  (Thomas Wood).

- A lot of small polish all over the test library.

- Piles of new testcases and improvements to existing ones as usual.

Release 1.9 (2014-12-12)
------------------------

- New test cases added: drm_import_export, gem_gpgpu_fill, gem_ppgtt,
  gem_tiled_wb, kms_pwrite_crc.

- New helper for interactive progress indicators (see igt_print_activity and
  igt_progress), which can be disabled by setting the log-level to warn (Thomas
  and Daniel).

- Basic skl support: pci ids, rendercopy & mediafill (Damien, Zhao Yakui).

- chv support for the iosf sideband tools and a few other improvements (Ville).

- Fence register support for intel_reg_dumper on bdw+ (Rodrigo).

- Support for skl in quick_dump (Damien).

- Golden state generation infrastructure (Mika).

- New skl watermark tool (Damien).

- New EDID test block that includes multiple display modes (Thomas).

- Individual test documentation available in generated documentation and from
  the test binaries (Thomas).

- New logging domains and log filtering (Thomas).

- Various API documentation fixes and improvements (Thomas).

Release 1.8 (2014-09-08)
------------------------

- Added lib/igt.cocci semantic patch to catch often-seen patterns and convert
  them to igt macros/infrastructure.

- Improvements to the documentation build systems (Thomas).

- Small fixes and improvements to the igt infrastructure and helpers all over.

- As usual piles of new tests.

- Improved plane/pipe handling in the igt_kms library (Damien).

- Unified option parsing between simple tests and tests with subtests (Thomas).
  This will allow us to merge the different Makefile targets once test runners
  are converted.

- New commit functions for igt_kms to support the new universal planes
  interfaces (Matt Roper).

- Polish the debug output when test requirements aren't met a bit and inject the
  program name/subtest in dmesg for easier backtrace/oom debugging (Chris).

- A bit of polish for the framebuffer helper functions (Damien).

- Robuster option parsing helpers, they now check for conflicts when merging
  different option lists (Thomas).

- MIPI DSI vbt support in intel_bios_read (Gaurav K Singh).

- Clarify the split between low-level helpers and the high-level library in
  igt_kms a bit by renaming some functions and improving and extending the api
  documentation.

- Helper to restore the vt mode, useful to test lastclose/fbdev emulation
  behaviour (Thomas).

- Refactor the support for 64bit relocs. By specifying the number of relocations
  explicit a lot of the gen8 checks can be removed from simple testcases which
  only use the blitter (Chris).

Release 1.7 (2014-06-09)
------------------------

- Piles of API documentation for the core i-g-t testing libraries.

- Improved igt loggin, now also with igt_vlog (for va_args printf-style
  logging).

- Polish for the igt_debugfs library.

- Split out igt_fb library from igt_kms, cleanup of the igt_kms functions.

- Android porting patches (Tim Gore, Tvrtko Ursulin).

- Piles more tests as usual.

- Support for building libcairo based tests on Android. Set ANDROID_HAS_CAIRO=1
  in the build enviroment when you have this (Tim Gore).

- Timeout support in igt_aux, see igt_set_timeout (Thomas).

- Documentation for the testrunner interface like exit codes, subtest
  enumeration and log output. Should help other people to run the tests in their
  own framework.

- Make swig an optional dependency (Damien).

- Helpers for runtime pm tests in igt_aux.

Release 1.6 (2014-03-13)
------------------------

- Changes to support Broadwell in the test suite. (Ben, Damien, et al.)

- Updated (now working again!) Android support from Oscar Mateo.

- Test coverage through i-g-t is now officially an integral part of any drm/i915
  feature work and also for bugfixes. For more details see:

  http://blog.ffwll.ch/2013/11/testing-requirements-for-drmi915.html

- Fix the gen4asm build dependency handling, now that the assembler is included in
  i-g-t (Ben).

- Improve the cairo object lifetime management of the kmstest helpers (Chris).

- Allow register access to succeed if i915 is loaded but debugfs isn't found
  (i.e. nomodeset is used)

- New kernel modesetting helper library for simpler testcases (Damien).

- New structure logging support for tests. Message at the WARN level be
  reflected in the piglit result, also included igt_warn_on macros to simplify
  test asserts which should just result in warnings, but not in a test abort.

- Broadwell support for intel_audio_dump (Mengdong Lin).

- API documentation support (Thomas)

Release 1.5 (2013-11-06)
------------------------

- Some polishing of the test infrastructure, for details see:

  http://blog.ffwll.ch/2013/09/more-drmi915-testsuite-infrastructure.html

- Haswell support for the DPF tool (tools/intel_l3_parity) and other
  improvements (Ben).

- Stereo/3D support in testdisplay (Damien).

- Support for gen7 gpu perf counters in tools/intel_perf_counters (Kenneth).

- Improvements to the VBT decoder (Jani).

- New tool to read legacy VGA registers (Ville).

- New helpers in the test library to help deal with debugfs files and the new
  display pipe CRC support (Damien).

- Introduction of a proper naming convention for all the testcases, see
  tests/NAMING-CONVENTION.

- As usual tons of new testcases and improvements and bugfixes to existing ones.

- The testsuite framework itself has gained some regression tests which can be
  run at compile-time with "make check".

- New helpers for the drop_cache kernel interface and use drop_caches(RETIRE) to
  really make sure the gpu is idle in testcases (Oscar Mateo).

Release 1.4 (2013-09-16)
------------------------

- Integration of the gen4+ assembler (Damien).

- Start of a new performance analysis tool from Chris Wilson with front-ends for
  both X11 and plain kms. This uses the perf subsystem and the gpu performance
  counter kernel patches from Chris.

- New register dumper quick_dump from Ben, with lots of work from Damien. This
  will superseed intel_reg_dumper for newer platforms (which are not yet
  released) since it will allow us to automatically generate register dumps from
  the internal xml register specifications.

- Tools to access the pletoria of new indirect register access functions on
  newer platforms.

- Framebuffer contents dumper to debug some of the nastier corruption issues.
  The advantage here is that this bypasses any userspace drivers and so avoids
  that the corruptions get magically fixed when taking an X screenshot.

- Tons of new testcases. Including subtests we are now at roughly 450 tests!

- Improvements to the test framework infrastructure. See
  http://blog.ffwll.ch/2013/08/recent-drmi915-testsuite-improvements.html
  for an overview.

Release 1.3 (2012-08-27)
------------------------

- massive improvements to the testsuite
- dpf tool for handling l3 remapping on gen7 (Ben)
- robustify against wc gtt mappings (Chris)
- improvements to the reg_dumper and register read/write tools
- haswell support

Release 1.2 (2012-02-09)
------------------------

- intel_audio_dump improvements (Wu Fengguang)
- buildsystem improvements (Gaetan Nadon)
- solaris support (Alan Coopersmith)
- massive refactoring of testcases and rendercpy extraction
- new tests
- fixed up intel_reg_read/write for platforms needing forcewake (needs a
  kernel patch which from 3.3 to work on ivb - Ben Widawsky)

Release 1.1 (2011-12-24)
------------------------

Improved testsuite, usable for kernel regression testing!

Release 1.0 (2009-04-27)
------------------------

Initial release:
- miscellaneous userland tools that don't really fit into the 2D driver tree
- standalone regression tests for the DRM (make check)
- microbenchmarks of the DRM for kernel performance regression testing
