On Mon, Mar 02, 2020 at 12:31:38PM +0200, Roman Stratiienko wrote:
Allwinner display engine blender consists of 3 pipelined blending units.
PIPE0->\ BLD0-\ PIPE1->/ BLD1-\ PIPE2->------/ BLD2->OUT PIPE3->------------/
This pipeline produces incorrect composition if PIPE0 buffer has alpha.
Why? What happens in that case?
Correct solution is to add one more blending step and mix PIPE0 with background, but it is not supported by the hardware.
Use premultiplied alpha buffer of PIPE0 overlay channel as is. In this case we got same effect as mixing PIPE0 with black background.
Signed-off-by: Roman Stratiienko r.stratiienko@gmail.com
v4:
- Initial version, depends on other unmerged patches in the patchset.
drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 2 +- drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c index dd6145f80c36..d94f4d8b9128 100644 --- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c +++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c @@ -106,7 +106,7 @@ static void sun8i_ui_layer_update_alpha(struct sun8i_mixer *mixer, int channel, regmap_update_bits(mixer->engine.regs, SUN8I_MIXER_BLEND_PREMULTIPLY(bld_base), SUN8I_MIXER_BLEND_PREMULTIPLY_EN(zpos),
SUN8I_MIXER_BLEND_PREMULTIPLY_EN(zpos));
zpos ? SUN8I_MIXER_BLEND_PREMULTIPLY_EN(zpos) : 0);
Can you really use the zpos here? What happens if the zpos doesn't match the pipe?
Maxime