From: fmalita Date: Mon, 1 Feb 2016 12:48:39 +0000 (-0800) Subject: Fix S32_D32_constX_shaderproc assert X-Git-Tag: accepted/tizen/5.0/unified/20181102.025319~129^2~2313 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d2a4271c753546c59607ad335807f5950ec96cc5;p=platform%2Fupstream%2FlibSkiaSharp.git Fix S32_D32_constX_shaderproc assert After https://crrev.com/1642273002, fFilterOneY includes a rounding bias which is not accounted for in the debug-mode S32_D32_constX_shaderproc check. Update the S32_D32_constX_shaderproc assert to use the (biased) SkBitmapProcStateAutoMapper utility. GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1655823002 R=reed@google.com BUG=skia:4874 Review URL: https://codereview.chromium.org/1655823002 --- diff --git a/src/core/SkBitmapProcState.cpp b/src/core/SkBitmapProcState.cpp index fb2834d..163bc88 100644 --- a/src/core/SkBitmapProcState.cpp +++ b/src/core/SkBitmapProcState.cpp @@ -492,6 +492,7 @@ static void S32_D32_constX_shaderproc(const void* sIn, int yTemp; if (s.fInvType > SkMatrix::kTranslate_Mask) { + // TODO(fmalita): looks like another SkBitmapProcStateAutoMapper customer SkPoint pt; s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, @@ -525,31 +526,35 @@ static void S32_D32_constX_shaderproc(const void* sIn, break; } -// http://code.google.com/p/skia/issues/detail?id=4874 -#ifdef DISABLED_SK_DEBUG +#ifdef SK_DEBUG { - SkPoint pt; - s.fInvProc(s.fInvMatrix, - SkIntToScalar(x) + SK_ScalarHalf, - SkIntToScalar(y) + SK_ScalarHalf, - &pt); - if (s.fInvType > SkMatrix::kTranslate_Mask && - (SkShader::kClamp_TileMode != s.fTileModeX || - SkShader::kClamp_TileMode != s.fTileModeY)) { - pt.fY *= s.fPixmap.height(); - } int iY2; + if (s.fInvType > SkMatrix::kTranslate_Mask) { + SkPoint pt; + s.fInvProc(s.fInvMatrix, + SkIntToScalar(x) + SK_ScalarHalf, + SkIntToScalar(y) + SK_ScalarHalf, + &pt); + if (SkShader::kClamp_TileMode != s.fTileModeX || + SkShader::kClamp_TileMode != s.fTileModeY) { + pt.fY *= s.fPixmap.height(); + } + iY2 = SkScalarFloorToInt(pt.fY); + } else { + const SkBitmapProcStateAutoMapper mapper(s, x, y); + iY2 = SkFractionalIntToInt(mapper.y()); + } switch (s.fTileModeY) { case SkShader::kClamp_TileMode: - iY2 = SkClampMax(SkScalarFloorToInt(pt.fY), stopY-1); + iY2 = SkClampMax(iY2, stopY-1); break; case SkShader::kRepeat_TileMode: - iY2 = sk_int_mod(SkScalarFloorToInt(pt.fY), stopY); + iY2 = sk_int_mod(iY2, stopY); break; case SkShader::kMirror_TileMode: default: - iY2 = sk_int_mirror(SkScalarFloorToInt(pt.fY), stopY); + iY2 = sk_int_mirror(iY2, stopY); break; }