All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
To: "José Roberto de Souza" <jose.souza@intel.com>,
	intel-gfx@lists.freedesktop.org
Cc: Daniel Vetter <daniel@ffwll.ch>
Subject: Re: [Intel-gfx] [PATCH 4/5] drm/i915/display/psr: Use drm damage helpers to calculate plane damaged area
Date: Mon, 13 Sep 2021 19:03:14 +0300	[thread overview]
Message-ID: <4fe68cb6-41cf-6ecc-2dd8-f5081fffcc00@intel.com> (raw)
In-Reply-To: <20210909230725.33735-4-jose.souza@intel.com>



On 9/10/21 2:07 AM, José Roberto de Souza wrote:
> drm_atomic_helper_damage_iter_init() + drm_atomic_for_each_plane_damage()
> returns the full plane area in case no damaged area was set by
> userspace or it was discarted by driver.
> 
> This is important to fix the rendering of userspace applications that
> does frontbuffer rendering and notify driver about dirty areas but do
> not set any dirty clips.
> 
> With this we don't need to worry about to check and mark the whole
> area as damaged in page flips.
> 
> Another important change here is the move of
> drm_atomic_add_affected_planes() call, it needs to called late
> otherwise the area of all the planes would be added to pipe_clip and
> not saving power.
> 
> Cc: Daniel Vetter <daniel@ffwll.ch>
> Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
> Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> ---
>   drivers/gpu/drm/i915/display/intel_psr.c | 37 +++++++++---------------
>   1 file changed, 13 insertions(+), 24 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c b/drivers/gpu/drm/i915/display/intel_psr.c
> index 1a3effa3ce709..670b0ceba110f 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -22,6 +22,7 @@
>    */
>   
>   #include <drm/drm_atomic_helper.h>
> +#include <drm/drm_damage_helper.h>
>   
>   #include "display/intel_dp.h"
>   
> @@ -1577,10 +1578,6 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
>   	if (!crtc_state->enable_psr2_sel_fetch)
>   		return 0;
>   
> -	ret = drm_atomic_add_affected_planes(&state->base, &crtc->base);
> -	if (ret)
> -		return ret;
> -
>   	/*
>   	 * Calculate minimal selective fetch area of each plane and calculate
>   	 * the pipe damaged area.
> @@ -1590,8 +1587,8 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
>   	for_each_oldnew_intel_plane_in_state(state, plane, old_plane_state,
>   					     new_plane_state, i) {
>   		struct drm_rect src, damaged_area = { .y1 = -1 };
> -		struct drm_mode_rect *damaged_clips;
> -		u32 num_clips, j;
> +		struct drm_atomic_helper_damage_iter iter;
> +		struct drm_rect clip;
>   
>   		if (new_plane_state->uapi.crtc != crtc_state->uapi.crtc)
>   			continue;
> @@ -1611,8 +1608,6 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
>   			break;
>   		}
>   
> -		num_clips = drm_plane_get_damage_clips_count(&new_plane_state->uapi);
> -
>   		/*
>   		 * If visibility or plane moved, mark the whole plane area as
>   		 * damaged as it needs to be complete redraw in the new and old
> @@ -1633,14 +1628,8 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
>   				clip_area_update(&pipe_clip, &damaged_area);
>   			}
>   			continue;
> -		} else if (new_plane_state->uapi.alpha != old_plane_state->uapi.alpha ||
> -			   (!num_clips &&
> -			    new_plane_state->uapi.fb != old_plane_state->uapi.fb)) {
> -			/*
> -			 * If the plane don't have damaged areas but the
> -			 * framebuffer changed or alpha changed, mark the whole
> -			 * plane area as damaged.
> -			 */
> +		} else if (new_plane_state->uapi.alpha != old_plane_state->uapi.alpha) {
> +			/* If alpha changed mark the whole plane area as damaged */
>   			damaged_area.y1 = new_plane_state->uapi.dst.y1;
>   			damaged_area.y2 = new_plane_state->uapi.dst.y2;
>   			clip_area_update(&pipe_clip, &damaged_area);
> @@ -1648,15 +1637,11 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
>   		}
>   
>   		drm_rect_fp_to_int(&src, &new_plane_state->uapi.src);
> -		damaged_clips = drm_plane_get_damage_clips(&new_plane_state->uapi);
>   
> -		for (j = 0; j < num_clips; j++) {
> -			struct drm_rect clip;
> -
> -			clip.x1 = damaged_clips[j].x1;
> -			clip.y1 = damaged_clips[j].y1;
> -			clip.x2 = damaged_clips[j].x2;
> -			clip.y2 = damaged_clips[j].y2;
> +		drm_atomic_helper_damage_iter_init(&iter,
> +						   &old_plane_state->uapi,
> +						   &new_plane_state->uapi);
In the description of the drm_atomic_helper_damage_iter_init() function 
says, in order to use drm_atomic_helper_damage_iter_init(), the driver 
requires that the drm_atomic_helper_check_plane_state() helper function 
should be called in advance.
However, in i915, drm_atomic_helper_check_plane_state() helper is not 
used, and intel_atomic_plane_check_clipping() handles src.
And i915 is not using the atomic_check callback of 
drm_plane_helper_funcs. Is it fine to use 
drm_atomic_helper_damage_iter_init() in this case as well?
> +		drm_atomic_for_each_plane_damage(&iter, &clip) {
>   			if (drm_rect_intersect(&clip, &src))
>   				clip_area_update(&damaged_area, &clip);
>   		}
> @@ -1672,6 +1657,10 @@ int intel_psr2_sel_fetch_update(struct intel_atomic_state *state,
>   	if (full_update)
>   		goto skip_sel_fetch_set_loop;
>   
> +	ret = drm_atomic_add_affected_planes(&state->base, &crtc->base);
> +	if (ret)
> +		return ret;
> +
>   	intel_psr2_sel_fetch_pipe_alignment(crtc_state, &pipe_clip);
>   
>   	/*
> 

  reply	other threads:[~2021-09-13 16:03 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-09 23:07 [Intel-gfx] [PATCH 1/5] drm/i915/display/adlp: Fix PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR calculation José Roberto de Souza
2021-09-09 23:07 ` [Intel-gfx] [PATCH 2/5] drm/i915/display/adlp: Add new PSR2 workarounds José Roberto de Souza
2021-09-10 13:38   ` Gwan-gyeong Mun
2021-09-10 16:29     ` Souza, Jose
2021-09-13 16:09       ` Gwan-gyeong Mun
2021-09-13 17:00         ` Souza, Jose
2021-09-14 12:39           ` Gwan-gyeong Mun
2021-09-09 23:07 ` [Intel-gfx] [PATCH 3/5] drm/i915/display: Wait at least 2 frames before selective update José Roberto de Souza
2021-09-10 13:26   ` Gwan-gyeong Mun
2021-09-09 23:07 ` [Intel-gfx] [PATCH 4/5] drm/i915/display/psr: Use drm damage helpers to calculate plane damaged area José Roberto de Souza
2021-09-13 16:03   ` Gwan-gyeong Mun [this message]
2021-09-13 16:45     ` Souza, Jose
2021-09-14 12:42       ` Gwan-gyeong Mun
2021-09-09 23:07 ` [Intel-gfx] [PATCH 5/5] drm/i915/display: Workaround cursor left overs with PSR2 selective fetch enabled José Roberto de Souza
2021-09-10 13:29   ` Gwan-gyeong Mun
2021-09-10  0:11 ` [Intel-gfx] ✗ Fi.CI.SPARSE: warning for series starting with [1/5] drm/i915/display/adlp: Fix PSR2_MAN_TRK_CTL_SU_REGION_END_ADDR calculation Patchwork
2021-09-10  0:39 ` [Intel-gfx] ✓ Fi.CI.BAT: success " Patchwork
2021-09-10  2:26 ` [Intel-gfx] ✗ Fi.CI.IGT: failure " Patchwork
2021-09-10 13:39 ` [Intel-gfx] [PATCH 1/5] " Gwan-gyeong Mun

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=4fe68cb6-41cf-6ecc-2dd8-f5081fffcc00@intel.com \
    --to=gwan-gyeong.mun@intel.com \
    --cc=daniel@ffwll.ch \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=jose.souza@intel.com \
    /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.