All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jessica Zhang <quic_jesszhan@quicinc.com>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>,
	Rob Clark <robdclark@gmail.com>,
	Dmitry Baryshkov <dmitry.baryshkov@linaro.org>,
	"Sean Paul" <sean@poorly.run>,
	Marijn Suijten <marijn.suijten@somainline.org>
Cc: <quic_abhinavk@quicinc.com>, <ppaalanen@gmail.com>,
	<contact@emersion.fr>, <laurent.pinchart@ideasonboard.com>,
	<sebastian.wick@redhat.com>, <ville.syrjala@linux.intel.com>,
	<dri-devel@lists.freedesktop.org>, <linux-kernel@vger.kernel.org>,
	<linux-arm-msm@vger.kernel.org>,
	<freedreno@lists.freedesktop.org>,
	<wayland-devel@lists.freedesktop.org>,
	Jessica Zhang <quic_jesszhan@quicinc.com>
Subject: [PATCH RFC v6 09/10] drm/msm/dpu: Use DRM solid_fill property
Date: Mon, 28 Aug 2023 17:05:15 -0700	[thread overview]
Message-ID: <20230828-solid-fill-v6-9-a820efcce852@quicinc.com> (raw)
In-Reply-To: <20230828-solid-fill-v6-0-a820efcce852@quicinc.com>

Drop DPU_PLANE_COLOR_FILL_FLAG and check the DRM solid_fill property to
determine if the plane is solid fill. In addition drop the DPU plane
color_fill field as we can now use drm_plane_state.solid_fill instead,
and pass in drm_plane_state.alpha to _dpu_plane_color_fill_pipe() to
allow userspace to configure the alpha value for the solid fill color.

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com>
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 37 +++++++++++++++++++++----------
 1 file changed, 25 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
index 114c803ff99b..639ecbeeacf8 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
@@ -42,7 +42,6 @@
 #define SHARP_SMOOTH_THR_DEFAULT	8
 #define SHARP_NOISE_THR_DEFAULT	2
 
-#define DPU_PLANE_COLOR_FILL_FLAG	BIT(31)
 #define DPU_ZPOS_MAX 255
 
 /*
@@ -82,7 +81,6 @@ struct dpu_plane {
 
 	enum dpu_sspp pipe;
 
-	uint32_t color_fill;
 	bool is_error;
 	bool is_rt_pipe;
 	const struct dpu_mdss_cfg *catalog;
@@ -606,19 +604,35 @@ static void _dpu_plane_color_fill_pipe(struct dpu_plane_state *pstate,
 	_dpu_plane_setup_scaler(pipe, fmt, true, &pipe_cfg, pstate->rotation);
 }
 
+static uint32_t _dpu_plane_get_abgr_fill_color(struct drm_plane_state *state)
+{
+	struct drm_solid_fill solid_fill = state->solid_fill;
+
+	uint32_t ret = 0;
+	uint8_t a = state->alpha & 0xFF;
+	uint8_t b = solid_fill.b >> 24;
+	uint8_t g = solid_fill.g >> 24;
+	uint8_t r = solid_fill.r >> 24;
+
+	ret |= a << 24;
+	ret |= b << 16;
+	ret |= g << 8;
+	ret |= r;
+
+	return ret;
+}
+
 /**
  * _dpu_plane_color_fill - enables color fill on plane
  * @pdpu:   Pointer to DPU plane object
  * @color:  RGB fill color value, [23..16] Blue, [15..8] Green, [7..0] Red
  * @alpha:  8-bit fill alpha value, 255 selects 100% alpha
  */
-static void _dpu_plane_color_fill(struct dpu_plane *pdpu,
-		uint32_t color, uint32_t alpha)
+static void _dpu_plane_color_fill(struct dpu_plane *pdpu, uint32_t color)
 {
 	const struct dpu_format *fmt;
 	const struct drm_plane *plane = &pdpu->base;
 	struct dpu_plane_state *pstate = to_dpu_plane_state(plane->state);
-	u32 fill_color = (color & 0xFFFFFF) | ((alpha & 0xFF) << 24);
 
 	DPU_DEBUG_PLANE(pdpu, "\n");
 
@@ -633,11 +647,11 @@ static void _dpu_plane_color_fill(struct dpu_plane *pdpu,
 
 	/* update sspp */
 	_dpu_plane_color_fill_pipe(pstate, &pstate->pipe, &pstate->pipe_cfg.dst_rect,
-				   fill_color, fmt);
+				   color, fmt);
 
 	if (pstate->r_pipe.sspp)
 		_dpu_plane_color_fill_pipe(pstate, &pstate->r_pipe, &pstate->r_pipe_cfg.dst_rect,
-					   fill_color, fmt);
+					   color, fmt);
 }
 
 static int dpu_plane_prepare_fb(struct drm_plane *plane,
@@ -976,10 +990,9 @@ void dpu_plane_flush(struct drm_plane *plane)
 	 */
 	if (pdpu->is_error)
 		/* force white frame with 100% alpha pipe output on error */
-		_dpu_plane_color_fill(pdpu, 0xFFFFFF, 0xFF);
-	else if (pdpu->color_fill & DPU_PLANE_COLOR_FILL_FLAG)
-		/* force 100% alpha */
-		_dpu_plane_color_fill(pdpu, pdpu->color_fill, 0xFF);
+		_dpu_plane_color_fill(pdpu, 0xFFFFFFFF);
+	else if (drm_plane_solid_fill_enabled(plane->state))
+		_dpu_plane_color_fill(pdpu, _dpu_plane_get_abgr_fill_color(plane->state));
 	else {
 		dpu_plane_flush_csc(pdpu, &pstate->pipe);
 		dpu_plane_flush_csc(pdpu, &pstate->r_pipe);
@@ -1024,7 +1037,7 @@ static void dpu_plane_sspp_update_pipe(struct drm_plane *plane,
 	}
 
 	/* override for color fill */
-	if (pdpu->color_fill & DPU_PLANE_COLOR_FILL_FLAG) {
+	if (drm_plane_solid_fill_enabled(plane->state)) {
 		_dpu_plane_set_qos_ctrl(plane, pipe, false);
 
 		/* skip remaining processing on color fill */

-- 
2.42.0


WARNING: multiple messages have this Message-ID (diff)
From: Jessica Zhang <quic_jesszhan@quicinc.com>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
	Maxime Ripard <mripard@kernel.org>,
	Thomas Zimmermann <tzimmermann@suse.de>,
	David Airlie <airlied@gmail.com>, Daniel Vetter <daniel@ffwll.ch>,
	Rob Clark <robdclark@gmail.com>,
	Dmitry Baryshkov <dmitry.baryshkov@linaro.org>,
	"Sean Paul" <sean@poorly.run>,
	Marijn Suijten <marijn.suijten@somainline.org>
Cc: sebastian.wick@redhat.com, quic_abhinavk@quicinc.com,
	dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
	ppaalanen@gmail.com, laurent.pinchart@ideasonboard.com,
	linux-arm-msm@vger.kernel.org,
	Jessica Zhang <quic_jesszhan@quicinc.com>,
	wayland-devel@lists.freedesktop.org,
	freedreno@lists.freedesktop.org
Subject: [PATCH RFC v6 09/10] drm/msm/dpu: Use DRM solid_fill property
Date: Mon, 28 Aug 2023 17:05:15 -0700	[thread overview]
Message-ID: <20230828-solid-fill-v6-9-a820efcce852@quicinc.com> (raw)
In-Reply-To: <20230828-solid-fill-v6-0-a820efcce852@quicinc.com>

Drop DPU_PLANE_COLOR_FILL_FLAG and check the DRM solid_fill property to
determine if the plane is solid fill. In addition drop the DPU plane
color_fill field as we can now use drm_plane_state.solid_fill instead,
and pass in drm_plane_state.alpha to _dpu_plane_color_fill_pipe() to
allow userspace to configure the alpha value for the solid fill color.

Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Jessica Zhang <quic_jesszhan@quicinc.com>
---
 drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 37 +++++++++++++++++++++----------
 1 file changed, 25 insertions(+), 12 deletions(-)

diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
index 114c803ff99b..639ecbeeacf8 100644
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c
@@ -42,7 +42,6 @@
 #define SHARP_SMOOTH_THR_DEFAULT	8
 #define SHARP_NOISE_THR_DEFAULT	2
 
-#define DPU_PLANE_COLOR_FILL_FLAG	BIT(31)
 #define DPU_ZPOS_MAX 255
 
 /*
@@ -82,7 +81,6 @@ struct dpu_plane {
 
 	enum dpu_sspp pipe;
 
-	uint32_t color_fill;
 	bool is_error;
 	bool is_rt_pipe;
 	const struct dpu_mdss_cfg *catalog;
@@ -606,19 +604,35 @@ static void _dpu_plane_color_fill_pipe(struct dpu_plane_state *pstate,
 	_dpu_plane_setup_scaler(pipe, fmt, true, &pipe_cfg, pstate->rotation);
 }
 
+static uint32_t _dpu_plane_get_abgr_fill_color(struct drm_plane_state *state)
+{
+	struct drm_solid_fill solid_fill = state->solid_fill;
+
+	uint32_t ret = 0;
+	uint8_t a = state->alpha & 0xFF;
+	uint8_t b = solid_fill.b >> 24;
+	uint8_t g = solid_fill.g >> 24;
+	uint8_t r = solid_fill.r >> 24;
+
+	ret |= a << 24;
+	ret |= b << 16;
+	ret |= g << 8;
+	ret |= r;
+
+	return ret;
+}
+
 /**
  * _dpu_plane_color_fill - enables color fill on plane
  * @pdpu:   Pointer to DPU plane object
  * @color:  RGB fill color value, [23..16] Blue, [15..8] Green, [7..0] Red
  * @alpha:  8-bit fill alpha value, 255 selects 100% alpha
  */
-static void _dpu_plane_color_fill(struct dpu_plane *pdpu,
-		uint32_t color, uint32_t alpha)
+static void _dpu_plane_color_fill(struct dpu_plane *pdpu, uint32_t color)
 {
 	const struct dpu_format *fmt;
 	const struct drm_plane *plane = &pdpu->base;
 	struct dpu_plane_state *pstate = to_dpu_plane_state(plane->state);
-	u32 fill_color = (color & 0xFFFFFF) | ((alpha & 0xFF) << 24);
 
 	DPU_DEBUG_PLANE(pdpu, "\n");
 
@@ -633,11 +647,11 @@ static void _dpu_plane_color_fill(struct dpu_plane *pdpu,
 
 	/* update sspp */
 	_dpu_plane_color_fill_pipe(pstate, &pstate->pipe, &pstate->pipe_cfg.dst_rect,
-				   fill_color, fmt);
+				   color, fmt);
 
 	if (pstate->r_pipe.sspp)
 		_dpu_plane_color_fill_pipe(pstate, &pstate->r_pipe, &pstate->r_pipe_cfg.dst_rect,
-					   fill_color, fmt);
+					   color, fmt);
 }
 
 static int dpu_plane_prepare_fb(struct drm_plane *plane,
@@ -976,10 +990,9 @@ void dpu_plane_flush(struct drm_plane *plane)
 	 */
 	if (pdpu->is_error)
 		/* force white frame with 100% alpha pipe output on error */
-		_dpu_plane_color_fill(pdpu, 0xFFFFFF, 0xFF);
-	else if (pdpu->color_fill & DPU_PLANE_COLOR_FILL_FLAG)
-		/* force 100% alpha */
-		_dpu_plane_color_fill(pdpu, pdpu->color_fill, 0xFF);
+		_dpu_plane_color_fill(pdpu, 0xFFFFFFFF);
+	else if (drm_plane_solid_fill_enabled(plane->state))
+		_dpu_plane_color_fill(pdpu, _dpu_plane_get_abgr_fill_color(plane->state));
 	else {
 		dpu_plane_flush_csc(pdpu, &pstate->pipe);
 		dpu_plane_flush_csc(pdpu, &pstate->r_pipe);
@@ -1024,7 +1037,7 @@ static void dpu_plane_sspp_update_pipe(struct drm_plane *plane,
 	}
 
 	/* override for color fill */
-	if (pdpu->color_fill & DPU_PLANE_COLOR_FILL_FLAG) {
+	if (drm_plane_solid_fill_enabled(plane->state)) {
 		_dpu_plane_set_qos_ctrl(plane, pipe, false);
 
 		/* skip remaining processing on color fill */

-- 
2.42.0


  parent reply	other threads:[~2023-08-29  0:07 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-29  0:05 [PATCH RFC v6 00/10] Support for Solid Fill Planes Jessica Zhang
2023-08-29  0:05 ` Jessica Zhang
2023-08-29  0:05 ` [PATCH RFC v6 01/10] drm: Introduce pixel_source DRM plane property Jessica Zhang
2023-08-29  0:05   ` Jessica Zhang
2023-08-29  7:48   ` Pekka Paalanen
2023-08-29  7:48     ` Pekka Paalanen
2023-10-19 10:45     ` Sebastian Wick
2023-10-19 10:45       ` Sebastian Wick
2023-09-24 10:06   ` Dmitry Baryshkov
2023-09-24 10:06     ` Dmitry Baryshkov
2023-10-19  4:59     ` Jessica Zhang
2023-10-19  4:59       ` Jessica Zhang
2023-10-19 14:22   ` Simon Ser
2023-10-19 14:22     ` Simon Ser
2023-08-29  0:05 ` [PATCH RFC v6 02/10] drm: Introduce solid fill " Jessica Zhang
2023-08-29  0:05   ` Jessica Zhang
2023-08-29  8:10   ` Pekka Paalanen
2023-08-29  8:10     ` Pekka Paalanen
2023-08-29 15:23   ` Sebastian Wick
2023-08-29 15:23     ` Sebastian Wick
2023-08-29  0:05 ` [PATCH RFC v6 03/10] drm: Add solid fill pixel source Jessica Zhang
2023-08-29  0:05   ` Jessica Zhang
2023-08-29  8:11   ` Pekka Paalanen
2023-08-29  8:11     ` Pekka Paalanen
2023-08-29  0:05 ` [PATCH RFC v6 04/10] drm/atomic: Add pixel source to plane state dump Jessica Zhang
2023-08-29  0:05   ` Jessica Zhang
2023-09-24 10:08   ` Dmitry Baryshkov
2023-09-24 10:08     ` Dmitry Baryshkov
2023-08-29  0:05 ` [PATCH RFC v6 05/10] drm/atomic: Add solid fill data " Jessica Zhang
2023-08-29  0:05   ` Jessica Zhang
2023-08-29  8:14   ` Pekka Paalanen
2023-08-29  8:14     ` Pekka Paalanen
2023-09-24 10:09   ` Dmitry Baryshkov
2023-09-24 10:09     ` Dmitry Baryshkov
2023-08-29  0:05 ` [PATCH RFC v6 06/10] drm/atomic: Move framebuffer checks to helper Jessica Zhang
2023-08-29  0:05   ` Jessica Zhang
2023-08-29  0:05 ` [PATCH RFC v6 07/10] drm/atomic: Loosen FB atomic checks Jessica Zhang
2023-08-29  0:05   ` Jessica Zhang
2023-08-29  8:22   ` Pekka Paalanen
2023-08-29  8:22     ` Pekka Paalanen
2023-09-22 17:49     ` [Freedreno] " Jessica Zhang
2023-09-22 17:49       ` Jessica Zhang
2023-09-24 10:23       ` Dmitry Baryshkov
2023-09-24 10:23         ` Dmitry Baryshkov
2023-10-17  0:40         ` Jessica Zhang
2023-10-17  0:40           ` Jessica Zhang
2023-10-17  7:25           ` Dmitry Baryshkov
2023-10-17  7:25             ` Dmitry Baryshkov
2023-09-24 10:19   ` Dmitry Baryshkov
2023-09-24 10:19     ` Dmitry Baryshkov
2023-08-29  0:05 ` [PATCH RFC v6 08/10] drm/msm/dpu: Allow NULL FBs in atomic commit Jessica Zhang
2023-08-29  0:05   ` Jessica Zhang
2023-09-24 10:29   ` Dmitry Baryshkov
2023-09-24 10:29     ` Dmitry Baryshkov
2023-10-19  0:59     ` Jessica Zhang
2023-10-19  0:59       ` Jessica Zhang
2023-08-29  0:05 ` Jessica Zhang [this message]
2023-08-29  0:05   ` [PATCH RFC v6 09/10] drm/msm/dpu: Use DRM solid_fill property Jessica Zhang
2023-09-25 10:34   ` Dmitry Baryshkov
2023-09-25 10:34     ` Dmitry Baryshkov
2023-08-29  0:05 ` [PATCH RFC v6 10/10] drm/msm/dpu: Add solid fill and pixel source properties Jessica Zhang
2023-08-29  0:05   ` Jessica Zhang
2023-08-29 15:42 ` [PATCH RFC v6 00/10] Support for Solid Fill Planes Sebastian Wick
2023-08-29 15:42   ` Sebastian Wick
2023-09-26 15:25 ` Harry Wentland
2023-09-26 15:25   ` Harry Wentland

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230828-solid-fill-v6-9-a820efcce852@quicinc.com \
    --to=quic_jesszhan@quicinc.com \
    --cc=airlied@gmail.com \
    --cc=contact@emersion.fr \
    --cc=daniel@ffwll.ch \
    --cc=dmitry.baryshkov@linaro.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=freedreno@lists.freedesktop.org \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=maarten.lankhorst@linux.intel.com \
    --cc=marijn.suijten@somainline.org \
    --cc=mripard@kernel.org \
    --cc=ppaalanen@gmail.com \
    --cc=quic_abhinavk@quicinc.com \
    --cc=robdclark@gmail.com \
    --cc=sean@poorly.run \
    --cc=sebastian.wick@redhat.com \
    --cc=tzimmermann@suse.de \
    --cc=ville.syrjala@linux.intel.com \
    --cc=wayland-devel@lists.freedesktop.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.