aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Ser <contact@emersion.fr>2021-02-16 19:01:33 +0100
committerSimon Ser <contact@emersion.fr>2021-02-23 16:09:26 +0100
commit5d6d76c61fa6403260eacb10f0b99ff2ab919b3a (patch)
tree0a68405f7bd34819e3c1c7956b78621c31bd1d80
parentbfd020047dbe3d3f1a3734d4fe48f04847a46603 (diff)
render/shm_format: add wl_shm_format conversion helpers
-rw-r--r--include/render/shm_format.h9
-rw-r--r--render/meson.build1
-rw-r--r--render/shm_format.c24
3 files changed, 34 insertions, 0 deletions
diff --git a/include/render/shm_format.h b/include/render/shm_format.h
new file mode 100644
index 00000000..bf6c8679
--- /dev/null
+++ b/include/render/shm_format.h
@@ -0,0 +1,9 @@
+#ifndef RENDER_SHM_FORMAT_H
+#define RENDER_SHM_FORMAT_H
+
+#include <wayland-server-protocol.h>
+
+uint32_t convert_wl_shm_format_to_drm(enum wl_shm_format fmt);
+enum wl_shm_format convert_drm_format_to_wl_shm(uint32_t fmt);
+
+#endif
diff --git a/render/meson.build b/render/meson.build
index f3e1cd26..644c2e21 100644
--- a/render/meson.build
+++ b/render/meson.build
@@ -4,6 +4,7 @@ wlr_files += files(
'egl.c',
'drm_format_set.c',
'gbm_allocator.c',
+ 'shm_format.c',
'swapchain.c',
'wlr_renderer.c',
'wlr_texture.c',
diff --git a/render/shm_format.c b/render/shm_format.c
new file mode 100644
index 00000000..cb3f7c01
--- /dev/null
+++ b/render/shm_format.c
@@ -0,0 +1,24 @@
+#include <drm_fourcc.h>
+#include "render/shm_format.h"
+
+uint32_t convert_wl_shm_format_to_drm(enum wl_shm_format fmt) {
+ switch (fmt) {
+ case WL_SHM_FORMAT_XRGB8888:
+ return DRM_FORMAT_XRGB8888;
+ case WL_SHM_FORMAT_ARGB8888:
+ return DRM_FORMAT_ARGB8888;
+ default:
+ return (uint32_t)fmt;
+ }
+}
+
+enum wl_shm_format convert_drm_format_to_wl_shm(uint32_t fmt) {
+ switch (fmt) {
+ case DRM_FORMAT_XRGB8888:
+ return WL_SHM_FORMAT_XRGB8888;
+ case DRM_FORMAT_ARGB8888:
+ return WL_SHM_FORMAT_ARGB8888;
+ default:
+ return (enum wl_shm_format)fmt;
+ }
+}