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"
16cee9dcb8377e1f85a7a232822a894464ea6ccddcreed@google.com#include "SkPaint.h"
17602a1d70257eb3fcb746d758577f042d8c94f6d9reed@google.com#include "SkScaledImageCache.h"
188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
1977613a5038ee73afa1ba245effea05c1cc9db1d4reed@google.com#define FractionalInt_IS_64BIT
204bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com
214bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com#ifdef FractionalInt_IS_64BIT
224bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    typedef SkFixed48    SkFractionalInt;
234bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    #define SkScalarToFractionalInt(x)  SkScalarToFixed48(x)
244bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    #define SkFractionalIntToFixed(x)   SkFixed48ToFixed(x)
25411215ae2b9a36ff6e262f77d7fb5071cc084f00reed@google.com    #define SkFixedToFractionalInt(x)   SkFixedToFixed48(x)
264bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    #define SkFractionalIntToInt(x)     SkFixed48ToInt(x)
274bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com#else
284bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    typedef SkFixed    SkFractionalInt;
294bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    #define SkScalarToFractionalInt(x)  SkScalarToFixed(x)
304bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    #define SkFractionalIntToFixed(x)   (x)
31411215ae2b9a36ff6e262f77d7fb5071cc084f00reed@google.com    #define SkFixedToFractionalInt(x)   (x)
324bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    #define SkFractionalIntToInt(x)     ((x) >> 16)
334bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com#endif
344bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com
358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comclass SkPaint;
36dd85088cd3c9b9890318a16f1fadb16e6d0253d0humper@google.comstruct SkConvolutionProcs;
378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comstruct SkBitmapProcState {
39fa1bd5f86ceea6cfa8303594730125ad2853d87bskia.committer@gmail.com
40602a1d70257eb3fcb746d758577f042d8c94f6d9reed@google.com    SkBitmapProcState(): fScaledCacheID(NULL), fBitmapFilter(NULL) {}
411e182253f8358ad1bc46209e84d2b4058f1f16a6reed@google.com    ~SkBitmapProcState();
42e81d1bce7e26f046b8bcdef7fcefe84eaa806a56commit-bot@chromium.org
437a99eb1c63d4327d352af09ea59f039f014e4028reed@android.com    typedef void (*ShaderProc32)(const SkBitmapProcState&, int x, int y,
447a99eb1c63d4327d352af09ea59f039f014e4028reed@android.com                                 SkPMColor[], int count);
457a99eb1c63d4327d352af09ea59f039f014e4028reed@android.com
467a99eb1c63d4327d352af09ea59f039f014e4028reed@android.com    typedef void (*ShaderProc16)(const SkBitmapProcState&, int x, int y,
477a99eb1c63d4327d352af09ea59f039f014e4028reed@android.com                                 uint16_t[], int count);
487a99eb1c63d4327d352af09ea59f039f014e4028reed@android.com
498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef void (*MatrixProc)(const SkBitmapProcState&,
508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                               uint32_t bitmapXY[],
518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                               int count,
528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                               int x, int y);
53fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef void (*SampleProc32)(const SkBitmapProcState&,
558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 const uint32_t[],
568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 int count,
578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 SkPMColor colors[]);
588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef void (*SampleProc16)(const SkBitmapProcState&,
608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 const uint32_t[],
618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 int count,
628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com                                 uint16_t colors[]);
631f3c73825b8a1752abc6b74fbce978a430de6473skia.committer@gmail.com
648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    typedef U16CPU (*FixedTileProc)(SkFixed);   // returns 0..0xFFFF
65f444e8ccda8905a8ce16bac368e09f205786db31reed@google.com    typedef U16CPU (*FixedTileLowBitsProc)(SkFixed, int);   // returns 0..0xF
6607d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    typedef U16CPU (*IntTileProc)(int value, int count);   // returns 0..count-1
677a99eb1c63d4327d352af09ea59f039f014e4028reed@android.com
689c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    const SkBitmap*     fBitmap;            // chooseProcs - orig or scaled
699c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    SkMatrix            fInvMatrix;         // chooseProcs
70eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com    SkMatrix::MapXYProc fInvProc;           // chooseProcs
71eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com
724bc0a9db18d58698057b8f38a6f21537aca4ddcfreed@google.com    SkFractionalInt     fInvSxFractionalInt;
73411215ae2b9a36ff6e262f77d7fb5071cc084f00reed@google.com    SkFractionalInt     fInvKyFractionalInt;
74fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    FixedTileProc       fTileProcX;         // chooseProcs
768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    FixedTileProc       fTileProcY;         // chooseProcs
77f444e8ccda8905a8ce16bac368e09f205786db31reed@google.com    FixedTileLowBitsProc fTileLowBitsProcX; // chooseProcs
78f444e8ccda8905a8ce16bac368e09f205786db31reed@google.com    FixedTileLowBitsProc fTileLowBitsProcY; // chooseProcs
7907d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    IntTileProc         fIntTileProcY;      // chooseProcs
808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkFixed             fFilterOneX;
818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkFixed             fFilterOneY;
821f3c73825b8a1752abc6b74fbce978a430de6473skia.committer@gmail.com
838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkPMColor           fPaintPMColor;      // chooseProcs - A8 config
84eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com    SkFixed             fInvSx;             // chooseProcs
858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    SkFixed             fInvKy;             // chooseProcs
868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    uint16_t            fAlphaScale;        // chooseProcs
878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    uint8_t             fInvType;           // chooseProcs
888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    uint8_t             fTileModeX;         // CONSTRUCTOR
898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com    uint8_t             fTileModeY;         // CONSTRUCTOR
909cfc83cc8ac2ee50a7ce889e65a707941f48bdeareed@google.com    uint8_t             fFilterLevel;       // chooseProcs
919c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
92c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com    /** Platforms implement this, and can optionally overwrite only the
93c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        following fields:
94c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com
95c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        fShaderProc32
96c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        fShaderProc16
97c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        fMatrixProc
98c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        fSampleProc32
99c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        fSampleProc32
100c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com
101c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        They will already have valid function pointers, so a platform that does
102c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        not have an accelerated version can just leave that field as is. A valid
103c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com        implementation can do nothing (see SkBitmapProcState_opts_none.cpp)
104c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com     */
105c9a1d4b519c2db8e43e54fef068c46462d2f8a4breed@android.com    void platformProcs();
1061f3c73825b8a1752abc6b74fbce978a430de6473skia.committer@gmail.com
107138ebc3e4061cf533ea2f7f3717239670fdc6e43humper@google.com    /** Platforms can also optionally overwrite the convolution functions
108138ebc3e4061cf533ea2f7f3717239670fdc6e43humper@google.com        if we have SIMD versions of them.
109138ebc3e4061cf533ea2f7f3717239670fdc6e43humper@google.com      */
1101f3c73825b8a1752abc6b74fbce978a430de6473skia.committer@gmail.com
111fed04b34315ed72dbb20e630908638d1c829c760reed@google.com    void platformConvolutionProcs(SkConvolutionProcs*);
1124c69a064b4a7a77f4b4f2e77d8a35a80fc63987creed@google.com
113258cb228c636282a3e4f4ce87b1017498e207f33reed@android.com    /** Given the byte size of the index buffer to be passed to the matrix proc,
114258cb228c636282a3e4f4ce87b1017498e207f33reed@android.com        return the maximum number of resulting pixels that can be computed
115258cb228c636282a3e4f4ce87b1017498e207f33reed@android.com        (i.e. the number of SkPMColor values to be written by the sample proc).
116258cb228c636282a3e4f4ce87b1017498e207f33reed@android.com        This routine takes into account that filtering and scale-vs-affine
117258cb228c636282a3e4f4ce87b1017498e207f33reed@android.com        affect the amount of buffer space needed.
118fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
1194c128c4917acf25c2cc5d1bd22282a4e1bb53d96reed@android.com        Only valid to call after chooseProcs (setContext) has been called. It is
1204c128c4917acf25c2cc5d1bd22282a4e1bb53d96reed@android.com        safe to call this inside the shader's shadeSpan() method.
1214c128c4917acf25c2cc5d1bd22282a4e1bb53d96reed@android.com     */
1224c128c4917acf25c2cc5d1bd22282a4e1bb53d96reed@android.com    int maxCountForBufferSize(size_t bufferSize) const;
1234c128c4917acf25c2cc5d1bd22282a4e1bb53d96reed@android.com
1249fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    // If a shader proc is present, then the corresponding matrix/sample procs
1259fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    // are ignored
1269fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    ShaderProc32 getShaderProc32() const { return fShaderProc32; }
1279fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    ShaderProc16 getShaderProc16() const { return fShaderProc16; }
1289e1ec1a52985cce9db3a0d0e8d448b82a32e70cbskia.committer@gmail.com
129b088947f27496a9b9dc48a7cfb170f9d59589825humper@google.com    SkBitmapFilter* getBitmapFilter() const { return fBitmapFilter; }
1309fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com
1319fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com#ifdef SK_DEBUG
1329fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    MatrixProc getMatrixProc() const;
1339fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com#else
1349fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    MatrixProc getMatrixProc() const { return fMatrixProc; }
1359fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com#endif
1369fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    SampleProc32 getSampleProc32() const { return fSampleProc32; }
1379fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    SampleProc16 getSampleProc16() const { return fSampleProc16; }
1389fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com
1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comprivate:
140eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com    friend class SkBitmapProcShader;
141eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com
1429fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    ShaderProc32        fShaderProc32;      // chooseProcs
1439fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    ShaderProc16        fShaderProc16;      // chooseProcs
1449fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    // These are used if the shaderproc is NULL
1459fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    MatrixProc          fMatrixProc;        // chooseProcs
1469fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    SampleProc32        fSampleProc32;      // chooseProcs
1479fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    SampleProc16        fSampleProc16;      // chooseProcs
148fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com
149eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com    SkBitmap            fOrigBitmap;        // CONSTRUCTOR
1509c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com    SkBitmap            fScaledBitmap;      // chooseProcs
151eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com
152602a1d70257eb3fcb746d758577f042d8c94f6d9reed@google.com    SkScaledImageCache::ID* fScaledCacheID;
153602a1d70257eb3fcb746d758577f042d8c94f6d9reed@google.com
15407d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    MatrixProc chooseMatrixProc(bool trivial_matrix);
155eef375bcd602adb065c4eccc07bd811b83a71de8reed@android.com    bool chooseProcs(const SkMatrix& inv, const SkPaint&);
1569a4c746a1f0f91a5be2708a4c2018dfe14f62e48reed@google.com    ShaderProc32 chooseShaderProc32();
157fa1bd5f86ceea6cfa8303594730125ad2853d87bskia.committer@gmail.com
158cee9dcb8377e1f85a7a232822a894464ea6ccddcreed@google.com    // returns false if we did not try to scale the image. In that case, we
159cee9dcb8377e1f85a7a232822a894464ea6ccddcreed@google.com    // will need to "lock" its pixels some other way.
160cee9dcb8377e1f85a7a232822a894464ea6ccddcreed@google.com    bool possiblyScaleImage();
161cee9dcb8377e1f85a7a232822a894464ea6ccddcreed@google.com
162cee9dcb8377e1f85a7a232822a894464ea6ccddcreed@google.com    // returns false if we failed to "lock" the pixels at all. Typically this
163cee9dcb8377e1f85a7a232822a894464ea6ccddcreed@google.com    // means we have to abort the shader.
164cee9dcb8377e1f85a7a232822a894464ea6ccddcreed@google.com    bool lockBaseBitmap();
1659c96d4b5ffdbf8c82f55b2058a2fea7225fe11d6humper@google.com
166138ebc3e4061cf533ea2f7f3717239670fdc6e43humper@google.com    SkBitmapFilter* fBitmapFilter;
167b0a327e9390da5865d4c56db5e5259adc3380d37skia.committer@gmail.com
1680dc546c37c7dff3885188054d191cf852d899e32mtklein@google.com    // If supported, sets fShaderProc32 and fShaderProc16 and returns true,
1690dc546c37c7dff3885188054d191cf852d899e32mtklein@google.com    // otherwise returns false.
1700dc546c37c7dff3885188054d191cf852d899e32mtklein@google.com    bool setBitmapFilterProcs();
1713e2345a8d56cb76bc43e4421a3e9e3681ecd9ebaskia.committer@gmail.com
1726bb92bc0b52d31f3ded38927cdefbeb13a3df87areed@google.com    // Return false if we failed to setup for fast translate (e.g. overflow)
1736bb92bc0b52d31f3ded38927cdefbeb13a3df87areed@google.com    bool setupForTranslate();
1749fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com
1759fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com#ifdef SK_DEBUG
1769fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com    static void DebugMatrixProc(const SkBitmapProcState&,
1779fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com                                uint32_t[], int count, int x, int y);
1789fe287bd07baa6d9e890b627c102bba562954f7dreed@google.com#endif
1798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com};
1808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com
18107d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com/*  Macros for packing and unpacking pairs of 16bit values in a 32bit uint.
18207d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    Used to allow access to a stream of uint16_t either one at a time, or
18307d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    2 at a time by unpacking a uint32_t
18407d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com */
18507d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com#ifdef SK_CPU_BENDIAN
18607d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    #define PACK_TWO_SHORTS(pri, sec) ((pri) << 16 | (sec))
18707d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    #define UNPACK_PRIMARY_SHORT(packed)    ((uint32_t)(packed) >> 16)
18807d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    #define UNPACK_SECONDARY_SHORT(packed)  ((packed) & 0xFFFF)
18907d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com#else
19007d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    #define PACK_TWO_SHORTS(pri, sec) ((pri) | ((sec) << 16))
19107d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    #define UNPACK_PRIMARY_SHORT(packed)    ((packed) & 0xFFFF)
19207d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    #define UNPACK_SECONDARY_SHORT(packed)  ((uint32_t)(packed) >> 16)
19307d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com#endif
19407d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com
19507d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com#ifdef SK_DEBUG
19607d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    static inline uint32_t pack_two_shorts(U16CPU pri, U16CPU sec) {
19707d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com        SkASSERT((uint16_t)pri == pri);
19807d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com        SkASSERT((uint16_t)sec == sec);
19907d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com        return PACK_TWO_SHORTS(pri, sec);
20007d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    }
20107d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com#else
20207d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com    #define pack_two_shorts(pri, sec)   PACK_TWO_SHORTS(pri, sec)
20307d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com#endif
20407d1f008b365e94ef7c7347be19a03d00bd36805reed@android.com
205dc7de745dd142cdc00ffed7963ebb030a0506f72senorblanco@chromium.org// These functions are generated via macros, but are exposed here so that
206dc7de745dd142cdc00ffed7963ebb030a0506f72senorblanco@chromium.org// platformProcs may test for them by name.
207dc7de745dd142cdc00ffed7963ebb030a0506f72senorblanco@chromium.orgvoid S32_opaque_D32_filter_DX(const SkBitmapProcState& s, const uint32_t xy[],
208dc7de745dd142cdc00ffed7963ebb030a0506f72senorblanco@chromium.org                              int count, SkPMColor colors[]);
209f3f0bd71b81097f6c640e7f60805de7eacbc98c6senorblanco@chromium.orgvoid S32_alpha_D32_filter_DX(const SkBitmapProcState& s, const uint32_t xy[],
210f3f0bd71b81097f6c640e7f60805de7eacbc98c6senorblanco@chromium.org                             int count, SkPMColor colors[]);
211fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.comvoid S32_opaque_D32_filter_DXDY(const SkBitmapProcState& s,
2120dc546c37c7dff3885188054d191cf852d899e32mtklein@google.com                                const uint32_t xy[], int count, SkPMColor colors[]);
213fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.comvoid S32_alpha_D32_filter_DXDY(const SkBitmapProcState& s,
2140dc546c37c7dff3885188054d191cf852d899e32mtklein@google.com                               const uint32_t xy[], int count, SkPMColor colors[]);
21506a7313430728b18f2ed92f14b189f3320fb8d13tomhudson@google.comvoid ClampX_ClampY_filter_scale(const SkBitmapProcState& s, uint32_t xy[],
21606a7313430728b18f2ed92f14b189f3320fb8d13tomhudson@google.com                                int count, int x, int y);
21706a7313430728b18f2ed92f14b189f3320fb8d13tomhudson@google.comvoid ClampX_ClampY_nofilter_scale(const SkBitmapProcState& s, uint32_t xy[],
21806a7313430728b18f2ed92f14b189f3320fb8d13tomhudson@google.com                                  int count, int x, int y);
2195efaf268931d01498f4f1af63c556d811e5d5797tomhudson@google.comvoid ClampX_ClampY_filter_affine(const SkBitmapProcState& s,
2205efaf268931d01498f4f1af63c556d811e5d5797tomhudson@google.com                                 uint32_t xy[], int count, int x, int y);
2215efaf268931d01498f4f1af63c556d811e5d5797tomhudson@google.comvoid ClampX_ClampY_nofilter_affine(const SkBitmapProcState& s,
2225efaf268931d01498f4f1af63c556d811e5d5797tomhudson@google.com                                   uint32_t xy[], int count, int x, int y);
2237866228f06e402d37f8fcab70a688e1f34c1d27breed@google.comvoid S32_D16_filter_DX(const SkBitmapProcState& s,
2240dc546c37c7dff3885188054d191cf852d899e32mtklein@google.com                       const uint32_t* xy, int count, uint16_t* colors);
225dc7de745dd142cdc00ffed7963ebb030a0506f72senorblanco@chromium.org
2260dc546c37c7dff3885188054d191cf852d899e32mtklein@google.comvoid highQualityFilter32(const SkBitmapProcState &s, int x, int y,
2270dc546c37c7dff3885188054d191cf852d899e32mtklein@google.com                         SkPMColor *SK_RESTRICT colors, int count);
2280dc546c37c7dff3885188054d191cf852d899e32mtklein@google.comvoid highQualityFilter16(const SkBitmapProcState &s, int x, int y,
2290dc546c37c7dff3885188054d191cf852d899e32mtklein@google.com                         uint16_t *SK_RESTRICT colors, int count);
2309e1ec1a52985cce9db3a0d0e8d448b82a32e70cbskia.committer@gmail.com
231b088947f27496a9b9dc48a7cfb170f9d59589825humper@google.com
2328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#endif
233