aboutsummaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorSimon Zeni <simon@bl4ckb0ne.ca>2021-03-15 12:29:29 -0400
committerSimon Ser <contact@emersion.fr>2021-03-25 10:55:54 +0100
commit5fd82c6f54685e6bdc354b4f639bdfc52539e12f (patch)
tree8c16e1fa4068e9768900254aea7fb7381054fd1f /render
parentd9cae04ffc3140408f2604eeff7d4776fe8d9548 (diff)
render/pixel_format: introduce pixel format info table
Diffstat (limited to 'render')
-rw-r--r--render/meson.build1
-rw-r--r--render/pixel_format.c30
2 files changed, 31 insertions, 0 deletions
diff --git a/render/meson.build b/render/meson.build
index 644c2e21..0b75c5e1 100644
--- a/render/meson.build
+++ b/render/meson.build
@@ -5,6 +5,7 @@ wlr_files += files(
'drm_format_set.c',
'gbm_allocator.c',
'shm_format.c',
+ 'pixel_format.c',
'swapchain.c',
'wlr_renderer.c',
'wlr_texture.c',
diff --git a/render/pixel_format.c b/render/pixel_format.c
new file mode 100644
index 00000000..4c4df3bc
--- /dev/null
+++ b/render/pixel_format.c
@@ -0,0 +1,30 @@
+#include <drm_fourcc.h>
+#include "render/pixel_format.h"
+
+static const struct wlr_pixel_format_info pixel_format_info[] = {
+ {
+ .drm_format = DRM_FORMAT_XRGB8888,
+ .opaque_substitute = DRM_FORMAT_INVALID,
+ .bpp = 32,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_ARGB8888,
+ .opaque_substitute = DRM_FORMAT_XRGB8888,
+ .bpp = 32,
+ .has_alpha = true,
+ }
+};
+
+static const size_t pixel_format_info_size =
+ sizeof(pixel_format_info) / sizeof(pixel_format_info[0]);
+
+const struct wlr_pixel_format_info *drm_get_pixel_format_info(uint32_t fmt) {
+ for (size_t i = 0; i < pixel_format_info_size; ++i) {
+ if (pixel_format_info[i].drm_format == fmt) {
+ return &pixel_format_info[i];
+ }
+ }
+
+ return NULL;
+}