diff options
author | fmalita <fmalita@chromium.org> | 2016-02-03 05:44:21 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-02-03 05:44:21 -0800 |
commit | 2404f03413bc9b4fa3f556c64642e57507092d8d (patch) | |
tree | de08b8a947abd698523fb3712b27edf265cd4d59 /src/core/SkBitmapProcState_shaderproc.h | |
parent | 15691a055db9b68c9b48f589e48d8a85888cf83f (diff) |
Use SkBitmapProcStateAutoMapper for filter samplers also
Observation: filter procs are also biased by s.fFilterOne{X,Y} / 2. They all do
something along these lines:
s.fInvProc(s.fInvMatrix,
SkIntToScalar(x) + SK_ScalarHalf,
SkIntToScalar(y) + SK_ScalarHalf, &srcPt);
SkFixed fx = SkScalarToFixed(srcPt.fX) - (s.fFilterOneX >> 1);
SkFixed fy = SkScalarToFixed(srcPt.fY) - (s.fFilterOneX >> 1);
It's trivial to extend SkBitmapProcStateAutoMapper to handle this internally, and
convert everyone off explicit mapping.
R=reed@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search2?unt=true&query=source_type%3Dgm&master=false&issue=1661613002
CQ_EXTRA_TRYBOTS=client.skia:Test-Ubuntu-GCC-GCE-CPU-AVX2-x86_64-Release-SKNX_NO_SIMD-Trybot
Review URL: https://codereview.chromium.org/1661613002
Diffstat (limited to 'src/core/SkBitmapProcState_shaderproc.h')
-rw-r--r-- | src/core/SkBitmapProcState_shaderproc.h | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/src/core/SkBitmapProcState_shaderproc.h b/src/core/SkBitmapProcState_shaderproc.h index d41ff063e4..1ff2e6bf24 100644 --- a/src/core/SkBitmapProcState_shaderproc.h +++ b/src/core/SkBitmapProcState_shaderproc.h @@ -31,10 +31,8 @@ void SCALE_FILTER_NAME(const void* sIn, int x, int y, SkPMColor* SK_RESTRICT col unsigned subY; { - SkPoint pt; - s.fInvProc(s.fInvMatrix, SkIntToScalar(x) + SK_ScalarHalf, - SkIntToScalar(y) + SK_ScalarHalf, &pt); - SkFixed fy = SkScalarToFixed(pt.fY) - (s.fFilterOneY >> 1); + const SkBitmapProcStateAutoMapper mapper(s, x, y); + SkFixed fy = SkFractionalIntToFixed(mapper.y()); const unsigned maxY = s.fPixmap.height() - 1; // compute our two Y values up front subY = TILEY_LOW_BITS(fy, maxY); @@ -46,7 +44,7 @@ void SCALE_FILTER_NAME(const void* sIn, int x, int y, SkPMColor* SK_RESTRICT col row0 = (const SRCTYPE*)(srcAddr + y0 * rb); row1 = (const SRCTYPE*)(srcAddr + y1 * rb); // now initialize fx - fx = SkScalarToFixed(pt.fX) - (oneX >> 1); + fx = SkFractionalIntToFixed(mapper.x()); } #ifdef PREAMBLE |