[Intel-gfx] [PATCH 5/9] drm/i915: Setup clipped src/dest coordinates during FB reconstruction (v2)

Maarten Lankhorst maarten.lankhorst at linux.intel.com
Thu Dec 3 04:06:44 PST 2015


Op 25-11-15 om 17:48 schreef Matt Roper:
> Plane state objects contain two copies of src/dest coordinates:  the
> original (requested by userspace) coordinates in the base
> drm_plane_state object, and a second, clipped copy (i.e., what we
> actually want to program to the hardware) in intel_plane_state.  We've
> only been setting up the former set of values during boot time FB
> reconstruction, but we should really be initializing both.
>
> Note that the code here probably still needs some more work since we
> make a lot of assumptions about how the BIOS programmed the hardware
> that may not always be true, especially on gen9+; e.g.,
>  * Primary plane might not be positioned at 0,0
>  * Primary plane could have been rotated by the BIOS
>  * Primary plane might be scaled
>  * The BIOS fb might be a single "extended mode" FB that spans
>    multiple displays.
>  * ...etc...
>
> v2: Reword/expand commit message description of assumptions we make
>
> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
> Reviewed-by(v1): Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 73e9bf9..00e4c37 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -2599,6 +2599,8 @@ intel_find_initial_plane_obj(struct intel_crtc *intel_crtc,
>  	struct drm_plane_state *plane_state = primary->state;
>  	struct drm_crtc_state *crtc_state = intel_crtc->base.state;
>  	struct intel_plane *intel_plane = to_intel_plane(primary);
> +	struct intel_plane_state *intel_state =
> +		to_intel_plane_state(plane_state);
>  	struct drm_framebuffer *fb;
>  
>  	if (!plane_config->fb)
> @@ -2659,6 +2661,15 @@ valid_fb:
>  	plane_state->crtc_w = fb->width;
>  	plane_state->crtc_h = fb->height;
>  
> +	intel_state->src.x1 = plane_state->src_x;
> +	intel_state->src.y1 = plane_state->src_y;
> +	intel_state->src.x2 = plane_state->src_x + plane_state->src_w;
> +	intel_state->src.y2 = plane_state->src_y + plane_state->src_h;
> +	intel_state->dst.x1 = plane_state->crtc_x;
> +	intel_state->dst.y1 = plane_state->crtc_y;
> +	intel_state->dst.x2 = plane_state->crtc_x + plane_state->crtc_w;
> +	intel_state->dst.y2 = plane_state->crtc_y + plane_state->crtc_h;
>
Why does it matter that those coordinates are set up? The first atomic commit would overwrite those anyway..


More information about the Intel-gfx mailing list