}
EXPORT_SYMBOL(drm_rect_intersect);
-static u32 clip_scaled(u32 src, u32 dst, u32 clip)
+static u32 clip_scaled(int src, int dst, int *clip)
{
u64 tmp;
return 0;
/* Only clip what we have. Keeps the result bounded. */
- clip = min(clip, dst);
+ *clip = min(*clip, dst);
- tmp = mul_u32_u32(src, dst - clip);
+ tmp = mul_u32_u32(src, dst - *clip);
/*
* Round toward 1.0 when clipping so that we don't accidentally
diff = clip->x1 - dst->x1;
if (diff > 0) {
u32 new_src_w = clip_scaled(drm_rect_width(src),
- drm_rect_width(dst), diff);
+ drm_rect_width(dst), &diff);
src->x1 = src->x2 - new_src_w;
- dst->x1 = clip->x1;
+ dst->x1 += diff;
}
diff = clip->y1 - dst->y1;
if (diff > 0) {
u32 new_src_h = clip_scaled(drm_rect_height(src),
- drm_rect_height(dst), diff);
+ drm_rect_height(dst), &diff);
src->y1 = src->y2 - new_src_h;
- dst->y1 = clip->y1;
+ dst->y1 += diff;
}
diff = dst->x2 - clip->x2;
if (diff > 0) {
u32 new_src_w = clip_scaled(drm_rect_width(src),
- drm_rect_width(dst), diff);
+ drm_rect_width(dst), &diff);
src->x2 = src->x1 + new_src_w;
- dst->x2 = clip->x2;
+ dst->x2 -= diff;
}
diff = dst->y2 - clip->y2;
if (diff > 0) {
u32 new_src_h = clip_scaled(drm_rect_height(src),
- drm_rect_height(dst), diff);
+ drm_rect_height(dst), &diff);
src->y2 = src->y1 + new_src_h;
- dst->y2 = clip->y2;
+ dst->y2 -= diff;
}
return drm_rect_visible(dst);