Skip to content
Tags give the ability to mark specific points in history as being important
  • v0.5.0 Release: 0.5.0
    libliftoff v0.5.0
    This release contains one breaking change: liftoff_output_apply() now takes an
    additional options parameter. Callers can pass NULL to use defaults.
    Leo Li (5):
          Mark layers clean, even when allocation is reused
          Introduce liftoff_list_swap
          Keep output layers ordered by allocation priority
          Consider intersections when deciding reallocation
          test: Add intersection tests
    Sergei Trofimovich (1):
          layer.c: fix build against upcoming `gcc-14` (`-Werror=calloc-transposed-args`)
    Simon Ser (21):
          build: bump to 0.5.0-dev
          plane: add NULL check to liftoff_plane_destroy()
          Fix -Wsign-conversion on 32-bit
          ci: drop unnecessary gcovr.cfg lines
          Switch to "meson setup"
          Add a deadline for liftoff_output_apply()
          ci: halt on UBSan errors
          ci: use alpine/latest instead of alpine/edge
          Drop outdated TODO about format list in struct liftoff_plane
          Use initializers instead of memset()
          Use [0] to get element size when allocating arrays
          test: add prop@fb-damage-clips
          Print CRTC ID instead of liftoff_output pointer address in logs
          Fix debug message visibility
          test: add silent mode to libdrm_mock
          Add option to set timeout for liftoff_output_apply()
          Fix integer overflow when setting timeout_ns to INT64_MAX
          test/bench: disable timeout
          Bail out based on remaining compatible planes
          Introduce core properties
          build: bump version to 0.5.0
  • v0.4.1 Release: 0.4.1
    libliftoff v0.4.1
    Simon Ser (3):
          plane: add NULL check to liftoff_plane_destroy()
          Fix -Wsign-conversion on 32-bit
          build: bump version to 0.4.1
  • v0.4.0 Release: 0.4.0
    libliftoff v0.4.0
    Simon Ser (34):
          build: bump version to 0.4.0-dev
          Switch to kernel-doc style references in comments
          readme: indicate which compositors use the library
          readme: disambiguate short description a bit
          build: override Meson dependency
          build: remove unnecessary version param in pkgconfig.generate()
          build: set pkg-config URL
          test/libdrm_mock: add helpers to convert from/to object index
          test/libdrm_mock: implement drmModeGetFB2()
          test/libdrm_mock: implement drmCloseBufferHandle() stub
          Stop re-using a previous configuration when FB attributes change
          test: add dynamic@change-fb-modifier
          Add API to query candidate planes
          test/libdrm_mock: add liftoff_mock_plane_get_id()
          test: add basic test for candidate planes
          test/libdrm_mock: take initial prop value as separate arg
          test/libdrm_mock: add stub blob functions
          alloc: check FB format and modifier
          test: add liftoff_mock_plane_add_in_formats()
          test: add IN_FORMATS test
          plane: store drmModePropertyRes
          plane: check IMMUTABLE flag in plane_set_prop()
          plane: check value for range/enum/bitmask properties
          test/prop: simplify by introducing commit() function
          test/prop: add range/enum/bitmask tests
          Add missing braces for code style
          Fix disabled layers forcing realloc
          Log reason why a previous allocation is not re-used
          editorconfig: increase max line length to 100
          Turn on -Wdeclaration-after-statement
          Add gcovr.cfg
          Turn on -Wfloat-conversion
          Turn on -Wsign-conversion
          build: bump version to 0.4.0
  • v0.3.0 Release: 0.3.0
    libliftoff v0.3.0
    Simon Ser (11):
          build: bump version to 0.3.0
          build: bump version to 0.3.0-dev
          build: fix library version
          ci: build with ASan
          ci: enable meson --fatal-meson-warnings
          ci: turn off tar verbosity when compressing coverage report
          plane: ignore SCALING_FILTER when set to Default
          plane: ignore FB_DAMAGE_CLIPS if plane is missing prop
          plane: ignore pixel blend mode when set to Pre-multiplied
          Introduce liftoff_layer_unset_property()
          build: bump to version 0.3.0
    Stephan Lachnit (2):
          test: add includes to partial drm dependency
          build: set c_std to c11
  • v0.2.0 Release: 0.2.0
    libliftoff v0.2.0
    This is the second libliftoff release. Major changes:
    - All functions which can fail now return zero on success, and a negative error
      number on failure. This allows callers to get more information about failures.
    - liftoff_output_needs_composition and liftoff_layer_needs_composition have been
    - libliftoff has migrated to
    Full commit history below.
    Simon Ser (41):
          Make liftoff_output_apply return an int
          Make liftoff_device_register_all_planes return an int
          Stop including stdbool.h from libliftoff.h
          Make liftoff_layer_set_property return negative errno
          build: bump version to 0.2.0
          Add needs_composition APIs
          Improve prop value pretty-printing in output_log_layers
          Make fp16_to_double static
          Log when no layer has been a plane
          Log number of candidate planes
          test: make sure NDEBUG is not defined
          Log number of layers in output_log_layers
          Log when a test-only commit fails
          Print alloc debug logs as a tree
          Zero-initialize alloc_step and alloc_result
          Improve alloc debug logging
          test: introduce liftoff_mock_require_primary_plane
          Document why the primary plane is a special case
          build: turn on additional warnings
          Add newline after function return type
          Remove test/include/
          Log number of atomic test-only commits
          test/test_prop: add unmatched test case
          Make plane_get_property static
          ENOSPC is not fatal for test-only commits
          Migrate to
          ci: drop py3-setuptools from Alpine packages
          ci: add .gitlab-ci.yml
          Check layers zpos over the primary plane
          test/alloc: add zpos-2x-reverse
          test/alloc: add zpos-2x-fail
          test/alloc: make test data const
          test/alloc: check test_layer.compat length
          test/alloc: replace test_layer.zpos with test_prop
          test/alloc: pass full test_case to run_test
          test/alloc: drop test_needs_composition logic
          test/alloc: move zero-fb-id-fail to test data
          test/alloc: rename composition-zero-fb-id to composition-no-props
          Ignore invisible layers in layer_intersects
          test/alloc: add zpos-3x-zero-fb-id
          test/alloc: add zpos-3x-zero-alpha
  • v0.1.0 Release: 0.1.0
    libliftoff v0.1.0
    This is the first release of libliftoff.
    libliftoff is still an experimental library, no guarantees are made
    regarding the stability of its API.
    Jan Beich (2):
          test: bump POSIX version for CLOCK_MONOTONIC
          build: ignore warnings in libdrm headers
    Matt Hoosier (1):
          example: improve CRTC search algorithm
    Roman Gilg (7):
          Log re-use only on change
          Log layer priority only on change
          Add log verbosity helper
          Skip layer debug early
          Indent log on property applying and layer assignment
          Respect implicit type on layer props log
          Omit logging inactive layer information
    Simon Ser (162):
          Initial experiments
          Add README
          Add LICENSE
          Add missing static qualifiers
          Disable unused planes
          Reset all mappings in hwc_display_apply
          Don't pick a busy plane in layer_choose_plane
          Add another layer to the example
          Disable all planes before building the mapping
          Better hwc_display_apply error handling
          Add basic docs
          Iterate over layers in example
          Change planes to be a linked list instead of an array
          Basic brute-force plane allocation
          Reset best allocation to NULL
          Check plane is compatible with CRTC
          Guess zpos from plane type
          Add support for reading immutable plane zpos
          List planes by allocation order
          Don't assign layer to plane if missing props
          Extract allocation arguments to a struct
          Fix early bailout when we already have a better allocation
          Add basic support for zpos
          Rename library to liftoff
          Fix segfault when dup fails in liftoff_display_create
          Add test framework
          Use PRIu32 for printing plane IDs
          test: mock atomic commit improvements
          test: add liftoff_mock_drm_get_plane
          test: introduce structured alloc tests
          test: fix atomic commit layer compatibility
          test: add an alloc test with 3 layers
          test: add basic zpos tests
          test: add various zpos tests
          test: make our mock drmModeAtomicReq support more properties
          Make composited layers prevent plane allocation underneath
          test: add alloc@zpos-4x-domino-fail
          test: add alloc@zpos-4x-domino-partial
          Move composited layer on top constraint up
          Document how plane allocation works
          Extract plane_data init logic to function
          test: prevent layers from being assigned to primary plane
          Add layer_intersects
          Add intersection checks for composited layer on top check
          Add intersection check for planes under the current one
          Remove last_plane_zpos from plane allocation state
          ci: add .build.yml
          Fix format string in liftoff_display_apply
          test: add zpos-4x-disjoint-alt
          Add intersection check for layers over the current one
          Rename on_top to over
          Rename plane_alloc and plane_data
          readme: add basic usage
          Move example to its own directory
          Unset CRTC_ID on planes before plane allocation
          example/simple: disable CRTCs we don't use
          example: extract helpers into separate file
          example: refactor dumb FB helper
          example/simple: don't hardcode number of layers, use white background
          example/compositor: new example
          readme: add missing variable decl in example
          example/compositor: add flag to specify number of layers
          Add opaque structs forward declaration in libliftoff.h
          Add logging functions
          readme: add CI badge
          Add liftoff_output_set_composition_layer
          example/compositor: take advantage of the composition layer
          test: add composition tests
          Split plane functions into a separate file
          example/compositor: handle out-of-bounds coords when compositing
          Add TODO about remaining plane counting optimization
          ci: add codecov
          test: refactor build
          test: add liftoff_mock_commit_count
          Extract plane allocation constraints in functions
          example: add a description of each example
          Track layer property changes
          example: add dynamic example
          test: add a dynamic test
          readme: add link to intro blog post
          Introduce display_test_commit
          Introduce liftoff_log_errno
          Move plane allocation algorithm to alloc.c
          Add build-* to .gitignore
          example/multi-output: new example
          test: add a new test for layer priority
          Remove outdated TODO
          log: reset log callback to default when NULL is passed
          test: add benchmark
          test/libdrm_mock: bump resource limitations
          Keep track of the update frequency of each layer
          Rename display to device
          Fixup display → device bulk rename
          Don't re-use previous allocation if a layer has been removed
          Replace liftoff_device_apply with liftoff_output_apply
          Rename display.c to device.c
          test: add empty test
          test: make mock drmModeAtomicAddProperty return cursor
          Unset plane->layer and layer->plane on destroy
          Fix DEBUG logs printed when level is set to ERROR
          Don't re-use prev alloc on composition layer change
          Remove chatty debug log
          Log layer configuration before alloc
          Add a way to force FB composition
          Fix segfault when FB_ID isn't set
          Don't allocate planes for layers without a FB
          test: add a test with a layer without any prop set
          test: add a test with a zero FB_ID
          Allow NULL to be passed to destructors
          Fix format string for plane ID
          test/libdrm_mock: a test-only commit applies properties
          Move device_test_commit to device.c
          Retry atomic commit on EINTR and EAGAIN
          build: install public header file
          readme: add contributing section
          readme: add link to FOSDEM 2020 talk
          Print composition layer in logs
          Replace assert(0) with abort()
          test: add internal mutable prop list
          test: allow to attach props to mock planes
          Add support for the alpha property
          test: add test for alpha prop
          Add support for the rotation property
          test: a test-only commit doesn't apply properties
          test/libdrm_mock: add prefix to logs
          Take disabled layers into account in non_composition_layers_len
          Don't pick a plane for fully transparent layers
          test: add test with fully transparent layer
          ci: add freebsd CI
          Allow caller to pass commit flags
          Remove DRM_MODE_PAGE_FLIP_EVENT from commit flags
          example: fix exit status after failed drmModeAtomicCommit
          test: refactor dynamic test
          Force re-alloc when setting FB to 0
          Replace liftoff_layer_property.changed with prev_value
          Force re-alloc when previous FB_ID was 0
          test: add dynamic unset-fb and set-fb tests
          Don't re-alloc on IN_FENCE_FD change
          Don't re-alloc when alpha changes
          Don't re-alloc when FB_DAMAGE_CLIPS changes
          test: add missing plane alpha prop to prop@ignore-alpha
          test: add test with immutable zpos plane props
          Improve doc comments
          Stop enabling UNIVERSAL_PLANES
          Document that liftoff_device_create takes ownership of the FD
          build: remove libraries keyword arg from pkgconfig.generate
          Rename pkg-config file to "libliftoff"
          Move layer_is_visible to layer.c
          readme: reference the example/ dir
          Split liftoff_log_init into set_handler and set_priority
          ci: drop codecov
          test/alloc: document test_layer and test_setup
          Allow to choose which planes are managed by libliftoff
          Introduce liftoff_plane_get_id
          Replace liftoff_layer_get_plane_id with liftoff_layer_get_plane
          readme: add missing liftoff_device_register_all_planes call
          readme: update short description
          Fixup reference to liftoff_layer_get_plane_id in docs
          doc/compositor: new document
          readme: link to compositor guidelines
          readme: link to the example/ dir
          build: bump version to 0.1.0