All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Ville Syrjälä" <ville.syrjala@linux.intel.com>
To: Nemesa Garg <nemesa.garg@intel.com>
Cc: intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org
Subject: Re: [PATCH 1/2] drm/i915/display: After joiner compute pfit_dst
Date: Thu, 19 Dec 2024 18:02:25 +0200	[thread overview]
Message-ID: <Z2RDkcPdNv5vMJOl@intel.com> (raw)
In-Reply-To: <20241212143329.938202-2-nemesa.garg@intel.com>

On Thu, Dec 12, 2024 at 08:03:28PM +0530, Nemesa Garg wrote:
> In panel fitter/pipe scaler scenario the pch_pfit configuration
> currently takes place before accounting for pipe_src width for
> joiner. This causes issue when pch_pfit and joiner get enabled
> together.So once pipe src is computed adjust the pfit_dst.
> It can be done by computing per pipe output area first and then
> and then find the intersection of above area with pfit_dst and
> then adjust the coordinates.
> 
> Signed-off-by: Nemesa Garg <nemesa.garg@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 41 ++++++++++++++++++++
>  1 file changed, 41 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 21319f753a34..7be2ea11b8b0 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -2563,6 +2563,36 @@ static int intel_crtc_compute_pipe_src(struct intel_crtc_state *crtc_state)
>  	return 0;
>  }
>  
> +/*
> + * The x-coordinate for Primary should be calculated in such a way
> + * that it remains consistent whether the pipes are joined or not.
> + * This means we need to consider the full width of the display even
> + * when the pipes are joined. The x-coordinate for secondaries is 0
> + * because it starts at the leftmost point of its own display area,
> + * ensuring that the framebuffer is centered within Pipe B’s portion
> + * of the overall display.
> + */
> +static int intel_crtc_compute_pfit(struct intel_atomic_state *state,
> +				   struct intel_crtc_state *crtc_state)
> +{
> +	struct drm_display_mode *mode = &crtc_state->hw.pipe_mode;

const struct drm_display_mode *pipe_mode = ...

> +	struct drm_rect area;
> +
> +	if (!crtc_state->pch_pfit.enabled)
> +		return 0;
> +
> +	drm_rect_init(&area, 0, 0,

This needs a proper x offset to match the pipe's positon in
the overall screen layout (can be determined similarly to
intel_joiner_adjust_pipe_src(), except using crtc_hdisplay
as the width instead of the pipe_src width).

> +		      mode->crtc_hdisplay,
> +		      mode->crtc_vdisplay);
> +
> +	if (!drm_rect_intersect(&crtc_state->pch_pfit.dst, &area))
> +		return -EINVAL;
> +
> +	drm_rect_translate(&crtc_state->pch_pfit.dst, -area.x1, -area.y1);

And this needs to remove the same offset we added originally.

> +
> +	return 0;
> +}
> +
>  static int intel_crtc_compute_pipe_mode(struct intel_crtc_state *crtc_state)
>  {
>  	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
> @@ -2645,6 +2675,10 @@ static int intel_crtc_compute_config(struct intel_atomic_state *state,
>  	if (ret)
>  		return ret;
>  
> +	ret = intel_crtc_compute_pfit(state, crtc_state);
> +	if (ret)
> +		return ret;
> +
>  	intel_crtc_compute_pixel_rate(crtc_state);
>  
>  	if (crtc_state->has_pch_encoder)
> @@ -4865,6 +4899,13 @@ copy_joiner_crtc_state_modeset(struct intel_atomic_state *state,
>  		drm_dp_tunnel_ref_get(primary_crtc_state->dp_tunnel_ref.tunnel,
>  				      &secondary_crtc_state->dp_tunnel_ref);
>  
> +	if (secondary_crtc_state->pch_pfit.enabled) {
> +		struct drm_rect *dst = &secondary_crtc_state->pch_pfit.dst;
> +		int y = dst->y1;
> +
> +		drm_rect_translate_to(dst, 0, y);
> +	}
> +
>  	copy_joiner_crtc_state_nomodeset(state, secondary_crtc);
>  
>  	secondary_crtc_state->uapi.mode_changed = primary_crtc_state->uapi.mode_changed;
> -- 
> 2.25.1

-- 
Ville Syrjälä
Intel

  parent reply	other threads:[~2024-12-19 16:02 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-12-12 14:33 [PATCH 0/2] Consider joiner calculation for panel fitting Nemesa Garg
2024-12-12 14:33 ` [PATCH 1/2] drm/i915/display: After joiner compute pfit_dst Nemesa Garg
2024-12-12 15:54   ` Cavitt, Jonathan
2024-12-19 15:13     ` Garg, Nemesa
2024-12-19 16:02   ` Ville Syrjälä [this message]
2024-12-20  6:07     ` Garg, Nemesa
2024-12-20  9:04     ` Ville Syrjälä
2025-01-29 12:54       ` Garg, Nemesa
2024-12-12 14:33 ` [PATCH 2/2] drm/i915/display: Initialize pipe_src in compute stage Nemesa Garg
2024-12-12 15:54   ` Cavitt, Jonathan
2024-12-19 15:15     ` Garg, Nemesa
2024-12-12 14:55 ` ✓ CI.Patch_applied: success for Consider joiner calculation for panel fitting (rev2) Patchwork
2024-12-12 14:55 ` ✓ CI.checkpatch: " Patchwork
2024-12-12 14:56 ` ✓ CI.KUnit: " Patchwork
2024-12-12 15:15 ` ✓ CI.Build: " Patchwork
2024-12-12 15:17 ` ✓ CI.Hooks: " Patchwork
2024-12-12 15:19 ` ✓ CI.checksparse: " Patchwork
2024-12-12 15:50 ` ✓ Xe.CI.BAT: " Patchwork
2024-12-12 15:52 ` ✗ i915.CI.BAT: failure for Consider joiner calculation for panel fitting (rev6) Patchwork
2024-12-12 21:00 ` ✗ Xe.CI.Full: failure for Consider joiner calculation for panel fitting (rev2) Patchwork

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=Z2RDkcPdNv5vMJOl@intel.com \
    --to=ville.syrjala@linux.intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=nemesa.garg@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.