[cairo] [PATCH 20/72] drm: inline helper for cairo_format_t -> fourcc conversion

Enrico Weigelt, metux IT consult enrico.weigelt at gr13.net
Tue Dec 29 01:16:58 PST 2015


Signed-off-by: Enrico Weigelt, metux IT consult <enrico.weigelt at gr13.net>
---
 src/drm/cairo-drm-private.h | 46 +++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 44 insertions(+), 2 deletions(-)

diff --git a/src/drm/cairo-drm-private.h b/src/drm/cairo-drm-private.h
index 2c621a0..4ba8f5b 100644
--- a/src/drm/cairo-drm-private.h
+++ b/src/drm/cairo-drm-private.h
@@ -36,14 +36,16 @@
 #ifndef CAIRO_DRM_PRIVATE_H
 #define CAIRO_DRM_PRIVATE_H
 
+#include <sys/types.h> /* dev_t */
+#include <libdrm/drm.h>
+#include <libdrm/drm_fourcc.h>
+
 #include "cairo-drm.h"
 
 #include "cairo-device-private.h"
 #include "cairo-reference-count-private.h"
 #include "cairo-surface-private.h"
 
-#include <sys/types.h> /* dev_t */
-
 typedef struct _cairo_drm_device cairo_drm_device_t;
 
 typedef cairo_drm_device_t *
@@ -157,6 +159,46 @@ cairo_drm_bo_destroy (cairo_device_t *abstract_device,
     }
 }
 
+static inline uint32_t _cairo_drm_format_fourcc(const cairo_format_t format)
+{
+    switch (format)
+    {
+	case CAIRO_FORMAT_ARGB32:	return DRM_FORMAT_ARGB8888;
+	case CAIRO_FORMAT_RGB24:	return DRM_FORMAT_RGB888;
+	case CAIRO_FORMAT_RGB16_565:	return DRM_FORMAT_RGB565;
+	case CAIRO_FORMAT_RGB30:	return DRM_FORMAT_ARGB2101010;
+
+	/* hmm, not actually supported by DRM */
+	case CAIRO_FORMAT_A8:		return fourcc_code ('A', '8', 0, 0);
+	case CAIRO_FORMAT_A1:		return fourcc_code ('A', '1', 0, 0);
+
+	/* invalid format */
+	case CAIRO_FORMAT_INVALID:	return fourcc_code (0, 0, 0, 0);
+    }
+
+    return fourcc_code (0, 0, 0, 0);
+}
+
+static inline uint32_t _cairo_drm_format_bpp(const cairo_format_t format)
+{
+    switch (format)
+    {
+	case CAIRO_FORMAT_ARGB32:	return 32;
+	case CAIRO_FORMAT_RGB24:	return 24;
+	case CAIRO_FORMAT_RGB16_565:	return 16;
+	case CAIRO_FORMAT_RGB30:	return 32;
+
+	/* hmm, not actually supported by DRM */
+	case CAIRO_FORMAT_A8:		return 8;
+	case CAIRO_FORMAT_A1:		return 1;
+
+	/* invalid format */
+	case CAIRO_FORMAT_INVALID:	return 0;
+    }
+
+    return fourcc_code (0, 0, 0, 0);
+}
+
 cairo_private cairo_status_t
 _cairo_drm_bo_open_for_name (const cairo_drm_device_t *dev,
 			     cairo_drm_bo_t *bo,
-- 
2.6.4.442.g545299f



More information about the cairo mailing list