diff options
author | fmalita <fmalita@chromium.org> | 2016-02-01 04:48:39 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-01 04:48:39 -0800 |
commit | d2a4271c753546c59607ad335807f5950ec96cc5 (patch) | |
tree | d3e4949d429de2f1948c864a16305b464732b6ab /src/core | |
parent | 2baa84b7baa39dd52ae6c19d22b88db50487fa1f (diff) |
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
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/SkBitmapProcState.cpp | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/src/core/SkBitmapProcState.cpp b/src/core/SkBitmapProcState.cpp index fb2834d531..163bc88aff 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; } |