aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkBitmapProcState.cpp
diff options
context:
space:
mode:
authorGravatar fmalita <fmalita@chromium.org>2016-02-01 04:48:39 -0800
committerGravatar Commit bot <commit-bot@chromium.org>2016-02-01 04:48:39 -0800
commitd2a4271c753546c59607ad335807f5950ec96cc5 (patch)
treed3e4949d429de2f1948c864a16305b464732b6ab /src/core/SkBitmapProcState.cpp
parent2baa84b7baa39dd52ae6c19d22b88db50487fa1f (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/SkBitmapProcState.cpp')
-rw-r--r--src/core/SkBitmapProcState.cpp35
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;
}