From ad2788cacd6ca95654aa312f0aa942c3cdb1ea12 Mon Sep 17 00:00:00 2001 From: Alexandros Frantzis Date: Fri, 11 May 2018 18:48:54 +0300 Subject: [PATCH] vrend: Adjust the GL blit source bounds based on the blit read direction When bounding a blit within the source resource extents, whether a coordinate bound is inclusive or exclusive depends on the direction of the read. Take this direction into account and bound the coordinates accordingly. Fixes: piglit fbo-blit-stretch Reviewed-by: Dave Airlie Signed-off-by: Alexandros Frantzis Signed-off-by: Dave Airlie --- src/vrend_blitter.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/src/vrend_blitter.c b/src/vrend_blitter.c index b727436..042a115 100644 --- a/src/vrend_blitter.c +++ b/src/vrend_blitter.c @@ -564,15 +564,20 @@ static void calc_src_deltas_for_bounds(struct vrend_resource *src_res, int max_x = u_minify(src_res->base.width0, info->src.level) - 1; int max_y = u_minify(src_res->base.height0, info->src.level) - 1; - /* point 0 uses inclusive bounds */ - src0_delta->dx = calc_delta_for_bound(info->src.box.x, max_x); - src0_delta->dy = calc_delta_for_bound(info->src.box.y, max_y); + /* Whether the bounds for the coordinates of a point are inclusive or + * exclusive depends on the direction of the blit read. Adjust the max + * bounds accordingly, with an adjustment of 0 for inclusive, and 1 for + * exclusive. */ + int src0_x_excl = info->src.box.width < 0; + int src0_y_excl = info->src.box.height < 0; + + src0_delta->dx = calc_delta_for_bound(info->src.box.x, max_x + src0_x_excl); + src0_delta->dy = calc_delta_for_bound(info->src.box.y, max_y + src0_y_excl); - /* point 1 uses exclusive bounds */ src1_delta->dx = calc_delta_for_bound(info->src.box.x + info->src.box.width, - max_x + 1); + max_x + !src0_x_excl); src1_delta->dy = calc_delta_for_bound(info->src.box.y + info->src.box.height, - max_y + 1); + max_y + !src0_y_excl); } /* Calculate dst delta values to adjust the dst points for any changes in the