aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/effects/GrDistanceFieldGeoProc.h
diff options
context:
space:
mode:
authorGravatar Greg Daniel <egdaniel@google.com>2017-12-18 15:50:34 +0000
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-18 21:50:26 +0000
commitf226e66d75374e370f3ae2c6895bc689670e9e18 (patch)
treeb1e38311a08f7294f366fe3e89c4ba231f3be600 /src/gpu/effects/GrDistanceFieldGeoProc.h
parentde71572f650005e36d4fc2fe95fb5677a25ae4f6 (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.h66
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