SkGr.cpp revision 24f3ad1bbb44916cae33f5d3cf2a20af4bbc381f
1ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/*
3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2010 Google Inc.
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.
7ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */
8ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
9ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
10ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com
11ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#include "SkGr.h"
12ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
13ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com/*  Fill out buffer with the compressed format Ganesh expects from a colortable
14ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com based bitmap. [palette (colortable) + indices].
155782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com
165782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com At the moment Ganesh only supports 8bit version. If Ganesh allowed we others
17ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com we could detect that the colortable.count is <= 16, and then repack the
18ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com indices as nibbles to save RAM, but it would take more time (i.e. a lot
19ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com slower than memcpy), so skipping that for now.
205782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com
21ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com Ganesh wants a full 256 palette entry, even though Skia's ctable is only as big
22ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com as the colortable.count says it is.
23ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */
24ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comstatic void build_compressed_data(void* buffer, const SkBitmap& bitmap) {
25ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    SkASSERT(SkBitmap::kIndex8_Config == bitmap.config());
265782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com
27ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    SkAutoLockPixels apl(bitmap);
28ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    if (!bitmap.readyToDraw()) {
290c00f21fee3f5cfa3aa7e5d46ff94cb8cf340451tomhudson@google.com        SkDEBUGFAIL("bitmap not ready to draw!");
30ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        return;
31ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    }
32ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
33ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    SkColorTable* ctable = bitmap.getColorTable();
34ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    char* dst = (char*)buffer;
355782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com
36ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    memcpy(dst, ctable->lockColors(), ctable->count() * sizeof(SkPMColor));
37ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    ctable->unlockColors(false);
385782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com
39ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    // always skip a full 256 number of entries, even if we memcpy'd fewer
40fea37b5e532dfe776269253afb9951e763c3b205bsalomon@google.com    dst += kGrColorTableSize;
41ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
42ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    if (bitmap.width() == bitmap.rowBytes()) {
43ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        memcpy(dst, bitmap.getPixels(), bitmap.getSize());
44ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    } else {
45ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        // need to trim off the extra bytes per row
46ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        size_t width = bitmap.width();
47ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        size_t rowBytes = bitmap.rowBytes();
48ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        const char* src = (const char*)bitmap.getPixels();
49ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        for (int y = 0; y < bitmap.height(); y++) {
50ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com            memcpy(dst, src, width);
51ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com            src += rowBytes;
52ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com            dst += width;
53ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        }
54ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    }
55ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com}
56ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
57ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com////////////////////////////////////////////////////////////////////////////////
58ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
5924f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.comstatic GrContext::TextureCacheEntry sk_gr_create_bitmap_texture(GrContext* ctx,
6075b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com                                                uint64_t key,
611fadb20c50c2302565f73ae12057a6f5d22192c7bsalomon@google.com                                                const GrSamplerState* sampler,
6250398bf7f1953e640e5529616e710cf540799731bsalomon@google.com                                                const SkBitmap& origBitmap) {
63ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    SkAutoLockPixels alp(origBitmap);
6450398bf7f1953e640e5529616e710cf540799731bsalomon@google.com    GrContext::TextureCacheEntry entry;
6550398bf7f1953e640e5529616e710cf540799731bsalomon@google.com
66ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    if (!origBitmap.readyToDraw()) {
6750398bf7f1953e640e5529616e710cf540799731bsalomon@google.com        return entry;
68ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    }
69ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
70ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    SkBitmap tmpBitmap;
71ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
72ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    const SkBitmap* bitmap = &origBitmap;
735782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com
7475b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com    GrTextureDesc desc;
7575b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com    desc.fWidth = bitmap->width();
7675b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com    desc.fHeight = bitmap->height();
7724f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com    desc.fConfig = SkBitmapConfig2GrPixelConfig(bitmap->config());
7875b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com    desc.fClientCacheID = key;
795782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com
80ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    if (SkBitmap::kIndex8_Config == bitmap->config()) {
81ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        // build_compressed_data doesn't do npot->pot expansion
82ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        // and paletted textures can't be sub-updated
83ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        if (ctx->supportsIndex8PixelConfig(sampler,
84ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com                                           bitmap->width(), bitmap->height())) {
855782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com            size_t imagesize = bitmap->width() * bitmap->height() +
86fea37b5e532dfe776269253afb9951e763c3b205bsalomon@google.com                                kGrColorTableSize;
87ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com            SkAutoMalloc storage(imagesize);
885782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com
89ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com            build_compressed_data(storage.get(), origBitmap);
90ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
91ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com            // our compressed data will be trimmed, so pass width() for its
92ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com            // "rowBytes", since they are the same now.
934ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com
9475b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com            if (kUncached_CacheID != key) {
9575b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com                return ctx->createAndLockTexture(sampler, desc, storage.get(),
964ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com                                                 bitmap->width());
974ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com            } else {
9850398bf7f1953e640e5529616e710cf540799731bsalomon@google.com                entry = ctx->lockScratchTexture(desc,
9950398bf7f1953e640e5529616e710cf540799731bsalomon@google.com                                        GrContext::kExact_ScratchTexMatch);
1006f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com                entry.texture()->writePixels(0, 0, bitmap->width(),
1016f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com                                             bitmap->height(), desc.fConfig,
1026f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com                                             storage.get(), 0);
1034ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com                return entry;
1044ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com            }
105ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
106ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        } else {
107ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com            origBitmap.copyTo(&tmpBitmap, SkBitmap::kARGB_8888_Config);
108ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com            // now bitmap points to our temp, which has been promoted to 32bits
109ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com            bitmap = &tmpBitmap;
110ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        }
1115782d712ffc31557d0cb12d5a220cebb783f6895bsalomon@google.com    }
112ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
11324f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com    desc.fConfig = SkBitmapConfig2GrPixelConfig(bitmap->config());
11475b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com    if (kUncached_CacheID != key) {
11575b3c9633cb9a594dab0ccf51dab1e694c149a18robertphillips@google.com        return ctx->createAndLockTexture(sampler, desc,
11650398bf7f1953e640e5529616e710cf540799731bsalomon@google.com                                         bitmap->getPixels(),
11750398bf7f1953e640e5529616e710cf540799731bsalomon@google.com                                         bitmap->rowBytes());
1184ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com    } else {
11950398bf7f1953e640e5529616e710cf540799731bsalomon@google.com        entry = ctx->lockScratchTexture(desc,
12050398bf7f1953e640e5529616e710cf540799731bsalomon@google.com                                        GrContext::kExact_ScratchTexMatch);
1216f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com        entry.texture()->writePixels(0, 0,
1226f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com                                     bitmap->width(), bitmap->height(),
1236f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com                                     desc.fConfig,
1246f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com                                     bitmap->getPixels(),
1256f3795105b2b458079e53a721c1735c9518f6bb5bsalomon@google.com                                     bitmap->rowBytes());
1264ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com        return entry;
1274ee7ae5dcfe2055cfcfc21bf2cec1d790330eb4ajunov@google.com    }
128ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com}
129ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
130ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com///////////////////////////////////////////////////////////////////////////////
131ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
13224f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.comGrContext::TextureCacheEntry GrLockCachedBitmapTexture(GrContext* ctx,
13324f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com                      const SkBitmap& bitmap, const GrSamplerState* sampler) {
13424f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com    GrContext::TextureCacheEntry entry;
13524f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com
13624f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com    if (!bitmap.isVolatile()) {
13724f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com        uint64_t key = bitmap.getGenerationID();
13824f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com        key |= ((uint64_t) bitmap.pixelRefOffset()) << 32;
13924f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com
14024f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com        GrTextureDesc desc;
14124f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com        desc.fWidth = bitmap.width();
14224f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com        desc.fHeight = bitmap.height();
14324f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com        desc.fConfig = SkBitmapConfig2GrPixelConfig(bitmap.config());
14424f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com        desc.fClientCacheID = key;
14524f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com
14624f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com        entry = ctx->findAndLockTexture(desc, sampler);
14724f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com        if (NULL == entry.texture()) {
14824f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com            entry = sk_gr_create_bitmap_texture(ctx, key, sampler,
14924f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com                                                bitmap);
15024f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com        }
15124f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com    } else {
15224f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com        entry = sk_gr_create_bitmap_texture(ctx, kUncached_CacheID,
15324f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com                                            sampler, bitmap);
15424f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com    }
15524f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com    if (NULL == entry.texture()) {
15624f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com        GrPrintf("---- failed to create texture for cache [%d %d]\n",
15724f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com                    bitmap.width(), bitmap.height());
15824f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com    }
15924f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com    return entry;
16024f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com}
16124f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com
16224f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.comvoid GrUnlockCachedBitmapTexture(GrContext* ctx, GrContext::TextureCacheEntry cache) {
16324f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com    ctx->unlockTexture(cache);
16424f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com}
16524f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com
16624f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com///////////////////////////////////////////////////////////////////////////////
16724f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.com
168d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.comvoid SkGrClipIterator::reset(const SkClipStack& clipStack) {
169d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    fClipStack = &clipStack;
170d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    fIter.reset(clipStack);
171d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    // Gr has no notion of replace, skip to the
172d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    // last replace in the clip stack.
173d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    int lastReplace = 0;
174d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    int curr = 0;
175d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    while (NULL != (fCurr = fIter.next())) {
176d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com        if (SkRegion::kReplace_Op == fCurr->fOp) {
177d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com            lastReplace = curr;
178d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com        }
179d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com        ++curr;
180d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    }
181d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    fIter.reset(clipStack);
182d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    for (int i = 0; i < lastReplace+1; ++i) {
183d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com        fCurr = fIter.next();
184d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    }
185d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com}
186d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com
187d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.comGrClipType SkGrClipIterator::getType() const {
188d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    GrAssert(!this->isDone());
1897b11807968d74bf08cabbb6fcb03daabf234711fscroggo    if (NULL == fCurr->fPath) {
190d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com        return kRect_ClipType;
191ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    } else {
192d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com        return kPath_ClipType;
193d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    }
194d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com}
195d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com
1960f191f30af7c067883c97b034baf70bfd92f5ea0robertphillips@google.comSkRegion::Op SkGrClipIterator::getOp() const {
197d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    // we skipped to the last "replace" op
198d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    // when this iter was reset.
199d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    // GrClip doesn't allow replace, so treat it as
200d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    // intersect.
2010f191f30af7c067883c97b034baf70bfd92f5ea0robertphillips@google.com    if (SkRegion::kReplace_Op == fCurr->fOp) {
2020f191f30af7c067883c97b034baf70bfd92f5ea0robertphillips@google.com        return SkRegion::kIntersect_Op;
2030f191f30af7c067883c97b034baf70bfd92f5ea0robertphillips@google.com    }
2040f191f30af7c067883c97b034baf70bfd92f5ea0robertphillips@google.com
2050f191f30af7c067883c97b034baf70bfd92f5ea0robertphillips@google.com    return fCurr->fOp;
2060f191f30af7c067883c97b034baf70bfd92f5ea0robertphillips@google.com
207d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com}
208d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com
209fa1d29112d44d0728cd10e2ff1f8982240303272robertphillips@google.combool SkGrClipIterator::getDoAA() const {
210fa1d29112d44d0728cd10e2ff1f8982240303272robertphillips@google.com    return fCurr->fDoAA;
211fa1d29112d44d0728cd10e2ff1f8982240303272robertphillips@google.com}
212fa1d29112d44d0728cd10e2ff1f8982240303272robertphillips@google.com
213d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.comGrPathFill SkGrClipIterator::getPathFill() const {
214d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com    switch (fCurr->fPath->getFillType()) {
215d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com        case SkPath::kWinding_FillType:
21647059542e7aa153926377456a6c611e55c8e428cbsalomon@google.com            return kWinding_GrPathFill;
217d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com        case SkPath::kEvenOdd_FillType:
21847059542e7aa153926377456a6c611e55c8e428cbsalomon@google.com            return  kEvenOdd_GrPathFill;
219d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com        case SkPath::kInverseWinding_FillType:
22047059542e7aa153926377456a6c611e55c8e428cbsalomon@google.com            return kInverseWinding_GrPathFill;
221d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com        case SkPath::kInverseEvenOdd_FillType:
22247059542e7aa153926377456a6c611e55c8e428cbsalomon@google.com            return kInverseEvenOdd_GrPathFill;
223d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com        default:
224d302f1401b3c9aea094804bad4e76de98782cfe8bsalomon@google.com            GrCrash("Unsupported path fill in clip.");
22547059542e7aa153926377456a6c611e55c8e428cbsalomon@google.com            return kWinding_GrPathFill; // suppress warning
226ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    }
227ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com}
228ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
229ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com///////////////////////////////////////////////////////////////////////////////
230ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
23124f3ad1bbb44916cae33f5d3cf2a20af4bbc381frileya@google.comGrPixelConfig SkBitmapConfig2GrPixelConfig(SkBitmap::Config config) {
232ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    switch (config) {
233ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        case SkBitmap::kA8_Config:
234669fdc4ed8ed461a141cb97d0afdd9ef72a82be1bsalomon@google.com            return kAlpha_8_GrPixelConfig;
235ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        case SkBitmap::kIndex8_Config:
236669fdc4ed8ed461a141cb97d0afdd9ef72a82be1bsalomon@google.com            return kIndex_8_GrPixelConfig;
237ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        case SkBitmap::kRGB_565_Config:
238669fdc4ed8ed461a141cb97d0afdd9ef72a82be1bsalomon@google.com            return kRGB_565_GrPixelConfig;
239ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        case SkBitmap::kARGB_4444_Config:
240669fdc4ed8ed461a141cb97d0afdd9ef72a82be1bsalomon@google.com            return kRGBA_4444_GrPixelConfig;
241ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        case SkBitmap::kARGB_8888_Config:
242c43649962221c348d656d425a3fa9b29c78231d4bsalomon@google.com            return kSkia8888_PM_GrPixelConfig;
243ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com        default:
244a1e5795279bd085496fa04c59e588f440bf30457robertphillips@google.com            // kNo_Config, kA1_Config missing, and kRLE_Index8_Config
245669fdc4ed8ed461a141cb97d0afdd9ef72a82be1bsalomon@google.com            return kUnknown_GrPixelConfig;
246ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com    }
247ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com}
248ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com
249