summaryrefslogtreecommitdiff
path: root/render
diff options
context:
space:
mode:
authorShinyzenith <[email protected]>2023-07-11 18:07:26 +0530
committerShinyzenith <[email protected]>2023-07-11 18:10:10 +0530
commit2388e30bd5ef01ab67d6be769743da3e830f59c4 (patch)
treeeeb9685137d95e888a6b98785109b9f3d9129a59 /render
parent9eaa07a4b141bc80a46cb7ab2dc94048f126fa8c (diff)
libscenefx and tinywl compilation success
Signed-off-by: Shinyzenith <[email protected]>
Diffstat (limited to 'render')
-rw-r--r--render/meson.build3
-rw-r--r--render/pixel_format.c178
2 files changed, 181 insertions, 0 deletions
diff --git a/render/meson.build b/render/meson.build
new file mode 100644
index 0000000..7916da6
--- /dev/null
+++ b/render/meson.build
@@ -0,0 +1,3 @@
+wlr_files += files(
+ 'pixel_format.c',
+)
diff --git a/render/pixel_format.c b/render/pixel_format.c
new file mode 100644
index 0000000..46bcecf
--- /dev/null
+++ b/render/pixel_format.c
@@ -0,0 +1,178 @@
+#include "render/pixel_format.h"
+#include <drm_fourcc.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,
+ },
+ {
+ .drm_format = DRM_FORMAT_XBGR8888,
+ .opaque_substitute = DRM_FORMAT_INVALID,
+ .bpp = 32,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_ABGR8888,
+ .opaque_substitute = DRM_FORMAT_XBGR8888,
+ .bpp = 32,
+ .has_alpha = true,
+ },
+ {
+ .drm_format = DRM_FORMAT_RGBX8888,
+ .opaque_substitute = DRM_FORMAT_INVALID,
+ .bpp = 32,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_RGBA8888,
+ .opaque_substitute = DRM_FORMAT_RGBX8888,
+ .bpp = 32,
+ .has_alpha = true,
+ },
+ {
+ .drm_format = DRM_FORMAT_BGRX8888,
+ .opaque_substitute = DRM_FORMAT_INVALID,
+ .bpp = 32,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_BGRA8888,
+ .opaque_substitute = DRM_FORMAT_BGRX8888,
+ .bpp = 32,
+ .has_alpha = true,
+ },
+ {
+ .drm_format = DRM_FORMAT_BGR888,
+ .opaque_substitute = DRM_FORMAT_INVALID,
+ .bpp = 24,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_RGBX4444,
+ .opaque_substitute = DRM_FORMAT_INVALID,
+ .bpp = 16,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_RGBA4444,
+ .opaque_substitute = DRM_FORMAT_RGBX4444,
+ .bpp = 16,
+ .has_alpha = true,
+ },
+ {
+ .drm_format = DRM_FORMAT_RGBX5551,
+ .opaque_substitute = DRM_FORMAT_INVALID,
+ .bpp = 16,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_RGBA5551,
+ .opaque_substitute = DRM_FORMAT_RGBX5551,
+ .bpp = 16,
+ .has_alpha = true,
+ },
+ {
+ .drm_format = DRM_FORMAT_RGB565,
+ .opaque_substitute = DRM_FORMAT_INVALID,
+ .bpp = 16,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_BGR565,
+ .opaque_substitute = DRM_FORMAT_INVALID,
+ .bpp = 16,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_XRGB2101010,
+ .opaque_substitute = DRM_FORMAT_INVALID,
+ .bpp = 32,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_ARGB2101010,
+ .opaque_substitute = DRM_FORMAT_XRGB2101010,
+ .bpp = 32,
+ .has_alpha = true,
+ },
+ {
+ .drm_format = DRM_FORMAT_XBGR2101010,
+ .opaque_substitute = DRM_FORMAT_INVALID,
+ .bpp = 32,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_ABGR2101010,
+ .opaque_substitute = DRM_FORMAT_XBGR2101010,
+ .bpp = 32,
+ .has_alpha = true,
+ },
+ {
+ .drm_format = DRM_FORMAT_XBGR16161616F,
+ .opaque_substitute = DRM_FORMAT_INVALID,
+ .bpp = 64,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_ABGR16161616F,
+ .opaque_substitute = DRM_FORMAT_XBGR16161616F,
+ .bpp = 64,
+ .has_alpha = true,
+ },
+ {
+ .drm_format = DRM_FORMAT_XBGR16161616,
+ .opaque_substitute = DRM_FORMAT_INVALID,
+ .bpp = 64,
+ .has_alpha = false,
+ },
+ {
+ .drm_format = DRM_FORMAT_ABGR16161616,
+ .opaque_substitute = DRM_FORMAT_XBGR16161616,
+ .bpp = 64,
+ .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;
+}
+
+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;
+ }
+}