diff -u pixman-0.38.4/debian/changelog pixman-0.38.4/debian/changelog --- pixman-0.38.4/debian/changelog +++ pixman-0.38.4/debian/changelog @@ -1,3 +1,9 @@ +pixman (0.38.4-0ubuntu2) focal; urgency=medium + + * Fix bilinear filter computation in wide pipeline (LP: #1988796) + + -- Benjamin Gilbert Tue, 06 Sep 2022 01:00:00 -0400 + pixman (0.38.4-0ubuntu1) eoan; urgency=medium * New upstream version diff -u pixman-0.38.4/debian/patches/series pixman-0.38.4/debian/patches/series --- pixman-0.38.4/debian/patches/series +++ pixman-0.38.4/debian/patches/series @@ -1,0 +2 @@ +fix-bilinear-filter-computation-in-wide-pipeline.diff only in patch2: unchanged: --- pixman-0.38.4.orig/debian/patches/fix-bilinear-filter-computation-in-wide-pipeline.diff +++ pixman-0.38.4/debian/patches/fix-bilinear-filter-computation-in-wide-pipeline.diff @@ -0,0 +1,84 @@ +From 8256c235d9b3854d039242356905eca854a890ba Mon Sep 17 00:00:00 2001 +From: Basile Clement +Date: Tue, 9 Apr 2019 23:16:13 +0200 +Subject: [PATCH] Fix bilinear filter computation in wide pipeline + +The recently introduced wide pipeline for filters has a typo which +causes it to improperly compute bilinear interpolation positions, +causing various glitches when enabled. + +This patch uses the proper computation for bilinear interpolation in the +wide pipeline. It also makes related `if` statements conformant to the +CODING_STYLE: + +* If a substatement spans multiple lines, then there must be braces + around it. + +* If one substatement of an if statement has braces, then the other + must too. + +Signed-off-by: Maarten Lankhorst +--- + pixman/pixman-bits-image.c | 9 +++++++++ + pixman/pixman-inlines.h | 2 +- + 2 files changed, 10 insertions(+), 1 deletion(-) + +diff --git a/pixman/pixman-bits-image.c b/pixman/pixman-bits-image.c +index 564789e..7bc2ba8 100644 +--- a/pixman/pixman-bits-image.c ++++ b/pixman/pixman-bits-image.c +@@ -432,29 +432,38 @@ bits_image_fetch_pixel_filtered (bits_image_t *image, + + case PIXMAN_FILTER_CONVOLUTION: + if (wide) ++ { + bits_image_fetch_pixel_convolution (image, x, y, + get_pixel, out, + accum_float, + reduce_float); ++ } + else ++ { + bits_image_fetch_pixel_convolution (image, x, y, + get_pixel, out, + accum_32, reduce_32); ++ } + break; + + case PIXMAN_FILTER_SEPARABLE_CONVOLUTION: + if (wide) ++ { + bits_image_fetch_pixel_separable_convolution (image, x, y, + get_pixel, out, + accum_float, + reduce_float); ++ } + else ++ { + bits_image_fetch_pixel_separable_convolution (image, x, y, + get_pixel, out, + accum_32, reduce_32); ++ } + break; + + default: ++ assert (0); + break; + } + } +diff --git a/pixman/pixman-inlines.h b/pixman/pixman-inlines.h +index 332e208..f785910 100644 +--- a/pixman/pixman-inlines.h ++++ b/pixman/pixman-inlines.h +@@ -231,7 +231,7 @@ bilinear_interpolation_float (argb_t tl, argb_t tr, + argb_t r; + + distxy = distx * disty; +- distxiy = distx - (1.f - distxy); ++ distxiy = distx * (1.f - disty); + distixy = (1.f - distx) * disty; + distixiy = (1.f - distx) * (1.f - disty); + +-- +2.37.1 +