DE2 VI layer doesn't support blending which means alpha channel is
ignored. Replace all formats with alpha with "don't care" (X) channel.

Signed-off-by: Jernej Skrabec <[email protected]>
---
 drivers/gpu/drm/sun4i/sun8i_mixer.c    | 56 ++++++++++++++++++++++++++
 drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 22 +++++-----
 2 files changed, 67 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/sun4i/sun8i_mixer.c 
b/drivers/gpu/drm/sun4i/sun8i_mixer.c
index 655445bfe64a..4a64f7ae437a 100644
--- a/drivers/gpu/drm/sun4i/sun8i_mixer.c
+++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c
@@ -106,48 +106,104 @@ static const struct de2_fmt_info de2_formats[] = {
                .rgb = true,
                .csc = SUN8I_CSC_MODE_OFF,
        },
+       {
+               /* for DE2 VI layer which ignores alpha */
+               .drm_fmt = DRM_FORMAT_XRGB4444,
+               .de2_fmt = SUN8I_MIXER_FBFMT_ARGB4444,
+               .rgb = true,
+               .csc = SUN8I_CSC_MODE_OFF,
+       },
        {
                .drm_fmt = DRM_FORMAT_ABGR4444,
                .de2_fmt = SUN8I_MIXER_FBFMT_ABGR4444,
                .rgb = true,
                .csc = SUN8I_CSC_MODE_OFF,
        },
+       {
+               /* for DE2 VI layer which ignores alpha */
+               .drm_fmt = DRM_FORMAT_XBGR4444,
+               .de2_fmt = SUN8I_MIXER_FBFMT_ABGR4444,
+               .rgb = true,
+               .csc = SUN8I_CSC_MODE_OFF,
+       },
        {
                .drm_fmt = DRM_FORMAT_RGBA4444,
                .de2_fmt = SUN8I_MIXER_FBFMT_RGBA4444,
                .rgb = true,
                .csc = SUN8I_CSC_MODE_OFF,
        },
+       {
+               /* for DE2 VI layer which ignores alpha */
+               .drm_fmt = DRM_FORMAT_RGBX4444,
+               .de2_fmt = SUN8I_MIXER_FBFMT_RGBA4444,
+               .rgb = true,
+               .csc = SUN8I_CSC_MODE_OFF,
+       },
        {
                .drm_fmt = DRM_FORMAT_BGRA4444,
                .de2_fmt = SUN8I_MIXER_FBFMT_BGRA4444,
                .rgb = true,
                .csc = SUN8I_CSC_MODE_OFF,
        },
+       {
+               /* for DE2 VI layer which ignores alpha */
+               .drm_fmt = DRM_FORMAT_BGRX4444,
+               .de2_fmt = SUN8I_MIXER_FBFMT_BGRA4444,
+               .rgb = true,
+               .csc = SUN8I_CSC_MODE_OFF,
+       },
        {
                .drm_fmt = DRM_FORMAT_ARGB1555,
                .de2_fmt = SUN8I_MIXER_FBFMT_ARGB1555,
                .rgb = true,
                .csc = SUN8I_CSC_MODE_OFF,
        },
+       {
+               /* for DE2 VI layer which ignores alpha */
+               .drm_fmt = DRM_FORMAT_XRGB1555,
+               .de2_fmt = SUN8I_MIXER_FBFMT_ARGB1555,
+               .rgb = true,
+               .csc = SUN8I_CSC_MODE_OFF,
+       },
        {
                .drm_fmt = DRM_FORMAT_ABGR1555,
                .de2_fmt = SUN8I_MIXER_FBFMT_ABGR1555,
                .rgb = true,
                .csc = SUN8I_CSC_MODE_OFF,
        },
+       {
+               /* for DE2 VI layer which ignores alpha */
+               .drm_fmt = DRM_FORMAT_XBGR1555,
+               .de2_fmt = SUN8I_MIXER_FBFMT_ABGR1555,
+               .rgb = true,
+               .csc = SUN8I_CSC_MODE_OFF,
+       },
        {
                .drm_fmt = DRM_FORMAT_RGBA5551,
                .de2_fmt = SUN8I_MIXER_FBFMT_RGBA5551,
                .rgb = true,
                .csc = SUN8I_CSC_MODE_OFF,
        },
+       {
+               /* for DE2 VI layer which ignores alpha */
+               .drm_fmt = DRM_FORMAT_RGBX5551,
+               .de2_fmt = SUN8I_MIXER_FBFMT_RGBA5551,
+               .rgb = true,
+               .csc = SUN8I_CSC_MODE_OFF,
+       },
        {
                .drm_fmt = DRM_FORMAT_BGRA5551,
                .de2_fmt = SUN8I_MIXER_FBFMT_BGRA5551,
                .rgb = true,
                .csc = SUN8I_CSC_MODE_OFF,
        },
+       {
+               /* for DE2 VI layer which ignores alpha */
+               .drm_fmt = DRM_FORMAT_BGRX5551,
+               .de2_fmt = SUN8I_MIXER_FBFMT_BGRA5551,
+               .rgb = true,
+               .csc = SUN8I_CSC_MODE_OFF,
+       },
        {
                .drm_fmt = DRM_FORMAT_ARGB2101010,
                .de2_fmt = SUN8I_MIXER_FBFMT_ARGB2101010,
diff --git a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c 
b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
index 6c0084a3c3d7..b8398ca18b0f 100644
--- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
+++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c
@@ -398,26 +398,26 @@ static const struct drm_plane_funcs sun8i_vi_layer_funcs 
= {
 };
 
 /*
- * While all RGB formats are supported, VI planes don't support
- * alpha blending, so there is no point having formats with alpha
- * channel if their opaque analog exist.
+ * While DE2 VI layer supports same RGB formats as UI layer, alpha
+ * channel is ignored. This structure lists all unique variants
+ * where alpha channel is replaced with "don't care" (X) channel.
  */
 static const u32 sun8i_vi_layer_formats[] = {
-       DRM_FORMAT_ABGR1555,
-       DRM_FORMAT_ABGR4444,
-       DRM_FORMAT_ARGB1555,
-       DRM_FORMAT_ARGB4444,
        DRM_FORMAT_BGR565,
        DRM_FORMAT_BGR888,
-       DRM_FORMAT_BGRA5551,
-       DRM_FORMAT_BGRA4444,
+       DRM_FORMAT_BGRX4444,
+       DRM_FORMAT_BGRX5551,
        DRM_FORMAT_BGRX8888,
        DRM_FORMAT_RGB565,
        DRM_FORMAT_RGB888,
-       DRM_FORMAT_RGBA4444,
-       DRM_FORMAT_RGBA5551,
+       DRM_FORMAT_RGBX4444,
+       DRM_FORMAT_RGBX5551,
        DRM_FORMAT_RGBX8888,
+       DRM_FORMAT_XBGR1555,
+       DRM_FORMAT_XBGR4444,
        DRM_FORMAT_XBGR8888,
+       DRM_FORMAT_XRGB1555,
+       DRM_FORMAT_XRGB4444,
        DRM_FORMAT_XRGB8888,
 
        DRM_FORMAT_NV16,
-- 
2.25.1

_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to