diff options
author | Greg Daniel <egdaniel@google.com> | 2017-12-18 15:50:34 +0000 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-12-18 21:50:26 +0000 |
commit | f226e66d75374e370f3ae2c6895bc689670e9e18 (patch) | |
tree | b1e38311a08f7294f366fe3e89c4ba231f3be600 /src/gpu/effects/GrDistanceFieldGeoProc.h | |
parent | de71572f650005e36d4fc2fe95fb5677a25ae4f6 (diff) |
Revert "Transform vertices for distance field glyphs on CPU."
This reverts commit 0215e39d7e415d0530231df6ad20d5f215c72152.
Reason for revert: break intel 540 and HD2000 intel release bots on gltestthreading gm dftext_blob_pers
Original change's description:
> Transform vertices for distance field glyphs on CPU.
>
> This allows batching of DF draws with different view matrices.
>
> For perspective matrices this means the transformed position vertex
> attribute must have w values. Currently, non-perspective DF draws still
> use 2 component positions, though this could be changed in the future.
> Consequently, perspective draws can batch with other perspective draws
> but not non-perspective draws.
>
> Adds a GM to test batching and reusing the same blobs with both perspective
> and non-perspective matrices.
>
> Change-Id: I0e42c5449ebf3a5a54025dbcdec824d904d5bd9e
> Reviewed-on: https://skia-review.googlesource.com/79900
> Commit-Queue: Brian Salomon <bsalomon@google.com>
> Reviewed-by: Jim Van Verth <jvanverth@google.com>
TBR=jvanverth@google.com,bsalomon@google.com
# Not skipping CQ checks because original CL landed > 1 day ago.
Change-Id: Idc658d9263976d5b5e00a5026c5d6d3c8f4bdc2d
Reviewed-on: https://skia-review.googlesource.com/86560
Commit-Queue: Greg Daniel <egdaniel@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'src/gpu/effects/GrDistanceFieldGeoProc.h')
-rw-r--r-- | src/gpu/effects/GrDistanceFieldGeoProc.h | 66 |
1 files changed, 36 insertions, 30 deletions
diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.h b/src/gpu/effects/GrDistanceFieldGeoProc.h index f3fd67606b..a09938242f 100644 --- a/src/gpu/effects/GrDistanceFieldGeoProc.h +++ b/src/gpu/effects/GrDistanceFieldGeoProc.h @@ -19,27 +19,24 @@ class GrInvariantOutput; enum GrDistanceFieldEffectFlags { kSimilarity_DistanceFieldEffectFlag = 0x01, // ctm is similarity matrix kScaleOnly_DistanceFieldEffectFlag = 0x02, // ctm has only scale and translate - kPerspective_DistanceFieldEffectFlag = 0x04, // ctm has perspective (and positions are x,y,w) - kUseLCD_DistanceFieldEffectFlag = 0x08, // use lcd text - kBGR_DistanceFieldEffectFlag = 0x10, // lcd display has bgr order - kPortrait_DistanceFieldEffectFlag = 0x20, // lcd display is in portrait mode (not used yet) - kGammaCorrect_DistanceFieldEffectFlag = 0x40, // assume gamma-correct output (linear blending) - kAliased_DistanceFieldEffectFlag = 0x80, // monochrome output + kUseLCD_DistanceFieldEffectFlag = 0x04, // use lcd text + kBGR_DistanceFieldEffectFlag = 0x08, // lcd display has bgr order + kPortrait_DistanceFieldEffectFlag = 0x10, // lcd display is in portrait mode (not used yet) + kGammaCorrect_DistanceFieldEffectFlag = 0x20, // assume gamma-correct output (linear blending) + kAliased_DistanceFieldEffectFlag = 0x40, // monochrome output - kInvalid_DistanceFieldEffectFlag = 0x100, // invalid state (for initialization) + kInvalid_DistanceFieldEffectFlag = 0x80, // invalid state (for initialization) kUniformScale_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag | kScaleOnly_DistanceFieldEffectFlag, // The subset of the flags relevant to GrDistanceFieldA8TextGeoProc kNonLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag | kScaleOnly_DistanceFieldEffectFlag | - kPerspective_DistanceFieldEffectFlag | kGammaCorrect_DistanceFieldEffectFlag | kAliased_DistanceFieldEffectFlag, // The subset of the flags relevant to GrDistanceFieldLCDTextGeoProc kLCD_DistanceFieldEffectMask = kSimilarity_DistanceFieldEffectFlag | kScaleOnly_DistanceFieldEffectFlag | - kPerspective_DistanceFieldEffectFlag | kUseLCD_DistanceFieldEffectFlag | kBGR_DistanceFieldEffectFlag | kGammaCorrect_DistanceFieldEffectFlag, @@ -55,22 +52,23 @@ class GrDistanceFieldA8TextGeoProc : public GrGeometryProcessor { public: static constexpr int kMaxTextures = 4; - /** The local matrix should be identity if local coords are not required by the GrPipeline. */ #ifdef SK_GAMMA_APPLY_TO_A8 - static sk_sp<GrGeometryProcessor> Make(GrColor color, + static sk_sp<GrGeometryProcessor> Make(GrColor color, const SkMatrix& viewMatrix, const sk_sp<GrTextureProxy> proxies[kMaxTextures], const GrSamplerState& params, float lum, uint32_t flags, - const SkMatrix& localMatrixIfUsesLocalCoords) { - return sk_sp<GrGeometryProcessor>(new GrDistanceFieldA8TextGeoProc( - color, proxies, params, lum, flags, localMatrixIfUsesLocalCoords)); + bool usesLocalCoords) { + return sk_sp<GrGeometryProcessor>( + new GrDistanceFieldA8TextGeoProc(color, viewMatrix, proxies, + params, lum, flags, usesLocalCoords)); } #else - static sk_sp<GrGeometryProcessor> Make(GrColor color, + static sk_sp<GrGeometryProcessor> Make(GrColor color, const SkMatrix& viewMatrix, const sk_sp<GrTextureProxy> proxies[kMaxTextures], const GrSamplerState& params, uint32_t flags, - const SkMatrix& localMatrixIfUsesLocalCoords) { - return sk_sp<GrGeometryProcessor>(new GrDistanceFieldA8TextGeoProc( - color, proxies, params, flags, localMatrixIfUsesLocalCoords)); + bool usesLocalCoords) { + return sk_sp<GrGeometryProcessor>( + new GrDistanceFieldA8TextGeoProc(color, viewMatrix, proxies, + params, flags, usesLocalCoords)); } #endif @@ -82,7 +80,8 @@ public: const Attribute* inColor() const { return fInColor; } const Attribute* inTextureCoords() const { return fInTextureCoords; } GrColor color() const { return fColor; } - const SkMatrix& localMatrix() const { return fLocalMatrix; } + const SkMatrix& viewMatrix() const { return fViewMatrix; } + bool usesLocalCoords() const { return fUsesLocalCoords; } #ifdef SK_GAMMA_APPLY_TO_A8 float getDistanceAdjust() const { return fDistanceAdjust; } #endif @@ -95,14 +94,16 @@ public: GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; private: - GrDistanceFieldA8TextGeoProc(GrColor, const sk_sp<GrTextureProxy> proxies[kMaxTextures], + GrDistanceFieldA8TextGeoProc(GrColor, const SkMatrix& viewMatrix, + const sk_sp<GrTextureProxy> proxies[kMaxTextures], const GrSamplerState& params, #ifdef SK_GAMMA_APPLY_TO_A8 float distanceAdjust, #endif - uint32_t flags, const SkMatrix& localMatrix); + uint32_t flags, bool usesLocalCoords); GrColor fColor; + SkMatrix fViewMatrix; TextureSampler fTextureSamplers[kMaxTextures]; #ifdef SK_GAMMA_APPLY_TO_A8 float fDistanceAdjust; @@ -111,7 +112,7 @@ private: const Attribute* fInPosition; const Attribute* fInColor; const Attribute* fInTextureCoords; - SkMatrix fLocalMatrix; + bool fUsesLocalCoords; GR_DECLARE_GEOMETRY_PROCESSOR_TEST @@ -128,7 +129,6 @@ class GrDistanceFieldPathGeoProc : public GrGeometryProcessor { public: static constexpr int kMaxTextures = 4; - /** The local matrix should be identity if local coords are not required by the GrPipeline. */ static sk_sp<GrGeometryProcessor> Make(GrColor color, const SkMatrix& matrix, const sk_sp<GrTextureProxy> proxies[kMaxTextures], const GrSamplerState& params, uint32_t flags) { @@ -197,13 +197,16 @@ public: static constexpr int kMaxTextures = 4; static sk_sp<GrGeometryProcessor> Make(GrColor color, + const SkMatrix& viewMatrix, const sk_sp<GrTextureProxy> proxies[kMaxTextures], const GrSamplerState& params, DistanceAdjust distanceAdjust, uint32_t flags, - const SkMatrix& localMatrixIfUsesLocalCoords) { - return sk_sp<GrGeometryProcessor>(new GrDistanceFieldLCDTextGeoProc( - color, proxies, params, distanceAdjust, flags, localMatrixIfUsesLocalCoords)); + bool usesLocalCoords) { + return sk_sp<GrGeometryProcessor>( + new GrDistanceFieldLCDTextGeoProc(color, viewMatrix, proxies, + params, distanceAdjust, + flags, usesLocalCoords)); } ~GrDistanceFieldLCDTextGeoProc() override {} @@ -215,8 +218,9 @@ public: const Attribute* inTextureCoords() const { return fInTextureCoords; } DistanceAdjust getDistanceAdjust() const { return fDistanceAdjust; } GrColor color() const { return fColor; } + const SkMatrix& viewMatrix() const { return fViewMatrix; } uint32_t getFlags() const { return fFlags; } - const SkMatrix& localMatrix() const { return fLocalMatrix; } + bool usesLocalCoords() const { return fUsesLocalCoords; } void addNewProxies(const sk_sp<GrTextureProxy> proxies[kMaxTextures], const GrSamplerState& p); @@ -225,18 +229,20 @@ public: GrGLSLPrimitiveProcessor* createGLSLInstance(const GrShaderCaps&) const override; private: - GrDistanceFieldLCDTextGeoProc(GrColor, const sk_sp<GrTextureProxy> proxies[kMaxTextures], + GrDistanceFieldLCDTextGeoProc(GrColor, const SkMatrix& viewMatrix, + const sk_sp<GrTextureProxy> proxies[kMaxTextures], const GrSamplerState& params, DistanceAdjust wa, uint32_t flags, - const SkMatrix& localMatrix); + bool usesLocalCoords); GrColor fColor; + SkMatrix fViewMatrix; TextureSampler fTextureSamplers[kMaxTextures]; DistanceAdjust fDistanceAdjust; uint32_t fFlags; const Attribute* fInPosition; const Attribute* fInColor; const Attribute* fInTextureCoords; - const SkMatrix fLocalMatrix; + bool fUsesLocalCoords; GR_DECLARE_GEOMETRY_PROCESSOR_TEST |