On Fri, May 25, 2018 at 11:12 AM Ville Syrjälä < ville.syrjala@xxxxxxxxxxxxxxx> wrote: > On Fri, May 25, 2018 at 11:00:23AM -0700, Fritz Koenig wrote: > > YUV planes need to be multiples of 2 to scan out. This was > > handled correctly for planes other than the primary in the > > intel_check_sprite_plane, where the code fixes up the plane > > and makes it compliant. Move this code into a location that > > allows the primary check to access it as well. > > > > Signed-off-by: Fritz Koenig <frkoenig@xxxxxxxxxx> > > --- > > > > Hi, > > > > I think this is a better implementation where instead of rejecting > > yuv planes that are not correctly aligned, they are fixed up. This > > is done by reusing the sprite check code that was already doing that. > > > > drivers/gpu/drm/i915/intel_display.c | 170 +++++++++++++++++++++++++++ > > drivers/gpu/drm/i915/intel_drv.h | 2 + > > drivers/gpu/drm/i915/intel_sprite.c | 154 +----------------------- > > 3 files changed, 175 insertions(+), 151 deletions(-) > > > > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c > > index 56004ffbd8bb..1328fb90367f 100644 > > --- a/drivers/gpu/drm/i915/intel_display.c > > +++ b/drivers/gpu/drm/i915/intel_display.c > > @@ -12854,6 +12854,170 @@ skl_max_scale(struct intel_crtc *intel_crtc, struct intel_crtc_state *crtc_state > > return max_scale; > > } > > > > +int > > +intel_clip_src_rect(struct intel_plane *plane, > > + struct intel_crtc_state *crtc_state, > > + struct intel_plane_state *state) > > +{ > > + struct drm_i915_private *dev_priv = to_i915(plane->base.dev); > > + struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); > > + struct drm_framebuffer *fb = state->base.fb; > > + int crtc_x, crtc_y; > > + unsigned int crtc_w, crtc_h; > > + uint32_t src_x, src_y, src_w, src_h; > > + struct drm_rect *src = &state->base.src; > > + struct drm_rect *dst = &state->base.dst; > > + struct drm_rect clip = {}; > > + int hscale, vscale; > > + int max_scale, min_scale; > > + bool can_scale; > > + > > + *src = drm_plane_state_src(&state->base); > > + *dst = drm_plane_state_dest(&state->base); > > + > > + /* setup can_scale, min_scale, max_scale */ > > + if (INTEL_GEN(dev_priv) >= 9) { > > + /* use scaler when colorkey is not required */ > > + if (!state->ckey.flags) { > > + can_scale = 1; > > + min_scale = 1; > > + max_scale = skl_max_scale(crtc, crtc_state); > > + } else { > > + can_scale = 0; > > + min_scale = DRM_PLANE_HELPER_NO_SCALING; > > + max_scale = DRM_PLANE_HELPER_NO_SCALING; > > + } > > + } else { > > + can_scale = plane->can_scale; > > + max_scale = plane->max_downscale << 16; > > + min_scale = plane->can_scale ? 1 : (1 << 16); > > + } > > + > > + /* > > + * FIXME the following code does a bunch of fuzzy adjustments to the > > + * coordinates and sizes. We probably need some way to decide whether > > + * more strict checking should be done instead. > > + */ > > + drm_rect_rotate(src, fb->width << 16, fb->height << 16, > > + state->base.rotation); > > + > > + hscale = drm_rect_calc_hscale_relaxed(src, dst, min_scale, max_scale); > > + BUG_ON(hscale < 0); > > + > > + vscale = drm_rect_calc_vscale_relaxed(src, dst, min_scale, max_scale); > > + BUG_ON(vscale < 0); > Your baseline is already outdated. Sorry, I was on the incorrect branch. I tried to retarget at drm-intel-fixes, but this still appears to be incorrect as it is still failing to patch. Should I be targeting drm-intel-next instead? > -- > Ville Syrjälä > Intel _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx