[PATCH v2] drm/vc4: Add support for plane alpha

Eric Anholt eric at anholt.net
Mon Apr 23 11:27:57 PDT 2018


Stefan Schake <stschake at 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 <stschake at 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!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 832 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-rpi-kernel/attachments/20180423/ce9fa6a7/attachment.sig>


More information about the linux-rpi-kernel mailing list