[Beignet] [PATCH 1/2] utests: Correct box blur

Zhigang Gong zhigang.gong at linux.intel.com
Mon May 27 01:44:15 PDT 2013


Good catch, pushed. Thanks.

On Sat, May 25, 2013 at 10:14:16AM +0200, Dag Lem wrote:
> The box blur test kernel incorrectly calculates the bottom extents of
> the image. This yields visible blocking artifacts in the top of the
> test image (since BMP images are stored bottom to top).
> 
> These calculations are corrected, other extent calculations are
> simplified, and some dead code is removed.
> 
> The reference image is corrected accordingly, and is now identical to the
> reference image for the box blur float buffer test.
> 
> Signed-off-by: Dag Lem <dag at nimrod.no>
> ---
>  kernels/compiler_box_blur.cl      |  51 +++++++-------------------------------
>  kernels/compiler_box_blur_ref.bmp | Bin 49206 -> 49206 bytes
>  2 files changed, 9 insertions(+), 42 deletions(-)
> 
> diff --git a/kernels/compiler_box_blur.cl b/kernels/compiler_box_blur.cl
> index 0c6b657..26936e0 100644
> --- a/kernels/compiler_box_blur.cl
> +++ b/kernels/compiler_box_blur.cl
> @@ -27,7 +27,7 @@ inline uint pack_fp3(float3 u3) {
>      C2 = (from1+from2+from3);\
>      C3 = (from2+from3+r);\
>    } while(0)
> -#if 1
> +
>  __kernel void compiler_box_blur(__global const uint *src,
>                                  __global uint *dst,
>                                  int w,
> @@ -39,27 +39,27 @@ __kernel void compiler_box_blur(__global const uint *src,
>    const int yend = min(y + chunk, h); /* we process a tile in the image */
>  
>    /* Current line (left (1 pixel), center (4 pixels), right (1 pixel)) */
> -  const int left = max(4*x-1 + y*w, y*w);
> -  const int right = min(4*x+4 + y*w, y*w+w-1);
> +  const int left = max(4*x-1, 0) + y*w;
> +  const int right = min(4*x+4, w-1) + y*w;
>    int curr = x + y*(w>>2);
>    HFILTER3(curr0, curr1, curr2, curr3, curr, left, right);
>  
>    /* Top line (left (1 pixel), center (4 pixels), right (1 pixel)) */
>    const int ytop = max(y-1,0);
> -  const int topLeft = max(4*x-1 + ytop*w, ytop*w);
> -  const int topRight = min(4*x+4 + ytop*w, ytop*w+w-1);
> +  const int topLeft = max(4*x-1, 0) + ytop*w;
> +  const int topRight = min(4*x+4, w-1) + ytop*w;
>    const int top = x + ytop*(w>>2);
>    HFILTER3(top0, top1, top2, top3, top, topLeft, topRight);
>  
>    /* To guard bottom line */
>    const int maxBottom = x + (h-1)*(w>>2);
> -  const int maxBottomLeft = max(x-1,0) + (h-1)*w;
> -  const int maxBottomRight = min(x+1,w-1) + (h-1)*w;
> +  const int maxBottomLeft = max(4*x-1,0) + (h-1)*w;
> +  const int maxBottomRight = min(4*x+4,w-1) + (h-1)*w;
>  
>    /* We use a short 3 pixel sliding window */
>    const int ybottom = min(y+1,h-1);
> -  int bottomLeft = max(4*x-1 + ybottom*w, ybottom*w);
> -  int bottomRight = min(4*x+4 + ybottom*w, ybottom*w+w-1);
> +  int bottomLeft = max(4*x-1, 0) + ybottom*w;
> +  int bottomRight = min(4*x+4, w-1) + ybottom*w;
>    int bottom = x + ybottom*(w>>2);
>  
>    /* Top down sliding window */
> @@ -78,36 +78,3 @@ __kernel void compiler_box_blur(__global const uint *src,
>      curr0 = bottom0; curr1 = bottom1; curr2 = bottom2; curr3 = bottom3;
>    }
>  }
> -#else
> -
> -__kernel void compiler_box_blur(__global const uint *src,
> -                                __global uint *dst,
> -                                int w,
> -                                int h,
> -                                int chunk)
> -{
> -  const int x = get_global_id(0);
> -  int y = 0;
> -  const int yend = min(y + 64, h); /* we process a tile in the image */
> -
> -  /* Current line (left (1 pixel), center (4 pixels), right (1 pixel)) */
> -  int curr = x + y*32;
> -
> -  /* Top down sliding window */
> -  for (; y < yend; ++y, curr += (w>>2)) {
> -    float3 d = (float3)(255.f,255.f,255.f);
> -    const uint4 to = (uint4)(pack_fp3(d),pack_fp3(d),pack_fp3(d),pack_fp3(d));
> -#if 0
> -    dst[4*curr+0] = (int)dst;
> -    dst[4*curr+1] = (int)dst;
> -    dst[4*curr+2] = (int)dst;
> -    dst[4*curr+3] = (int)dst;
> -#endif
> -    dst[4*curr+0] = to.x;
> -    dst[4*curr+1] = to.y;
> -    dst[4*curr+2] = to.z;
> -    dst[4*curr+3] = to.w;
> -  }
> -}
> -#endif
> -
> diff --git a/kernels/compiler_box_blur_ref.bmp b/kernels/compiler_box_blur_ref.bmp
> index fd910089f442157a62ceb722978ac152aad7cf5c..149cbba1d8bae1fdd4e4803970e06ec1682a40fc 100644
> GIT binary patch
> delta 771
> zcmYk4&1%9>5QP`MS>Gc>5Ns<36g4qMb7Nzyt87HE^#_cCqMN!fyDnY15fPuqFLyvZ
> z(CNv{y?4%>F%5EQko$Z4S3erR8q?`?u~@8DtIcM!+wCBu(Wu>S7mG#1Fig{gfDesQ
> zsr0E)E|;s-YNOF`9LMuK-}jYLUmCq$kN-gskd%D4+YQ4oilTnMPYhKU%2COZ;tpKm
> zvm}Je08W*YlH_&zflj9*5#qY8ZQJ#F9c7kfA(2n642MG|Wlp9ZXHa7p-vY6L`0C1X
> zxjY;Wr_<?nyIrr><M9~Baivm`x#_{&^lLVo5YTG1 at Ju3p04bpWz$sxfn9XL2Kk14B
> zA!L#y*>1P{{eHb(BNFRyJD<-N3I)7>*MOjaJb)mmR;$qfDV)a at T*M*q3ES}Ibp==m
> zGXJS at n#cvVB6u!B+<x5%oa(m*PjG;D<!OmbPcw92hO7X6Y=O_gV8A?LwqAjoEnza5
> zF#0nKCnGD6hz)6)p3mp|{eHPz_-!Hr7kHNjbiz`Qx$ihQOa{O)A3}+ww%<k^>zmK#
> E4|f=m+W-In
> 
> delta 771
> zcmX|<yN-fj5QPihY~RCZV&P at Iix<2Ain^=@R}(erf`t+_R9Z+!X)JuH{bZ6o#h)`X
> zKmVCILtw-LBX<1=_1$i_-EKL5BkcG4<MDVpoi3LPWVKoi27^o{6OYFeiNt3FLQpQ3
> zi^XC#o6YC*jYgy0Za16FPN$>mx at nqx1;*p?a5yv!L(??L^!t6P-w{Tmk;&b!2xN)L
> zTb2dqGeRnSCeM-KW6<mMq)G|i?RJp_5ah{#R;yL3)f7dkR4Ro+L0aTN+qM~rNtt=E
> zSj^}897eoeuPI;yfGn3waRuTy&h2)4JRZ;Ilk<MR&t@~G=UrY$gXz%&7ywjNr4{^;
> zhUkeBNv_GwdcBU#fR}aGb&*GvlNiEzI2=6BJD<;-bT*w%OQljWnM|cpjD>1Con{3*
> zhkP!VV?G(33`!V-b7I?MGJ#_o4zUhAfK$Q=N^k#(VQ7%$2EzgFVKQHmhftDG)`1u$
> zKvE`S!3Z!k9WXZ>C#uz|tbiW{x5%(ufb+5f+g5E>zS(S;JKD#49q^wBa6qTr4uatI
> ldWB&K at qM3$FaTE&po4$&(VzoB5>7)9PFVrY(;VZm)<5J`ku3lK
> 
> -- 
> 1.8.1.4
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list