On Fri, Mar 17, 2017 at 11:18:03PM +0200, ville.syrjala@xxxxxxxxxxxxxxx wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Extract the primary plane surfae offset/x/y calculations for > pre-SKL platforms into a common function, and call it during the > atomic check phase to reduce the amount of stuff we have to do > during the commit phase. SKL is already doing this. > > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/intel_display.c | 82 ++++++++++++++++++++++-------------- > 1 file changed, 50 insertions(+), 32 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > index 2e0106a11f8f..024614cb47b6 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -3026,6 +3026,43 @@ static u32 i9xx_plane_ctl(const struct intel_crtc_state *crtc_state, > return dspcntr; > } > > +static int i9xx_check_plane_surface(struct intel_plane_state *plane_state) > +{ > + struct drm_i915_private *dev_priv = > + to_i915(plane_state->base.plane->dev); > + int src_x = plane_state->base.src.x1 >> 16; > + int src_y = plane_state->base.src.y1 >> 16; > + u32 offset; > + > + intel_add_fb_offsets(&src_x, &src_y, plane_state, 0); > + > + if (INTEL_GEN(dev_priv) >= 4) > + offset = intel_compute_tile_offset(&src_x, &src_y, > + plane_state, 0); > + else > + offset = 0; > + > + /* HSW+ does this automagically in hardware */ > + if (!IS_HASWELL(dev_priv) && !IS_BROADWELL(dev_priv)) { if (INTEL_GEN() <= 7 && !IS_HASWELL()) { would match the comment better. > + unsigned int rotation = plane_state->base.rotation; > + int src_w = drm_rect_width(&plane_state->base.src) >> 16; > + int src_h = drm_rect_height(&plane_state->base.src) >> 16; > + > + if (rotation & DRM_ROTATE_180) { > + src_x += src_w - 1; > + src_y += src_h - 1; > + } else if (rotation & DRM_REFLECT_X) { > + src_x += src_w - 1; > + } > + } > + > + plane_state->main.offset = offset; > + plane_state->main.x = src_x; > + plane_state->main.y = src_y; plane_state->actual.offset, ->actual.x, ->actual.y ? plane_state->commit.offset, ->commit.x, ->commit.y ? Movement looks fine, Reviewed-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> -Chris -- Chris Wilson, Intel Open Source Technology Centre _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx