[Intel-gfx] [PATCH i-g-t 0/9] igt_kms refactoring and universal plane support

Matt Roper matthew.d.roper at intel.com
Tue Jul 1 01:44:21 CEST 2014


This patch set refactors the igt_kms library a bit to allow display state
changes to be commited via different API's (with different "commit styles") and
adds a new "universal" commit style that makes use of the universal plane API.

Some of the patches here were previously posted here:
        http://lists.freedesktop.org/archives/intel-gfx/2014-May/046276.html

Some of the key changes or additions from the previous patch series:
 * igt_pipe no longer tracks the need to issue various ioctls upon commit.
   Instead we simply use the *_changed flags to indicate what has changed and
   make our own decisions about what ioctls to call at commit time.  This will
   be important because some programming decisions (e.g., whether to wait for a
   vblank after updating a sprite) will differ between various commit styles
   (i.e., legacy vs universal plane vs atomic).
 * The igt_display_use_universal_commits() function from the previous series is
   gone; it was too easy to make mistakes when writing tests that switch back
   and forth between API's and was somewhat difficult to follow the logic of
   those tests.  Instead, we add a new commit function, igt_display_commit2()
   that takes an explicit "commit style" parameter indicating which type of
   API's should be used to perform the operation.  Tests that are trying to
   exercise a specific API, or the interleaving of multiple API's should use
   this commit function.  Other tests that simply want to get the hardware into
   a specific state, but don't care how to get there may continue to use
   igt_display_commit(), which will pick a default commit style ("legacy" style
   today, possibly configurable via an environment variable in the future?)
 * igt_kms's internal plane list maintains the primary, overlays, cursor order
   as it has in the past, even if the universal plane API's return the planes
   in a different order.
 * A few minor fixes to kms_cursor_crc

The expectation is that although we only have 'legacy' and 'universal' commit
styles today, we'll also be adding 'atomic' in the near future and most of the
infrastructure changes here should work well for that as well.

One remaining shortcoming of the igt_kms library is that crtc enable/disable is
implicitly built into legacy commit style and doesn't have any direct API for
tests to use yet.  I.e.,

        igt_plane_set_fb(primary, NULL);
        igt_display_commit2(display, COMMIT_LEGACY);

will disable the CRTC (due to there being no distinction between primary planes
and crtc's in the legacy KMS API), whereas

        igt_plane_set_fb(primary, NULL);
        igt_display_commit2(display, COMMIT_UNIVERSAL);

would leave the CRTC enabled (assuming it was already active) and just disable
the primary plane.

A future patch set will need to address this by making CRTC enable/disable an
explicit API distinct from plane fb updates.


Matt Roper (9):
  lib/kms: Drop igt_pipe->need_set_{crtc,cursor}
  lib/kms: Track need for vblank wait locally
  lib/kms: Add igt_display_commit2()
  lib/kms: Add igt_display_try_commit2()
  lib/kms: Add universal plane support (v2)
  lib/kms: Drop primary plane windowing test from
    igt_plane_set_position()
  tests/kms_universal_plane: Universal plane testing (v6)
  tests/kms_cursor_crc: Combine data_t and test_data_t
  tests/kms_cursor_crc: Call drmModeMoveCursor() directly

 lib/igt_kms.c               | 500 ++++++++++++++++++++++++++------------
 lib/igt_kms.h               |  13 +-
 tests/.gitignore            |   1 +
 tests/Makefile.sources      |   1 +
 tests/kms_cursor_crc.c      | 235 +++++++++---------
 tests/kms_universal_plane.c | 577 ++++++++++++++++++++++++++++++++++++++++++++
 6 files changed, 1051 insertions(+), 276 deletions(-)
 create mode 100644 tests/kms_universal_plane.c

-- 
1.8.5.1




More information about the Intel-gfx mailing list