mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2026-03-21 05:34:00 -04:00
Add extended shared memory attach support
This provides an extended version of ‘create_pool’, called ‘create_pool2’, which allows the client to specify a 64-bit offset in the file to map at. As Wayland does not support 64-bit integers, the offset is passed as two 32-bit numbers. The intended use-case for this extension is when one needs to map a surface from a character special device, but it can also be used with regular files if one needs to map with a nonzero offset. Qubes OS needs the Wayland compositor to map the ‘/dev/xen/gntdev’ character device, which represents memory shared by a different Xen virtual machine. Currently, this can be accomplished by opening a separate instance of ‘/dev/xen/gntdev’ every time, but that is slightly wasteful. Until recently, it also on undocumented behavior in the kernel driver. This also requires libwayland-server to be built with 64-bit off_t, which should be supported on any reasonably modern system. A ‘_Static_assert’ will trip if off_t is not large enough. This also forbids resizing a pool of version 3 or later that is currently in use. On non-Linux systems, supporting pool resize requires holding the file descriptor open, which can lead to file descriptor exhaustion in the compositor. This change allows libwayland-server to close the file descriptor once the pool is first mapped. Signed-off-by: Demi Marie Obenour <demiobenour@gmail.com>
This commit is contained in:
parent
aa2a6d560b
commit
d5cf2f5fc7
4 changed files with 144 additions and 42 deletions
|
|
@ -105,8 +105,10 @@ formats = {}
|
|||
for ident, val in idents.items():
|
||||
formats[drm_format_to_wl(ident)] = val.lower()
|
||||
# Special case for ARGB8888 and XRGB8888
|
||||
formats["argb8888"] = "0"
|
||||
formats["xrgb8888"] = "1"
|
||||
for (i, j) in enumerate(("argb8888", "xrgb8888")):
|
||||
formats[j + "_new"] = formats[j]
|
||||
descriptions[j + "_new"] = descriptions[j]
|
||||
formats[j] = str(i)
|
||||
|
||||
print("Loaded {} formats from drm_fourcc.h".format(len(formats)), file=sys.stderr)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue