1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2010 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */ 7ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 8ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#ifndef SkGpuDevice_DEFINED 9ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#define SkGpuDevice_DEFINED 10ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 11ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#include "SkGr.h" 12af951c9bc4cbb6e60b430194fe5127ebe99c53fbreed@google.com#include "SkBitmap.h" 13c5e641cc9947b8b2d3c63f908c7b98fa5b3d0f07Mike Reed#include "SkClipStackDevice.h" 14145d1c0fdcef63991d7f910cc067a653a8aa2c4ccommit-bot@chromium.org#include "SkPicture.h" 15ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#include "SkRegion.h" 16afe3005be3392e43bc51eb7eb2017eefaed85ad1bsalomon#include "SkSurface.h" 17c6f411e72b1fea6608f540f64a57bcacbe3378cdcsmartdalton#include "GrClipStackClip.h" 181105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman#include "GrRenderTargetContext.h" 1950398bf7f1953e640e5529616e710cf540799731bsalomon@google.com#include "GrContext.h" 20afbf2d6273cd22c683f20a7e5773843876af3085bsalomon#include "GrSurfacePriv.h" 219a1ed5d81dbfc7d5b67b568dfe12b4033a9af154erikchen#include "GrTypes.h" 22ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 2364bf76722ef06eabf51b55afda9f4ff431e41460robertphillipsclass GrAccelData; 24b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomonclass GrTextureProducer; 2564bf76722ef06eabf51b55afda9f4ff431e41460robertphillipsstruct GrCachedLayer; 26ddf2bfb190b2760ef6d28efe2cdc16c68287553dcommit-bot@chromium.org 27970587bf0ed73807632be7b0f349a96995cee4ecrobertphillipsclass SkSpecialImage; 28970587bf0ed73807632be7b0f349a96995cee4ecrobertphillips 29ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com/** 3089443aba5bfa2b040dc9fd24938b7d0b3decd737reed * Subclass of SkBaseDevice, which directs all drawing to the GrGpu owned by the 31ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com * canvas. 32ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com */ 33c5e641cc9947b8b2d3c63f908c7b98fa5b3d0f07Mike Reedclass SK_API SkGpuDevice : public SkClipStackDevice { 34ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.compublic: 3574f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon enum InitContents { 3674f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon kClear_InitContents, 3774f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon kUninit_InitContents 38d8a57af725e8fa8905207df3cf7465be50598752commit-bot@chromium.org }; 39123ac1d4eab757052407064623643fdc59f85363bsalomon@google.com 40123ac1d4eab757052407064623643fdc59f85363bsalomon@google.com /** 411105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman * Creates an SkGpuDevice from a GrRenderTargetContext whose backing width/height is 42d0d37cace08f12abf8d316e6949e947551d418e6senorblanco * different than its actual width/height (e.g., approx-match scratch texture). 43d0d37cace08f12abf8d316e6949e947551d418e6senorblanco */ 449fab7e98d711968df3ec4fd2f3fe5c40820b2a0dRobert Phillips static sk_sp<SkGpuDevice> Make(GrContext*, sk_sp<GrRenderTargetContext> renderTargetContext, 459fab7e98d711968df3ec4fd2f3fe5c40820b2a0dRobert Phillips int width, int height, InitContents); 46d0d37cace08f12abf8d316e6949e947551d418e6senorblanco 47d0d37cace08f12abf8d316e6949e947551d418e6senorblanco /** 48afe3005be3392e43bc51eb7eb2017eefaed85ad1bsalomon * New device that will create an offscreen renderTarget based on the ImageInfo and 49afe3005be3392e43bc51eb7eb2017eefaed85ad1bsalomon * sampleCount. The Budgeted param controls whether the device's backing store counts against 5096fcdcc219d2a0d3579719b84b28bede76efba64halcanary * the resource cache budget. On failure, returns nullptr. 510ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips * This entry point creates a kExact backing store. It is used when creating SkGpuDevices 520ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips * for SkSurfaces. 5315a140599942f70e47380e3f700a825c7cece3b4commit-bot@chromium.org */ 5424e912869499352e8947d3943acb43edd7ffded6robertphillips static sk_sp<SkGpuDevice> Make(GrContext*, SkBudgeted, const SkImageInfo&, 550ae6faa34d73ffc7ebec3d13f0473703bade821bRobert Phillips int sampleCount, GrSurfaceOrigin, 567e922765545f42ce691e4f3d5fbbd4e44ba47ff1robertphillips const SkSurfaceProps*, InitContents); 5715a140599942f70e47380e3f700a825c7cece3b4commit-bot@chromium.org 5806dd0a8222cc97236a2d20d563e27995983e6e0cjoshualitt ~SkGpuDevice() override {} 597b201d22541957b128528bc481c6fd4ef0ed2258reed@google.com 60144caf55ffc692bcda77703a73bb9a894f7d024fHal Canary GrContext* context() const override { return fContext.get(); } 61ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 628eddfb50c0c9e4bcba6384a2ce39852b5fb5becbreed // set all pixels to 0 638eddfb50c0c9e4bcba6384a2ce39852b5fb5becbreed void clearAll(); 648eddfb50c0c9e4bcba6384a2ce39852b5fb5becbreed 651105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman void replaceRenderTargetContext(bool shouldRetainContent); 66abcfab4d68d53900ef33320bb2622696c14d14b0kkinnunen 671105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman GrRenderTargetContext* accessRenderTargetContext() override; 68ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 69a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawPaint(const SkPaint& paint) override; 70a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawPoints(SkCanvas::PointMode mode, size_t count, const SkPoint[], 71dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon const SkPaint& paint) override; 72a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawRect(const SkRect& r, const SkPaint& paint) override; 73a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawRRect(const SkRRect& r, const SkPaint& paint) override; 74a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawDRRect(const SkRRect& outer, const SkRRect& inner, 75dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon const SkPaint& paint) override; 76a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawRegion(const SkRegion& r, const SkPaint& paint) override; 77a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawOval(const SkRect& oval, const SkPaint& paint) override; 78a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawArc(const SkRect& oval, SkScalar startAngle, SkScalar sweepAngle, 79dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon bool useCenter, const SkPaint& paint) override; 80a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawPath(const SkPath& path, const SkPaint& paint, 81dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon const SkMatrix* prePathMatrix, bool pathIsMutable) override; 82b964238f0bded00bae59c26c5f366a7780a0ef5fHal Canary void drawBitmap(const SkBitmap&, SkScalar x, SkScalar y, 83dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon const SkPaint&) override; 84a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawBitmapRect(const SkBitmap&, const SkRect* srcOrNull, const SkRect& dst, 85dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon const SkPaint& paint, SkCanvas::SrcRectConstraint) override; 86a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawSprite(const SkBitmap& bitmap, int x, int y, 87dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon const SkPaint& paint) override; 88a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawText(const void* text, size_t len, SkScalar x, SkScalar y, 89dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon const SkPaint&) override; 90a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawPosText(const void* text, size_t len, const SkScalar pos[], 91dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon int scalarsPerPos, const SkPoint& offset, const SkPaint&) override; 92a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawTextBlob(const SkTextBlob*, SkScalar x, SkScalar y, 93dcb406c29d72842684e67e746ddf7fe0b9a597dbbsalomon const SkPaint& paint, SkDrawFilter* drawFilter) override; 942f6b5a47a50cdd218bc3302273be3a4a71add8fbMike Reed void drawVertices(const SkVertices*, SkBlendMode, const SkPaint&) override; 954204da25aa4c6e0b321314aa32fd9affb4865563Mike Reed void drawShadow(const SkPath&, const SkDrawShadowRec&) override; 96a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawAtlas(const SkImage* atlas, const SkRSXform[], const SkRect[], 97faba3715b8ddfaa0ce4df79bc8006e9bc7694e5bMike Reed const SkColor[], int count, SkBlendMode, const SkPaint&) override; 98a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawDevice(SkBaseDevice*, int x, int y, const SkPaint&) override; 99970587bf0ed73807632be7b0f349a96995cee4ecrobertphillips 100a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawImage(const SkImage*, SkScalar x, SkScalar y, const SkPaint&) override; 101a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawImageRect(const SkImage*, const SkRect* src, const SkRect& dst, 102a5517e2b190a8083b38964972b031c13e99f1012reed const SkPaint&, SkCanvas::SrcRectConstraint) override; 1037b201d22541957b128528bc481c6fd4ef0ed2258reed@google.com 104a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawImageNine(const SkImage* image, const SkIRect& center, 10533a5fce6126dc5d3927a71fdc6c35af6f5893fd5joshualitt const SkRect& dst, const SkPaint& paint) override; 106a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawBitmapNine(const SkBitmap& bitmap, const SkIRect& center, 10733a5fce6126dc5d3927a71fdc6c35af6f5893fd5joshualitt const SkRect& dst, const SkPaint& paint) override; 10833a5fce6126dc5d3927a71fdc6c35af6f5893fd5joshualitt 109a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawImageLattice(const SkImage*, const SkCanvas::Lattice&, 11010e3d9bf59bdec92c05367ae0b71e1ce1ee4a690msarett const SkRect& dst, const SkPaint&) override; 111a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawBitmapLattice(const SkBitmap&, const SkCanvas::Lattice&, 11210e3d9bf59bdec92c05367ae0b71e1ce1ee4a690msarett const SkRect& dst, const SkPaint&) override; 11310e3d9bf59bdec92c05367ae0b71e1ce1ee4a690msarett 11453f77bd4fdd76525b66b7f26d1c5c550858120dfFlorin Malita void drawSpecial(SkSpecialImage*, int left, int top, const SkPaint& paint, 11553f77bd4fdd76525b66b7f26d1c5c550858120dfFlorin Malita SkImage*, const SkMatrix&) override; 1166451a0cea6007aff54565ec82e2f86cb1d32ecc7robertphillips sk_sp<SkSpecialImage> makeSpecial(const SkBitmap&) override; 117e51c356ae4e074b9c286c50a4efce11205f7463creed sk_sp<SkSpecialImage> makeSpecial(const SkImage*) override; 1186451a0cea6007aff54565ec82e2f86cb1d32ecc7robertphillips sk_sp<SkSpecialImage> snapSpecial() override; 119970587bf0ed73807632be7b0f349a96995cee4ecrobertphillips 12036352bf5e38f45a70ee4f4fc132a38048d38206dmtklein void flush() override; 121c64ee46a982695dc32b9cad4dd4e635ac09cd25eGreg Daniel bool flushAndSignalSemaphores(int numSemaphores, GrBackendSemaphore* signalSemaphores); 122c64ee46a982695dc32b9cad4dd4e635ac09cd25eGreg Daniel bool wait(int numSemaphores, const GrBackendSemaphore* waitSemaphores); 1237b201d22541957b128528bc481c6fd4ef0ed2258reed@google.com 12441e010cb901c0da9066c4df562030808c9ccd7f8reed bool onAccessPixels(SkPixmap*) override; 125b7b7eb32f41729c136c939702b0c9a484accb541senorblanco@chromium.org 126ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comprotected: 12736352bf5e38f45a70ee4f4fc132a38048d38206dmtklein bool onReadPixels(const SkImageInfo&, void*, size_t, int, int) override; 12836352bf5e38f45a70ee4f4fc132a38048d38206dmtklein bool onWritePixels(const SkImageInfo&, const void*, size_t, int, int) override; 1299c240a1e6d314056fe0d6a8a33a3c60a6e19288frobertphillips bool onShouldDisableLCD(const SkPaint&) const final; 130c69809745e6496564639e42ef998ad39adf7dfb8bsalomon@google.com 131ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.comprivate: 1321105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman // We want these unreffed in RenderTargetContext, GrContext order. 133144caf55ffc692bcda77703a73bb9a894f7d024fHal Canary sk_sp<GrContext> fContext; 134144caf55ffc692bcda77703a73bb9a894f7d024fHal Canary sk_sp<GrRenderTargetContext> fRenderTargetContext; 13506dd0a8222cc97236a2d20d563e27995983e6e0cjoshualitt 136144caf55ffc692bcda77703a73bb9a894f7d024fHal Canary SkISize fSize; 137144caf55ffc692bcda77703a73bb9a894f7d024fHal Canary bool fOpaque; 13874f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon 13974f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon enum Flags { 14074f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon kNeedClear_Flag = 1 << 0, //!< Surface requires an initial clear 14174f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon kIsOpaque_Flag = 1 << 1, //!< Hint from client that rendering to this device will be 14274f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon // opaque even if the config supports alpha. 14374f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon }; 14474f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon static bool CheckAlphaTypeAndGetFlags(const SkImageInfo* info, InitContents init, 14574f681dce2fbadd481596aea15afb3e0fb36ceffbsalomon unsigned* flags); 14689443aba5bfa2b040dc9fd24938b7d0b3decd737reed 1479fab7e98d711968df3ec4fd2f3fe5c40820b2a0dRobert Phillips SkGpuDevice(GrContext*, sk_sp<GrRenderTargetContext>, int width, int height, unsigned flags); 14806cd732eff09d8f417ced2779e216d6ce6420f59bsalomon@google.com 14936352bf5e38f45a70ee4f4fc132a38048d38206dmtklein SkBaseDevice* onCreateDevice(const CreateInfo&, const SkPaint*) override; 150e97f0856a8044866b12527819d14cdfbcdfd96f2bsalomon@google.com 151e8f3062a36d3682f4019309a32b5b84dc9eddf8creed sk_sp<SkSurface> makeSurface(const SkImageInfo&, const SkSurfaceProps&) override; 15276f10a3bd936af7dbe2b5873d5a7eedd73cdc5dareed@google.com 153900c36779610dc65c42a5004ee3693fd70961ba4senorblanco SkImageFilterCache* getImageFilterCache() override; 154841010f4bd54663e41900359fd32640767e6c8cdreed 15536352bf5e38f45a70ee4f4fc132a38048d38206dmtklein bool forceConservativeRasterClip() const override { return true; } 15655b6d8be997a447ef9ce0f029697677a940bfc24senorblanco 1570166cfd311bb151af7745fe04fe850ee28b17e0aBrian Salomon GrClipStackClip clip() const { return GrClipStackClip(&this->cs()); } 1583ab43d5c5b4d77f46dd0266618f92e5fefce2021bsalomon@google.com 1593ab43d5c5b4d77f46dd0266618f92e5fefce2021bsalomon@google.com /** 1603ab43d5c5b4d77f46dd0266618f92e5fefce2021bsalomon@google.com * Helper functions called by drawBitmapCommon. By the time these are called the SkDraw's 1617edad87cdcb15e3d7f04cd3394047e3b82dfa355commit-bot@chromium.org * matrix, clip, and the device's render target has already been set on GrContext. 1623ab43d5c5b4d77f46dd0266618f92e5fefce2021bsalomon@google.com */ 1637edad87cdcb15e3d7f04cd3394047e3b82dfa355commit-bot@chromium.org 1647edad87cdcb15e3d7f04cd3394047e3b82dfa355commit-bot@chromium.org // The tileSize and clippedSrcRect will be valid only if true is returned. 16585d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed bool shouldTileImageID(uint32_t imageID, const SkIRect& imageRect, 16685d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed const SkMatrix& viewMatrix, 167e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon const SkMatrix& srcToDstRectMatrix, 168514baff8be7f71111aa7bfb9b099a096b31e16ecBrian Salomon const GrSamplerParams& params, 16985d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed const SkRect* srcRectPtr, 17085d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed int maxTileSize, 17185d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed int* tileSize, 17285d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed SkIRect* clippedSubset) const; 17385d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed // Just returns the predicate, not the out-tileSize or out-clippedSubset, as they are not 17485d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed // needed at the moment. 17585d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed bool shouldTileImage(const SkImage* image, const SkRect* srcRectPtr, 17685d9178832f4a64c9d80ffb14cb9dab4fe0fa54areed SkCanvas::SrcRectConstraint constraint, SkFilterQuality quality, 177e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon const SkMatrix& viewMatrix, const SkMatrix& srcToDstRect) const; 178c55271f2551533b37043aa2e37f754832a43073cbsalomon 179a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed sk_sp<SkSpecialImage> filterTexture(SkSpecialImage*, 180970587bf0ed73807632be7b0f349a96995cee4ecrobertphillips int left, int top, 181970587bf0ed73807632be7b0f349a96995cee4ecrobertphillips SkIPoint* offset, 182970587bf0ed73807632be7b0f349a96995cee4ecrobertphillips const SkImageFilter* filter); 183970587bf0ed73807632be7b0f349a96995cee4ecrobertphillips 184e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon // Splits bitmap into tiles of tileSize and draws them using separate textures for each tile. 1853ab43d5c5b4d77f46dd0266618f92e5fefce2021bsalomon@google.com void drawTiledBitmap(const SkBitmap& bitmap, 1865531d51ce7426bdae7563547326fcf0bf926a083joshualitt const SkMatrix& viewMatrix, 187e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon const SkMatrix& srcToDstMatrix, 188bac6b0575a28792a6be350af44c0b05975d2a66brobertphillips@google.com const SkRect& srcRect, 1897edad87cdcb15e3d7f04cd3394047e3b82dfa355commit-bot@chromium.org const SkIRect& clippedSrcRect, 190514baff8be7f71111aa7bfb9b099a096b31e16ecBrian Salomon const GrSamplerParams& params, 191eed779d866e1e239bfb9ebc6a225b7345a41adf9commit-bot@chromium.org const SkPaint& paint, 192a5517e2b190a8083b38964972b031c13e99f1012reed SkCanvas::SrcRectConstraint, 193dec61503d02862760f3c91203a698636a02c882acommit-bot@chromium.org int tileSize, 194dec61503d02862760f3c91203a698636a02c882acommit-bot@chromium.org bool bicubic); 195ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 196e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon // Used by drawTiledBitmap to draw each tile. 197e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon void drawBitmapTile(const SkBitmap&, 198e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon const SkMatrix& viewMatrix, 199e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon const SkRect& dstRect, 200e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon const SkRect& srcRect, 201514baff8be7f71111aa7bfb9b099a096b31e16ecBrian Salomon const GrSamplerParams& params, 202e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon const SkPaint& paint, 203e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon SkCanvas::SrcRectConstraint, 204e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon bool bicubic, 205e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon bool needsTextureDomain); 206e553b64bca57723db2b8da1c015a5ebf467eade9bsalomon 207b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon void drawTextureProducer(GrTextureProducer*, 208c55271f2551533b37043aa2e37f754832a43073cbsalomon const SkRect* srcRect, 209c55271f2551533b37043aa2e37f754832a43073cbsalomon const SkRect* dstRect, 210b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon SkCanvas::SrcRectConstraint, 211c55271f2551533b37043aa2e37f754832a43073cbsalomon const SkMatrix& viewMatrix, 212b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon const GrClip&, 213b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon const SkPaint&); 214c55271f2551533b37043aa2e37f754832a43073cbsalomon 215b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon void drawTextureProducerImpl(GrTextureProducer*, 216c55271f2551533b37043aa2e37f754832a43073cbsalomon const SkRect& clippedSrcRect, 217c55271f2551533b37043aa2e37f754832a43073cbsalomon const SkRect& clippedDstRect, 218b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon SkCanvas::SrcRectConstraint, 219c55271f2551533b37043aa2e37f754832a43073cbsalomon const SkMatrix& viewMatrix, 220c55271f2551533b37043aa2e37f754832a43073cbsalomon const SkMatrix& srcToDstMatrix, 221b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon const GrClip&, 222b1b019985bee2bcbf35c2fbb4281904d0d3465bbbsalomon const SkPaint&); 223c55271f2551533b37043aa2e37f754832a43073cbsalomon 224d77061067af664a158058771189d152a30acd59arobertphillips bool drawFilledDRRect(const SkMatrix& viewMatrix, const SkRRect& outer, 225d77061067af664a158058771189d152a30acd59arobertphillips const SkRRect& inner, const SkPaint& paint); 226d77061067af664a158058771189d152a30acd59arobertphillips 227a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawProducerNine(GrTextureProducer*, const SkIRect& center, 228f1ecd21bf6fd69953f78dd79502c7c9df92cdc9absalomon const SkRect& dst, const SkPaint&); 2292bbd0c61618405854e27f545cd501ebab93842a1bsalomon 230a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawProducerLattice(GrTextureProducer*, const SkCanvas::Lattice& lattice, 23110e3d9bf59bdec92c05367ae0b71e1ce1ee4a690msarett const SkRect& dst, const SkPaint&); 23210e3d9bf59bdec92c05367ae0b71e1ce1ee4a690msarett 233628ed0b22045a9544b56e00e73137d6050ce900ccommit-bot@chromium.org bool drawDashLine(const SkPoint pts[2], const SkPaint& paint); 234a1361364e64138adda3dc5f71d50d7503838bb6dMike Reed void drawStrokedLine(const SkPoint pts[2], const SkPaint&); 235628ed0b22045a9544b56e00e73137d6050ce900ccommit-bot@chromium.org 236887cdf112809727c51890ba8b98b3ddce22249f0Mike Reed void wireframeVertices(SkVertices::VertexMode, int vertexCount, const SkPoint verts[], 2372f6b5a47a50cdd218bc3302273be3a4a71add8fbMike Reed SkBlendMode, const uint16_t indices[], int indexCount, const SkPaint&); 2382f6b5a47a50cdd218bc3302273be3a4a71add8fbMike Reed 2391105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman static sk_sp<GrRenderTargetContext> MakeRenderTargetContext(GrContext*, 2401105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman SkBudgeted, 2411105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman const SkImageInfo&, 2421105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman int sampleCount, 2431105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman GrSurfaceOrigin, 2441105224f9701e57ec5ce0354d6a380b664f5c638Brian Osman const SkSurfaceProps*); 245abcfab4d68d53900ef33320bb2622696c14d14b0kkinnunen 246dbd3593e0b0cfb04f23b9d7bce623e6e32364b3fjoshualitt friend class GrAtlasTextContext; 2477b05ff11ebc51f3f3abd1c1756337a04f563537erobertphillips friend class SkSurface_Gpu; // for access to surfaceProps 248c5e641cc9947b8b2d3c63f908c7b98fa5b3d0f07Mike Reed typedef SkClipStackDevice INHERITED; 249ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com}; 250ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com 251ac10a2d039c5d52eed66e27cbbc503ab523c1cd5reed@google.com#endif 252