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
