Introduce wlr_shm

This is a re-implementation of wl_shm. The motivations for using
this over the one shipped in libwayland are:

- Properly handle SIGBUS when accessing a wl_buffer's underlying
  data after the wl_buffer protocol object has been destroyed.
  With the current code, we just crash if the client does that
  and then shrinks the backing file.
- No need to fight the wl_shm_buffer API anymore. This was awkward
  because we weren't notified when clients created a wl_shm buffer,
  and this doesn't play well with our wlr_buffer abstraction.
- Access to the underlying FD. This makes it possible to forward
  the wl_shm buffer to a parent compositor with the Wayland/X11
  backends.
- Better stride checks. We can use our format table to ensure that
  the stride is consistent with the bpp and width.
This commit is contained in:
Simon Ser 2022-09-17 14:38:44 +02:00 committed by Simon Zeni
parent 6e88eeadeb
commit 0ae3c7b1a2
3 changed files with 580 additions and 0 deletions

View file

@ -0,0 +1,31 @@
/*
* This an unstable interface of wlroots. No guarantees are made regarding the
* future consistency of this API.
*/
#ifndef WLR_USE_UNSTABLE
#error "Add -DWLR_USE_UNSTABLE to enable unstable wlroots features"
#endif
#ifndef WLR_TYPES_WLR_SHM_H
#define WLR_TYPES_WLR_SHM_H
#include <wayland-server-core.h>
/**
* Shared memory buffer interface.
*
* The buffers created via this interface are not safe to use from different
* threads.
*
* Currently, accessing two buffers concurrently via
* wlr_buffer_begin_data_ptr_access() will return an error.
*/
struct wlr_shm;
/**
* Create the wl_shm global.
*/
struct wlr_shm *wlr_shm_create_with_renderer(struct wl_display *display,
uint32_t version, struct wlr_renderer *renderer);
#endif