Release 1.23 (2018-07-18)
-------------------------

General changes:

- Bumped used C standard to gnu11. (Lucas De Marchi)

- Bumped required meson version to 0.44. (Petri Latvala)

- Introduced meson options for explicit control over optional dependencies.
  (Petri Latvala)

- Added a meson option to set runpath for the installed executables.
  (Petri Latvala)

- GLib is now a mandatory dependency. (Petri Latvala)

- Added testlists for the vc4 driver. (Maxime Ripard)

- The project has now finalized its name change and is now IGT GPU Tools,
  docs and install paths are now "igt-gpu-tools". (Arkadiusz Hiler)

- Added a blacklist for the Intel CI. (Petri Latvala)


Library changes:

- i915_pciids.h updated to include KBL, ICL, WHL and AML.
  (José Roberto de Souza, Paulo Zanoni)

- Overhaul of gpu_cmds, gpgpu_fill, media_fill and rendercopy.
  (Katarzyna Dec, Lukasz Kalamarz)

- Added igt_matrix and igt_color_encoding helper libraries. (Ville Syrjälä)

- IGT now shows the kernel stack trace when reporting a GPU hang. (Chris Wilson)

- Added Icelake platform support. (Arkadiusz Hiler, Paulo Zanoni)


Tools changes:

- intel-gpu-top was rewritten to be safe to use. (Tvrtko Ursulin)


Documentation changes:

- Documented commit rights in CONTRIBUTING. (Daniel Vetter)


Test changes:

- kms_prs_sink_crc was renamed to kms_psr. (Dhinakaran Pandiyan)

- kms_frontbuffer_tracking no longer tests sink crc. (Dhinakaran Pandiyan)

- drm_vma_limiter is no more. (Chris Wilson)


And many other bug fixes, improvements, cleanups and new tests.


Release 1.22 (2018-03-09)
-------------------------

General changes:

- Libudev has been made a mandatory dependency. (Antonio Argenziano)

- Documentation changed to refer to the new igt-dev mailing
  list. (Rhys Kidd)

Library changes:

- Refactored timer usage for smaller code size. (Chris Wilson)

- Various fixes to support planar framebuffers. (Maarten Lankhorst)

- Added support for fetching the most recent CRC without waiting for a
  vblank, along with flushing the queue of already collected
  CRCs. (Maarten Lankhorst)

- Added a helper to mark BOs purgeable on vc4. (Boris Brezillon)

- Moved handling of a "cork" BO into lib from various tests.
  (Daniele Ceraolo Spurio)

- Added support for looping over physical i915 engines, as opposed to
  uABI engines that can alias. (Chris Wilson)

- Added an accelerated method for reading from WC buffers.
  (Chris Wilson)

Tools changes:

- Improved intel_vbt_decode output, updated the data from current
  kernel. (Jani Nikula)

- intel_reg can now read/write registers using a given engine.
  (Mika Kuoppala)

- Aubdump can now simulate enhanced execlist submission, for
  gen11+. (Scott D Phillips)





And many other bug fixes, improvements, cleanups and new tests.

Release 1.21 (2018-01-16)
-------------------------

Library changes:

- Added helpers for using DRM syncobj. (Jason Ekstrand)

- Refactored several i915 helpers into library functions.
  (Michał Winiarski)

- Improved the GPU quiescing code to more thoroughly flush old data
  and pending work. (Chris Wilson)

- Reworked DRM property handling to be more suitable for
  atomic commits. (Maarten Lankhorst)

- Removed support for legacy CRC API. The generic API has been
  available since kernel 4.10. (Maarten Lankhorst)

- Opening a DRM device now automatically loads its module. (Chris Wilson)

- Imported the drm-uapi headers as copies instead of using what's
  installed in the system. (Eric Anholt)

- Moved the perf code to its own library from
  intel-gpu-overlay. (Tvrtko Ursulin)

- Removed Android support due to lack of use and
  maintenance. (Arkadiusz Hiler)

- Upgraded meson to official production status, automake is still kept
  around for now.

Tools changes:

- Improved the output of intel_vbt_decode. (Jani Nikula)

- intel_error_decode now prints user buffers if they contain debug
  logs. (Chris Wilson)

- Improved the output of intel_watermark. (Ville Syrjälä,
  Dhinakaran Pandiyan)

- Aubdump can now simulate execlist submission, converting from ring
  buffer submission method. (Scott D Phillips)

- intel-gpu-overlay can now show data from perf PMU. (Tvrtko Ursulin,
  Chris Wilson)

- intel-gpu-overlay now parses tracepoint locations from
  sysfs. (Lionel Landwerlin)

Documentation changes:

- Documentation can now be built with Meson. (Daniel Vetter)


And many other bug fixes, improvements, cleanups and new tests.

Release 1.20 (2017-10-03)
-------------------------

Library changes:

- Added helpers for launching external processes and capturing their
  outputs. (Abdiel Janulgue)

- Increased max pipe count to 6 to support AMD GPUs. (Leo (Sunpeng) Li)

- Various improvements for Chamelium support. (Paul Kocialkowski)

- Added Coffeelake platform support. (Rodrigo Vivi, Anusha Srivatsa)

- Added Cannonlake platform support. (Rodrigo Vivi)

- Added support for audio testing. (Paul Kocialkowski)

- Added preliminary meson build system support. (Daniel Vetter, et al)
  -- Autotools remains the supported build system for now.

Tools changes:

- Refactored video bios data to use definitions copied from the
  kernel. (Jani Nikula)

Documentation changes:

- Added user and developer documentation about Chamelium support to
  aid deploying the platform. (Paul Kocialkowski)

- Added documentation about the required hardware setup for audio
  testing. (Paul Kocialkowski)

Tests changes:

- Converted remaining shell-script tests to C code (Abdiel Janulgue)

- Multiple new tests.


And many other bug fixes and improvements.

Release 1.19 (2017-06-09)
-------------------------

Library changes:

- Changed debugfs handlers to open files for the DRM device in use,
  for setups with more than one DRM device. (Tomeu Vizoso)

- Added support for 4K and audio HDMI EDID injection. (Abdiel
  Janulgue, Marius Vlad)

- Added support for AMDGPU devices. (Chris Wilson)

Tools changes:

- intel_error_decode now automatically opens a pager. (Chris Wilson)

- intel_error_decode now dumps the GuC firmware logs if available.
  (Chris Wilson)

Benchmark changes:

- gem_wsim: New benchmark that simulates command submission
  workloads. (Tvrtko Ursulin)

Scripts changes:

- trace.pl: New tool to parse i915 tracepoints for performance
  analysis. (Tvrtko Ursulin)

- media-bench.pl: New tool to programmatically analyze simulated media
  workloads using gem_wsim to find the optimal load balancing
  strategy. (Tvrtko Ursulin)

Test changes:

- Imported amdgpu tests from libdrm. (Chris Wilson)

- Multiple other new tests.


And many other bug fixes and improvements.

Release 1.18 (2017-03-13)
-------------------------

Library changes:

- Various changes to library functions so that they don't assume Intel
  hardware. (Lyude)

- Added helper functions for managing synchronization primitives.
  (Robert Foss)

- Added support for the new generic CRC capture kernel ABI. (Tomeu
  Vizoso)

- Added Geminilake platform support. (Ander Conselvan de Oliveira)

- Added helpers for sysfs hotplug events. (Lyude)

- Added support for hotplug testing with the Chamelium device (Lyude)

Tools changes:

- intel_dp_compliance: New tool for running automated DisplayPort
  compliance tests. (Manasi Navare)

- Renamed intel_bios_reader to intel_vbt_decode. (Jani Nikula)

- intel_gvtg_test: New tool for setting up GVT-g guests based on
  KVMGT. (Terrence Xu)

Test changes:

- Multiple new tests.


And many other bug fixes and improvements.

Release 1.17 (2016-12-02)
-------------------------

Library changes:

- Added an iterator that generate primes for creating input data that
  should not fall into any patterns that may be optimised by the
  drivers. (Chris Wilson)

- Crashes in fixture blocks now print a stacktrace. (Marius Vlad)

- Added support for various system suspend/resume options. (Imre Deak)

- Added linked list helpers from the Wayland project. (Lyude)

- Added a generic dummy workload helper for submitting GPU workloads
  that consume exactly a specified amount of time. (Abdiel Janulgue)

- Added C functions for driver loading/unloading, pkill and lsof, for
  converting shell script tests to C code. (Marius Vlad)

Tools changes:

- intel_reg: Add Kabylake support. (Jani Nikula)

- intel_bios_reader: Also dump PSR info. (Ville Syrjälä)

- intel_guc_logger: New tool for capturing logs from the GuC
  firmware. (Akash Goel)

- intel_aubdump: Added commandline option to stream the dump to
  another process. (Lionel Landwerlin)

- intel_aubdump: Annotate the dump with the application name and the
  used PCI ID. (Jason Ekstrand)

Benchmark changes:

- gem_latency: Added support for measuring fence wakeup latencies. (Chris Wilson)

- prime_lookup: New microbenchmark for stressing prime_fd_to_handle
  and prime_handle_to_fd. (Chris Wilson)

Test changes:

- Multiple new tests.

- Added an explicit list of tests used for Intel CI. (Petri Latvala)

- Converted multiple shell script tests to C. (Marius Vlad)


And many other bug fixes and improvements.

Release 1.16 (2016-09-02)
-------------------------

- Build automatically tests required when issueing a make check, Tests/subtests
that receive a crash signal should print a backtrace when i-g-t is built with
libunwind support (Marius Vlad)

- lib/igt_kms: Force connector probing on first use (Chris Wilson)

- vc4: Add a test for BO lookup failure error path (Eric Anholt)

- tests/gem_mocs_settings: Remove direct register tests,
and added RC6 tests (Peter Antoine)

- Check for libdrm_intel and build if present, Add stubs for intel_bufmgr
(Robert Foss)

- igt/gem_mmap_gtt: Add a test to detect non-WC access (Chris Wilson)

- Various documentation improvements (Daniel Vetter)

- Added new tests: tests/kms_rmfb and tests/kms_atomic_transition, a test for
fastboot, tests/kms_panel_fitting, and a test that only tries to set the
current property values back, tests/kms_properties. Various improvements to
tests/kms_cursor_legacy (Maarten Lankhorst)

- lib/igt_kms: Use pipes for committing, not outputs and assign pipe properties
in pipe init and many other improvements (Maarten Lankhorst)

- tests/gem_workarounds: read test added as a basic test, fix assertion of num
of regs (Mika Kuoppala)

- Various improvements to tools/intel_bios_reader and tools/intel_reg (Ville
Syrjälä)

- lib: Add x86 cpuid based feature detection (Chris Wilson)

- demos/intel_sprite_on: Instead of looping until the first disconnected port
is found, now go through all possible connectors, drawing the sprite on any
connected display. (Jim Bride)

- Multiple improvements to lib/igt_kms (Robert Foss)

- lib/igt_aux: Framework for measuring latency in raising signals (Chris
Wilson)

- Various modifications to intel_chipset: Replace lookup of GT size with
computation, remove unused PCI_CHIP ids, converting platforms names using
device info (Chris Wilson)

- tests/kms_chv_cursor_fail: Run the tests with fewer steps
(Maarten Lankhorst)

- lib/intel_chipset: Add more Kabylake PCI IDs and removed PCI IDs that are no
longer listed as Kabylake (Rodrigo Vivi)

- Basic framework for GVT-g testing has landed (Chris Wilson)

- Various improvements to tests/kms_flip (Ville Syrjälä)

- igt/kms_cursor_legacy: Add a rudimentary test to detect stalled cursors,
detect pageflip errors and check that cursor updates do not stall flips
(Chris Wilson)

- vGEM support: lib and added tests/vgem_basic, tests/vgem_slow and
tests/vgem_reload_basic (Chris Wilson)

- Various fixes to tests/kms_frontbuffer_tracking: prefer BLT drawing, recreate
FBS at every subtest and properly handle mixing GTT and WC mmaps (Paulo Zanoni)

- Replace drv_missed_irq_hang script with a C-equivalent: tests/drv_missed_irq
(Chris Wilson)

- Added a test case for polling dma-buf fences: tests/prime_busy (Chris Wilson)

- lib/igt_gt: Omit illegal instruction on gen8+ and time
constrains on hang detection (igt/gem_reset_stats) (Mika Kuoppala)

- Added tests/kms_invalid_dotclock, a test that makes sure every modeset gets
rejected by the kernel if the requested dotclock is beyond the hardware
capabilities (Ville Syrjälä)

- tests/gem_stolen: Verify contents of stolen-backed objects across
hibernation, fix for no_mmap subtest and check for available stolen memory size
(Ankitprasad Sharma)

- tests/core_prop_blob: Add invalid tests to set fb props (Daniel Vetter)

- Many more fixes and improvements.

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
