On Fri, Mar 17, 2017 at 10:04:32PM +0000, Chris Wilson wrote: > 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. That would leave out CHV. I think 'HAS_GMCH || IS_GEN5 || IS_GEN6 || IS_IVB' might be a semi-decent way to put this. But it's still not quite as succinct as '!HSW && !BDW'. What about if I just change the comment to "HSW/BDW do this ..."? > > > + 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 -- Ville Syrjälä Intel OTC _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx