Set DRM_CLIENT_CAP_UNIVERSAL_PLANES before calling plane_handles() to
ensure all planes (primary, overlay, cursor) are visible for format
detection. This fixes cases where plane enumeration returns empty
results due to missing client capabilities.
Signed-off-by: minicx <minicx@disroot.org>
Instead of failing when no plane formats are detected, fall back to
XRGB8888 which is widely supported. This prevents crashes on systems
where plane enumeration fails while still allowing the display to
function with a common pixel format.
Signed-off-by: minicx <minicx@disroot.org>
We used to just map 32-bpp to XRGB before commit 6f3cd8763b and that was also fine. We don't really support transparency right now, but we should keep rendering.
Fixes#9126
Hidden behind the unstable-input-09 feature, the BackendSelector now exposes with_input_090_event_hook, which takes a callback that's invoked for every event received from libinput.
Implement support for Linux framebuffers that have line padding by properly
handling the line_length field from fb_fix_screeninfo. This allows the backend
to work with displays that use non-linear memory organization where each row
has padding bytes at the end.
Signed-off-by: minicx <minicx@disroot.org>
Previously the code only explicitly supported XRGB8888 and RGB565 formats,
but the format is already negotiated through negotiate_format() which ensures
compatibility between renderer and fbdev capabilities. The callback should
work with any successfully negotiated format.
Signed-off-by: minicx <minicx@disroot.org>
- Added support for a wide range of 32-bit, 30-bit, 24-bit, 16-bit, and 8-bit RGB formats.
- Included detection for packed and planar YUV and NV formats.
Signed-off-by: minicx <minicx@disroot.org>
- Implemented dynamic detection of supported framebuffer formats using a new `DrmOutput::get_supported_formats()` method, which queries DRM planes for their format capabilities instead of relying on a hardcoded list.
- Updated the DumbBuffer allocation logic to require explicit format, depth, and bpp, and moved the depth/bpp lookup to a reusable `pixel_format_params` helper function.
- Removed obsolete format-guessing allocation routine and streamlined buffer creation logic.
Signed-off-by: minicx <minicx@disroot.org>
Removed the mapping of drm::buffer::DrmFourcc::Abgr8888 to skia_safe::ColorType::RGBA8888 to prevent incorrect color channel swapping (red/blue) in output. Now unsupported formats correctly produce an error.
Signed-off-by: minicx <minicx@disroot.org>
Correct the logic for detecting 32-bit framebuffer pixel formats by properly
matching RGB bit field offsets to DRM fourcc codes. The previous implementation
incorrectly mapped BGRX layouts to BGRA/RGBA formats and didn't properly check
alpha channel positioning.
Signed-off-by: minicx <minicx@disroot.org>
Replace the stateful FormatNegotiation struct with a simple negotiate_format()
function that takes renderer and display format slices as parameters. This
eliminates mutable state, unnecessary vector copying, and makes the negotiation
logic more testable and efficient.
Signed-off-by: minicx <minicx@disroot.org>
Introduces initial support for surface format negotiation between the Linux KMS display backends (dumbbuffer, linuxfb) and the software renderers (Skia and Software). The negotiation logic prioritizes selecting a pixel format that is supported by both the renderer and the framebuffer, based on lists of supported DrmFourcc formats.
Signed-off-by: minicx <minicx@disroot.org>
The aarch32 build produced errors like these:
135 | if unsafe { nix::libc::ioctl(ctl_fd, VT_GETSTATE, &mut state) } < 0 {
| ---------------- ^^^^^^^^^^^ expected `u32`, found `u64`
| |
| arguments to this function are incorrect
Use the nix macros to declare wrapper functions for the ioctls used, to mask that away.
Replace ios specific cfgs with "apple but not macOS", dubbed
ios_and_friends, so that we also cover iPadOS, etc.. What those have in
common is that they don't have user-resizable windows. (We might want to
add visionOs in the future)
Also, simplify a few macos or ios cfgs with just target_vendor =
"apple", for what applies to all the operating systems.
The main visible external change is that FemtoVGRenderer is now a generic type, but in the public Slint API the type alias that uses the OpenGL backend is re-exported under the old name. This looks a little different in rustdoc
but appears to be source compatible.
Commit cd6f2e2 reformated the .toml, but the 80 char width column is
judged too small to be practical
Add a .taplo.toml file
Also do not split feature array
... using taplo with default settings
I tried this with 4 spaces indentation, but the patch is almost as
big as this one, so I went with default settings instead as that
is just easier:-)
We always offer the Skia software renderer fallback in
`new_try_vulkan_then_opengl_then_software`, so make sure that the drm
and mmemap dependencies are activated, needed to compile swdisplay.rs.
With the drm output now waiting for the page flip on render *and* gbm and dumb buffer displays supporting triple buffering,
we don't need the entire async page flip handling logic anymore.
In the future we could turn wait_for_page_flip() into an async fn.