Stefan Schake <stsch...@gmail.com> writes:

> The HVS supports mixing fixed alpha with per-pixel alpha or
> setting a fixed plane alpha in case there is no per-pixel information.
> This allows us to support the generic DRM plane alpha property.
>
> Signed-off-by: Stefan Schake <stsch...@gmail.com>

Applied to drm-misc-next.  Thanks!

> @@ -565,6 +567,13 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
>                                             SCALER_POS1_SCL_HEIGHT));
>       }
>  
> +     /* Don't waste cycles mixing with plane alpha if the set alpha
> +      * is opaque or there is no per-pixel alpha information.
> +      * In any case we use the alpha property value as the fixed alpha.
> +      */
> +     mix_plane_alpha = state->alpha != DRM_BLEND_ALPHA_OPAQUE &&
> +                       fb->format->has_alpha;
> +
>       /* Position Word 2: Source Image Size, Alpha */
>       vc4_state->pos2_offset = vc4_state->dlist_count;
>       vc4_dlist_write(vc4_state,
> @@ -572,6 +581,7 @@ static int vc4_plane_mode_set(struct drm_plane *plane,
>                                     SCALER_POS2_ALPHA_MODE_PIPELINE :
>                                     SCALER_POS2_ALPHA_MODE_FIXED,
>                                     SCALER_POS2_ALPHA_MODE) |
> +                     (mix_plane_alpha ? SCALER_POS2_ALPHA_MIX : 0) |
>                       (fb->format->has_alpha ? SCALER_POS2_ALPHA_PREMULT : 0) 
> |
>                       VC4_SET_FIELD(vc4_state->src_w[0], SCALER_POS2_WIDTH) |
>                       VC4_SET_FIELD(vc4_state->src_h[0], SCALER_POS2_HEIGHT));

In an interesting note from the docs, if you'd set SCALER_POS2_ALPHA_MIX
with SCALER_POS2_ALPHA_MODE_FIXED, you'd get the fixed alpha squared!

Attachment: signature.asc
Description: PGP signature

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to