aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2022-09-17 14:38:44 +0200
committerSimon Zeni <simon@bl4ckb0ne.ca>2022-11-15 16:30:00 +0000
commit0ae3c7b1a2d4da0c32092782ff19a1662151d874 (patch)
tree0236d59660434b81332a508478d8f04b519b0825 /include
parent6e88eeadebe5bed0210158124a3c498a8f8a47cb (diff)
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.
Diffstat (limited to 'include')
-rw-r--r--include/wlr/types/wlr_shm.h31
1 files changed, 31 insertions, 0 deletions
diff --git a/include/wlr/types/wlr_shm.h b/include/wlr/types/wlr_shm.h
new file mode 100644
index 00000000..ebf4015e
--- /dev/null
+++ b/include/wlr/types/wlr_shm.h
@@ -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