A fork of Quickshell that adds DMABufSurface: a QML item that shows a buffer rendered by another process, imported straight from the GPU with no copies. It was built to show WayVes visualisers inside wayves-shell, but it works with anything that sends DMA-BUFs over the same socket protocol.
import Quickshell.Wayland
DMABufSurface {
anchors.fill: parent
socketPath: "/tmp/WayVes/ncs.sock"
fps: 60
visibilityChangeCommand: "WayVes -c ncs -v {{v}}"
geometryChangeCommand: "WayVes -c ncs -w {{w}} -h {{h}}"
}Documentation: DMABUF.md covers the properties, the socket protocol, frame pacing and the known limitations.
DMABufSurface(src/wayland/dmabuf_surface/dmabufsurface.*): imports the buffer into aQQuickRhiItemand redraws at its ownfps, not at the display's refresh rate.DMABufManagerandDMABufRegistry(dmabufmanager.*,dmabufregistry.*): one connection per socket path, shared by every surface that shows it.FPSAllocatorandFpsLoop(fpsallocator.*,fpsloop.*): one ticker thread per frame rate, shared by every surface running at it.- A layer-shell fix: with
QT_SCALE_FACTORbelow 1,ExclusionMode.Ignoresurfaces no longer leave a gap under other panels' exclusive zones.
Same as upstream; see BUILD.md. The DMA-BUF code also needs EGL with EGL_EXT_image_dma_buf_import.
cmake -GNinja -B build -DCMAKE_BUILD_TYPE=RelWithDebInfo
ninja -C buildSee the website for more information and installation instructions.
This repo is hosted at:
- HACKING.md - Development instructions and policy.
- CONTRIBUTING.md - Contribution policy.
- BUILD.md - Packaging and build instructions.
Unless you explicitly state otherwise, any contribution submitted for inclusion shall be licensed as above, without any additional terms or conditions.