[PATCH 6/7] etnaviv: apply non-alpha workaround for reduced masks
Lucas Stach
l.stach at pengutronix.de
Tue Nov 22 12:53:58 UTC 2016
Am Dienstag, den 22.11.2016, 12:17 +0000 schrieb Russell King:
> On Tue, Nov 22, 2016 at 12:44:19PM +0100, Lucas Stach wrote:
> > If accel_reduce_mask() succeeded in replacing the mask by constant
> > alpha the source format still needs to be switched to an alpha one
> > to get correct swizzles. We only want to avoid clobbering the alpha
> > mode setup done by accel_reduce_mask().
>
> Definitely not. You're correct that the test order is important, and
> the test order is intentionally the way it is, so that
> etnaviv_accel_reduce_mask() works.
>
> The effect that your patch will have is to corrupt all the state which
> etnaviv_accel_reduce_mask() has computed to effect the combining of the
> constant A8 mask with the source - overriding its alpha with a constant
> 255.
>
No. We are only switching the format to the alpha one in
etnaviv_workaround_nonalpha(). Replacing the alpha channel with constant
255 is only done if etnaviv_blend_src_alpha_normal() returns true, which
isn't the case if etnaviv_accel_reduce_mask() changed the alpha op
already.
> >
> > Signed-off-by: Lucas Stach <l.stach at pengutronix.de>
> > ---
> > etnaviv/etnaviv_render.c | 9 ++++++---
> > 1 file changed, 6 insertions(+), 3 deletions(-)
> >
> > diff --git a/etnaviv/etnaviv_render.c b/etnaviv/etnaviv_render.c
> > index 1ab10aa54348..e736a3cde7cc 100644
> > --- a/etnaviv/etnaviv_render.c
> > +++ b/etnaviv/etnaviv_render.c
> > @@ -567,10 +567,13 @@ static int etnaviv_accel_composite_srconly(PicturePtr pSrc, PicturePtr pDst,
> >
> > /*
> > * Apply the same work-around for a non-alpha source as for
> > - * a non-alpha destination.
> > + * a non-alpha destination. The test order is important here: we always need
> > + * to switch to the alpha format to get correct swizzle, but we don't want
> > + * to adjust the alpha mode if it's already set up to something other than
> > + * normal mode.
> > */
> > - if (etnaviv_blend_src_alpha_normal(final_blend) &&
> > - etnaviv_workaround_nonalpha(vSrc)) {
> > + if (etnaviv_workaround_nonalpha(vSrc) &&
> > + etnaviv_blend_src_alpha_normal(final_blend)) {
> > final_blend->alpha_mode |= VIVS_DE_ALPHA_MODES_GLOBAL_SRC_ALPHA_MODE_GLOBAL;
> > final_blend->src_alpha = 255;
> > }
> > --
> > 2.10.2
> >
>
More information about the etnaviv
mailing list