aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
+ }
+}