[COMMON] g2d: add ABGR2101010 format
authorhyesoo.yu <hyesoo.yu@samsung.com>
Mon, 17 Jul 2017 05:22:01 +0000 (14:22 +0900)
committerCosmin Tanislav <demonsingur@gmail.com>
Mon, 22 Apr 2024 17:22:13 +0000 (20:22 +0300)
The bit encoding of ABGR2101010 format in little endian:
31  29    20 19    10 9      0
+--+--------+--------+--------+
| A|    B   |    G   |   R    |
+--+--------+--------+--------+

It can be expressed as a bytes sequence as follows:
RRRRRRRR GGGGGGRR BBBBGGGG AABBBBBB

Change-Id: Ie574e083cc1b4538710e752b1fd3aabdf8d855ea
Signed-off-by: hyesoo.yu <hyesoo.yu@samsung.com>
drivers/gpu/exynos/g2d/g2d_command.c
drivers/gpu/exynos/g2d/g2d_format.h

index 47733c564859b3f411a6578d880d842ddb245a7d..882ea8c44891801dffe3cb49629ef7e33abb8ad7 100644 (file)
@@ -254,6 +254,11 @@ static const struct g2d_fmt g2d_formats[] = {
                .fmtvalue       = G2D_FMT_NV61,
                .bpp            = { 8, 8 },
                .num_planes     = 2,
+       }, {
+               .name           = "ABGR2101010",
+               .fmtvalue       = G2D_FMT_ABGR2101010,  /* [31:0] ABGR */
+               .bpp            = { 32 },
+               .num_planes     = 1,
        },
 };
 
@@ -387,7 +392,7 @@ static bool check_srccolor_mode(u32 value)
 {
        u32 fmt = ((value) & G2D_DATAFMT_MASK) >> G2D_DATAFMT_SHIFT;
 
-       if ((fmt > 13) || (fmt == 6) || (fmt == 7) || (fmt == 9))
+       if ((fmt > 14) || (fmt == 6) || (fmt == 7) || (fmt == 9))
                return false;
 
        if (IS_YUV(value) && (value & G2D_DATAFORMAT_AFBC))
@@ -401,7 +406,7 @@ static bool check_dstcolor_mode(u32 value)
        u32 fmt = ((value) & G2D_DATAFMT_MASK) >> G2D_DATAFMT_SHIFT;
 
        /* src + YCbCr420 3p, - YCbCr420 2p 8.2 */
-       if ((fmt > 12) || (fmt == 6) || (fmt == 7))
+       if ((fmt > 14) || (fmt == 13) || (fmt == 6) || (fmt == 7))
                return false;
 
        /* AFBC and UORDER shoult not be set together */
index f72ea5d5e9b0bb96b27659401734dbb55bc49e60..7bffff0a4de083f97173d95698b3e5dee53109f7 100644 (file)
@@ -45,6 +45,7 @@
 #define G2D_DATAFMT_YUV422SP   (11 << G2D_DATAFMT_SHIFT)
 #define G2D_DATAFMT_P010       (12 << G2D_DATAFMT_SHIFT)
 #define G2D_DATAFMT_YUV420SP82 (13 << G2D_DATAFMT_SHIFT)
+#define G2D_DATAFMT_2101010    (14 << G2D_DATAFMT_SHIFT)
 
 #define G2D_FMT_ARGB8888       (G2D_DATAFMT_8888 | G2D_SWZ_ARGB)
 #define G2D_FMT_ABGR8888       (G2D_DATAFMT_8888 | G2D_SWZ_ABGR)
 #define G2D_FMT_NV21_82                (G2D_DATAFMT_YUV420SP82 | G2D_YUV_VU)
 #define G2D_FMT_NV12_P010      (G2D_DATAFMT_P010 | G2D_YUV_UV)
 #define G2D_FMT_NV21_P010      (G2D_DATAFMT_P010 | G2D_YUV_VU)
+#define G2D_FMT_ABGR2101010    (G2D_DATAFMT_2101010 | G2D_SWZ_ABGR)
 
 #define G2D_DATAFORMAT_AFBC    (1 << 20)
 #define G2D_DATAFORMAT_UORDER  (1 << 21)
 
 #define IS_AFBC(fmt)   ((fmt & G2D_DATAFORMAT_AFBC) != 0)
 #define IS_UORDER(fmt) ((fmt & G2D_DATAFORMAT_UORDER) != 0)
-#define IS_YUV(fmt)    (((fmt) & G2D_DATAFMT_MASK) > G2D_DATAFMT_RESERVED)
+#define IS_YUV(fmt)    ((((fmt) & G2D_DATAFMT_MASK) > G2D_DATAFMT_RESERVED) &&\
+                       (((fmt) & G2D_DATAFMT_MASK) != G2D_DATAFMT_2101010))
 #define IS_YUV420(fmt) ((((fmt) >> G2D_DATAFMT_SHIFT) & 0xF) == 0x8)
 #define IS_YUV422(fmt) ((((fmt) >> G2D_DATAFMT_SHIFT) & 0xE) == 0xA)
 #define IS_YUV422_2P(fmt)      ((((fmt) >> G2D_DATAFMT_SHIFT) & 0xF) == 0xB)
-#define IS_RGB(fmt)    (((fmt) & G2D_DATAFMT_MASK) < G2D_DATAFMT_8)
+#define IS_RGB(fmt)    ((((fmt) & G2D_DATAFMT_MASK) < G2D_DATAFMT_8) ||\
+                       (((fmt) & G2D_DATAFMT_MASK) == G2D_DATAFMT_2101010))
 #define IS_YUV420_82(fmt) (((fmt) & G2D_DATAFMT_MASK) == G2D_DATAFMT_YUV420SP82)
 
 #define IS_AFBC_WIDTH_ALIGNED(width)   IS_ALIGNED((width), 16)