drm/rect: Handle rounding errors in drm_rect_clip_scaled, v3.
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Thu, 3 May 2018 11:22:14 +0000 (13:22 +0200)
committerMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Fri, 4 May 2018 09:09:54 +0000 (11:09 +0200)
commitf96bdf564f3e7511aecdd4c35cc18ac5e0750a2f
treee0b610aaad29b30bf9af55abbb72821b43c0307f
parent6f96f2000ac27b0f5f769b0bc2f0440ebfa1c3a3
drm/rect: Handle rounding errors in drm_rect_clip_scaled, v3.

Instead of relying on a scale which may increase rounding errors,
clip src by doing: src * (dst - clip) / dst and rounding the result
away from 1, so the new coordinates get closer to 1. We won't need
to fix up with a magic macro afterwards, because our scaling factor
will never go to the other side of 1.

Changes since v1:
- Adjust dst immediately, else drm_rect_width/height on dst gives bogus
  results.
Change since v2:
- Get rid of macros and use 64-bits math.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
[mlankhorst: Add Villes comment, and rename newsrc to tmp. (Ville)]
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180503112217.37292-3-maarten.lankhorst@linux.intel.com
drivers/gpu/drm/drm_atomic_helper.c
drivers/gpu/drm/drm_rect.c
drivers/gpu/drm/i915/intel_sprite.c
include/drm/drm_rect.h