[PATCH v8 16/71] drm: inline helper for cairo_format_t -> fourcc conversion
"Enrico Weigelt, metux IT consult" <[email protected]>
| Newsgroups | gmane.comp.lib.cairo |
|---|---|
| Message-ID | <[email protected]> |
Signed-off-by: Enrico Weigelt, metux IT consult <[email protected]> --- 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 -- cairo mailing list [email protected] https://lists.cairographics.org/mailman/listinfo/cairo