SkBitmapProcState.h revision fa1bd5f86ceea6cfa8303594730125ad2853d87b
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
28a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2007 The Android Open Source Project
4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com *
5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be
6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file.
7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */
8ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#ifndef SkBitmapProcState_DEFINED
118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#define SkBitmapProcState_DEFINED
128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkBitmap.h"
14b088947f27496a9b9dc48a7cfb170f9d59589825humper@google.com#include "SkBitmapFilter.h"
158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkMatrix.h"
168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1777613a5038ee73afa1ba245effea05c1cc9db1d4reed@google.com#define FractionalInt_IS_64BIT
184bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com
194bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com#ifdef FractionalInt_IS_64BIT
204bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    typedef SkFixed48    SkFractionalInt;
214bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    #define SkScalarToFractionalInt(x)  SkScalarToFixed48(x)
224bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    #define SkFractionalIntToFixed(x)   SkFixed48ToFixed(x)
23411215ae2b9a36ff6e262f77d7fb5071cc084f00reed@google.com    #define SkFixedToFractionalInt(x)   SkFixedToFixed48(x)
244bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    #define SkFractionalIntToInt(x)     SkFixed48ToInt(x)
254bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com#else
264bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    typedef SkFixed    SkFractionalInt;
274bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    #define SkScalarToFractionalInt(x)  SkScalarToFixed(x)
284bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    #define SkFractionalIntToFixed(x)   (x)
29411215ae2b9a36ff6e262f77d7fb5071cc084f00reed@google.com    #define SkFixedToFractionalInt(x)   (x)
304bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    #define SkFractionalIntToInt(x)     ((x) >> 16)
314bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com#endif
324bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com
338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkPaint;
348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstruct SkBitmapProcState {
36fa1bd5f86ceea6cfa8303594730125ad2853d87bskia.committer@gmail.com
37e81d1bce7e26f046b8bcdef7fcefe84eaa806a56commit-bot@chromium.org    SkBitmapProcState(): fBitmapFilter(NULL) {}
38e81d1bce7e26f046b8bcdef7fcefe84eaa806a56commit-bot@chromium.org    ~SkBitmapProcState() {
39e81d1bce7e26f046b8bcdef7fcefe84eaa806a56commit-bot@chromium.org        SkDELETE(fBitmapFilter);
40e81d1bce7e26f046b8bcdef7fcefe84eaa806a56commit-bot@chromium.org    }
41e81d1bce7e26f046b8bcdef7fcefe84eaa806a56commit-bot@chromium.org
427a99eb1c63d4327d352af09ea59f039f014e4028reed@android.com    typedef void (*ShaderProc32)(const SkBitmapProcState&, int x, int y,
437a99eb1c63d4327d352af09ea59f039f014e4028reed@android.com                                 SkPMColor[], int count);
447a99eb1c63d4327d352af09ea59f039f014e4028reed@android.com
457a99eb1c63d4327d352af09ea59f039f014e4028reed@android.com    typedef void (*ShaderProc16)(const SkBitmapProcState&, int x, int y,
467a99eb1c63d4327d352af09ea59f039f014e4028reed@android.com                                 uint16_t[], int count);
477a99eb1c63d4327d352af09ea59f039f014e4028reed@android.com
488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef void (*MatrixProc)(const SkBitmapProcState&,
498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                               uint32_t bitmapXY[],
508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                               int count,
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                               int x, int y);
52fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef void (*SampleProc32)(const SkBitmapProcState&,
548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 const uint32_t[],
558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 int count,
568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 SkPMColor colors[]);
578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef void (*SampleProc16)(const SkBitmapProcState&,
598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 const uint32_t[],
608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 int count,
618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 uint16_t colors[]);
62fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef U16CPU (*FixedTileProc)(SkFixed);   // returns 0..0xFFFF
64f444e8ccda8905a8ce16bac368e09f205786db31reed@google.com    typedef U16CPU (*FixedTileLowBitsProc)(SkFixed, int);   // returns 0..0xF
6507d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    typedef U16CPU (*IntTileProc)(int value, int count);   // returns 0..count-1
667a99eb1c63d4327d352af09ea59f039f014e4028reed@android.com
67d64d8a905a044204c5960e29cdf8adf1f130edcehumper@google.com    const SkBitmap*     fBitmap;            // chooseProcs - orig or scaled
68d64d8a905a044204c5960e29cdf8adf1f130edcehumper@google.com    SkMatrix            fInvMatrix;         // chooseProcs
69eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com    SkMatrix::MapXYProc fInvProc;           // chooseProcs
70eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com
714bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    SkFractionalInt     fInvSxFractionalInt;
72411215ae2b9a36ff6e262f77d7fb5071cc084f00reed@google.com    SkFractionalInt     fInvKyFractionalInt;
73fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    FixedTileProc       fTileProcX;         // chooseProcs
758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    FixedTileProc       fTileProcY;         // chooseProcs
76f444e8ccda8905a8ce16bac368e09f205786db31reed@google.com    FixedTileLowBitsProc fTileLowBitsProcX; // chooseProcs
77f444e8ccda8905a8ce16bac368e09f205786db31reed@google.com    FixedTileLowBitsProc fTileLowBitsProcY; // chooseProcs
7807d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    IntTileProc         fIntTileProcY;      // chooseProcs
798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkFixed             fFilterOneX;
808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkFixed             fFilterOneY;
818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkPMColor           fPaintPMColor;      // chooseProcs - A8 config
83eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com    SkFixed             fInvSx;             // chooseProcs
848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkFixed             fInvKy;             // chooseProcs
858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    uint16_t            fAlphaScale;        // chooseProcs
868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    uint8_t             fInvType;           // chooseProcs
878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    uint8_t             fTileModeX;         // CONSTRUCTOR
888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    uint8_t             fTileModeY;         // CONSTRUCTOR
89fa1bd5f86ceea6cfa8303594730125ad2853d87bskia.committer@gmail.com
90fa1bd5f86ceea6cfa8303594730125ad2853d87bskia.committer@gmail.com    enum {
91fa1bd5f86ceea6cfa8303594730125ad2853d87bskia.committer@gmail.com        kNone_BitmapFilter,
92fa1bd5f86ceea6cfa8303594730125ad2853d87bskia.committer@gmail.com        kBilerp_BitmapFilter,
93d64d8a905a044204c5960e29cdf8adf1f130edcehumper@google.com        kHQ_BitmapFilter
94d64d8a905a044204c5960e29cdf8adf1f130edcehumper@google.com    } fFilterQuality;          // chooseProcs
95d64d8a905a044204c5960e29cdf8adf1f130edcehumper@google.com
96d64d8a905a044204c5960e29cdf8adf1f130edcehumper@google.com    /** The shader will let us know when we can release some of our resources
97d64d8a905a044204c5960e29cdf8adf1f130edcehumper@google.com      * like scaled bitmaps.
98d64d8a905a044204c5960e29cdf8adf1f130edcehumper@google.com      */
99d64d8a905a044204c5960e29cdf8adf1f130edcehumper@google.com
100d64d8a905a044204c5960e29cdf8adf1f130edcehumper@google.com    void endContext();
1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
102c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com    /** Platforms implement this, and can optionally overwrite only the
103c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        following fields:
104c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com
105c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        fShaderProc32
106c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        fShaderProc16
107c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        fMatrixProc
108c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        fSampleProc32
109c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        fSampleProc32
110c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com
111c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        They will already have valid function pointers, so a platform that does
112c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        not have an accelerated version can just leave that field as is. A valid
113c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        implementation can do nothing (see SkBitmapProcState_opts_none.cpp)
114c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com     */
115c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com    void platformProcs();
116c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com
1174c69a064b4a7a77f4b4f2e77d8a35a80fc63987creed@google.com
118258cb228c636282a3e4f4ce87b1017498e207f33reed@android.com    /** Given the byte size of the index buffer to be passed to the matrix proc,
119258cb228c636282a3e4f4ce87b1017498e207f33reed@android.com        return the maximum number of resulting pixels that can be computed
120258cb228c636282a3e4f4ce87b1017498e207f33reed@android.com        (i.e. the number of SkPMColor values to be written by the sample proc).
121258cb228c636282a3e4f4ce87b1017498e207f33reed@android.com        This routine takes into account that filtering and scale-vs-affine
122258cb228c636282a3e4f4ce87b1017498e207f33reed@android.com        affect the amount of buffer space needed.
123fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
1244c128c4917acf25c2cc5d1bd22282a4e1bb53d96reed@android.com        Only valid to call after chooseProcs (setContext) has been called. It is
1254c128c4917acf25c2cc5d1bd22282a4e1bb53d96reed@android.com        safe to call this inside the shader's shadeSpan() method.
1264c128c4917acf25c2cc5d1bd22282a4e1bb53d96reed@android.com     */
1274c128c4917acf25c2cc5d1bd22282a4e1bb53d96reed@android.com    int maxCountForBufferSize(size_t bufferSize) const;
1284c128c4917acf25c2cc5d1bd22282a4e1bb53d96reed@android.com
1299fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    // If a shader proc is present, then the corresponding matrix/sample procs
1309fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    // are ignored
1319fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    ShaderProc32 getShaderProc32() const { return fShaderProc32; }
1329fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    ShaderProc16 getShaderProc16() const { return fShaderProc16; }
1339e1ec1a52985cce9db3a0d0e8d448b82a32e70cbskia.committer@gmail.com
134b088947f27496a9b9dc48a7cfb170f9d59589825humper@google.com    SkBitmapFilter* getBitmapFilter() const { return fBitmapFilter; }
1359fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com
1369fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com#ifdef SK_DEBUG
1379fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    MatrixProc getMatrixProc() const;
1389fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com#else
1399fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    MatrixProc getMatrixProc() const { return fMatrixProc; }
1409fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com#endif
1419fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    SampleProc32 getSampleProc32() const { return fSampleProc32; }
1429fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    SampleProc16 getSampleProc16() const { return fSampleProc16; }
1439fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com
1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
145eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com    friend class SkBitmapProcShader;
146eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com
1479fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    ShaderProc32        fShaderProc32;      // chooseProcs
1489fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    ShaderProc16        fShaderProc16;      // chooseProcs
1499fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    // These are used if the shaderproc is NULL
1509fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    MatrixProc          fMatrixProc;        // chooseProcs
1519fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    SampleProc32        fSampleProc32;      // chooseProcs
1529fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    SampleProc16        fSampleProc16;      // chooseProcs
153fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
154eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com    SkBitmap            fOrigBitmap;        // CONSTRUCTOR
155d64d8a905a044204c5960e29cdf8adf1f130edcehumper@google.com    SkBitmap            fScaledBitmap;      // chooseProcs
156eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com
15707d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    MatrixProc chooseMatrixProc(bool trivial_matrix);
158eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com    bool chooseProcs(const SkMatrix& inv, const SkPaint&);
1599a4c746a1f0f91a5be2708a4c2018dfe14f62e48reed@google.com    ShaderProc32 chooseShaderProc32();
160fa1bd5f86ceea6cfa8303594730125ad2853d87bskia.committer@gmail.com
161d64d8a905a044204c5960e29cdf8adf1f130edcehumper@google.com    void possiblyScaleImage();
1629e1ec1a52985cce9db3a0d0e8d448b82a32e70cbskia.committer@gmail.com
163b088947f27496a9b9dc48a7cfb170f9d59589825humper@google.com    SkBitmapFilter *fBitmapFilter;
164b0a327e9390da5865d4c56db5e5259adc3380d37skia.committer@gmail.com
165d64d8a905a044204c5960e29cdf8adf1f130edcehumper@google.com    ShaderProc32 chooseBitmapFilterProc();
1663e2345a8d56cb76bc43e4421a3e9e3681ecd9ebaskia.committer@gmail.com
1676bb92bc0b52d31f3ded38927cdefbeb13a3df87areed@google.com    // Return false if we failed to setup for fast translate (e.g. overflow)
1686bb92bc0b52d31f3ded38927cdefbeb13a3df87areed@google.com    bool setupForTranslate();
1699fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com
1709fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com#ifdef SK_DEBUG
1719fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    static void DebugMatrixProc(const SkBitmapProcState&,
1729fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com                                uint32_t[], int count, int x, int y);
1739fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com#endif
1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
1758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
17607d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com/*  Macros for packing and unpacking pairs of 16bit values in a 32bit uint.
17707d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    Used to allow access to a stream of uint16_t either one at a time, or
17807d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    2 at a time by unpacking a uint32_t
17907d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com */
18007d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com#ifdef SK_CPU_BENDIAN
18107d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    #define PACK_TWO_SHORTS(pri, sec) ((pri) << 16 | (sec))
18207d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    #define UNPACK_PRIMARY_SHORT(packed)    ((uint32_t)(packed) >> 16)
18307d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    #define UNPACK_SECONDARY_SHORT(packed)  ((packed) & 0xFFFF)
18407d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com#else
18507d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    #define PACK_TWO_SHORTS(pri, sec) ((pri) | ((sec) << 16))
18607d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    #define UNPACK_PRIMARY_SHORT(packed)    ((packed) & 0xFFFF)
18707d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    #define UNPACK_SECONDARY_SHORT(packed)  ((uint32_t)(packed) >> 16)
18807d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com#endif
18907d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com
19007d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com#ifdef SK_DEBUG
19107d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    static inline uint32_t pack_two_shorts(U16CPU pri, U16CPU sec) {
19207d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com        SkASSERT((uint16_t)pri == pri);
19307d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com        SkASSERT((uint16_t)sec == sec);
19407d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com        return PACK_TWO_SHORTS(pri, sec);
19507d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    }
19607d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com#else
19707d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    #define pack_two_shorts(pri, sec)   PACK_TWO_SHORTS(pri, sec)
19807d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com#endif
19907d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com
200dc7de745dd142cdc00ffed7963ebb030a0506f72senorblanco@chromium.org// These functions are generated via macros, but are exposed here so that
201dc7de745dd142cdc00ffed7963ebb030a0506f72senorblanco@chromium.org// platformProcs may test for them by name.
202dc7de745dd142cdc00ffed7963ebb030a0506f72senorblanco@chromium.orgvoid S32_opaque_D32_filter_DX(const SkBitmapProcState& s, const uint32_t xy[],
203dc7de745dd142cdc00ffed7963ebb030a0506f72senorblanco@chromium.org                              int count, SkPMColor colors[]);
204f3f0bd71b81097f6c640e7f60805de7eacbc98c6senorblanco@chromium.orgvoid S32_alpha_D32_filter_DX(const SkBitmapProcState& s, const uint32_t xy[],
205f3f0bd71b81097f6c640e7f60805de7eacbc98c6senorblanco@chromium.org                             int count, SkPMColor colors[]);
206fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.comvoid S32_opaque_D32_filter_DXDY(const SkBitmapProcState& s,
207fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com                           const uint32_t xy[], int count, SkPMColor colors[]);
208fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.comvoid S32_alpha_D32_filter_DXDY(const SkBitmapProcState& s,
209ae29b88deff836d0768f26c5cd76744f39dc5887tomhudson@google.com                           const uint32_t xy[], int count, SkPMColor colors[]);
21006a7313430728b18f2ed92f14b189f3320fb8d13tomhudson@google.comvoid ClampX_ClampY_filter_scale(const SkBitmapProcState& s, uint32_t xy[],
21106a7313430728b18f2ed92f14b189f3320fb8d13tomhudson@google.com                                int count, int x, int y);
21206a7313430728b18f2ed92f14b189f3320fb8d13tomhudson@google.comvoid ClampX_ClampY_nofilter_scale(const SkBitmapProcState& s, uint32_t xy[],
21306a7313430728b18f2ed92f14b189f3320fb8d13tomhudson@google.com                                  int count, int x, int y);
2145efaf268931d01498f4f1af63c556d811e5d5797tomhudson@google.comvoid ClampX_ClampY_filter_affine(const SkBitmapProcState& s,
2155efaf268931d01498f4f1af63c556d811e5d5797tomhudson@google.com                                 uint32_t xy[], int count, int x, int y);
2165efaf268931d01498f4f1af63c556d811e5d5797tomhudson@google.comvoid ClampX_ClampY_nofilter_affine(const SkBitmapProcState& s,
2175efaf268931d01498f4f1af63c556d811e5d5797tomhudson@google.com                                   uint32_t xy[], int count, int x, int y);
2187866228f06e402d37f8fcab70a688e1f34c1d27breed@google.comvoid S32_D16_filter_DX(const SkBitmapProcState& s,
2197866228f06e402d37f8fcab70a688e1f34c1d27breed@google.com                                   const uint32_t* xy, int count, uint16_t* colors);
220dc7de745dd142cdc00ffed7963ebb030a0506f72senorblanco@chromium.org
221b088947f27496a9b9dc48a7cfb170f9d59589825humper@google.comvoid highQualityFilter_ScaleOnly(const SkBitmapProcState &s, int x, int y,
222b088947f27496a9b9dc48a7cfb170f9d59589825humper@google.com                             SkPMColor *SK_RESTRICT colors, int count);
223b088947f27496a9b9dc48a7cfb170f9d59589825humper@google.comvoid highQualityFilter(const SkBitmapProcState &s, int x, int y,
224b088947f27496a9b9dc48a7cfb170f9d59589825humper@google.com                   SkPMColor *SK_RESTRICT colors, int count);
2259e1ec1a52985cce9db3a0d0e8d448b82a32e70cbskia.committer@gmail.com
226b088947f27496a9b9dc48a7cfb170f9d59589825humper@google.com
2278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
228