Index: src/gpu/effects/GrDistanceFieldGeoProc.cpp |
diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.cpp b/src/gpu/effects/GrDistanceFieldGeoProc.cpp |
index 4f8da160e7a11e907180b0e6b592c9e4e5c3d1e0..89aa31ee5d01f5f796f41da51c5d1ff5d0118af0 100644 |
--- a/src/gpu/effects/GrDistanceFieldGeoProc.cpp |
+++ b/src/gpu/effects/GrDistanceFieldGeoProc.cpp |
@@ -33,11 +33,11 @@ public: |
const GrDistanceFieldA8TextGeoProc& dfTexEffect = |
args.fGP.cast<GrDistanceFieldA8TextGeoProc>(); |
GrGLGPBuilder* pb = args.fPB; |
- GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); |
+ GrGLFragmentBuilder* fsBuilder = pb->getFragmentShaderBuilder(); |
SkAssertResult(fsBuilder->enableFeature( |
GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)); |
- GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); |
+ GrGLVertexBuilder* vsBuilder = pb->getVertexShaderBuilder(); |
// emit attributes |
vsBuilder->emitAttributes(dfTexEffect); |
@@ -46,7 +46,7 @@ public: |
// adjust based on gamma |
const char* distanceAdjustUniName = nullptr; |
// width, height, 1/(3*width) |
- fDistanceAdjustUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
+ fDistanceAdjustUni = pb->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
kFloat_GrSLType, kDefault_GrSLPrecision, |
"DistanceAdjust", &distanceAdjustUniName); |
#endif |
@@ -65,14 +65,14 @@ public: |
&fViewMatrixUniform); |
// emit transforms |
- this->emitTransforms(args.fPB, gpArgs->fPositionVar, dfTexEffect.inPosition()->fName, |
+ this->emitTransforms(pb, gpArgs->fPositionVar, dfTexEffect.inPosition()->fName, |
args.fTransformsIn, args.fTransformsOut); |
// add varyings |
GrGLVertToFrag recipScale(kFloat_GrSLType); |
GrGLVertToFrag st(kVec2f_GrSLType); |
bool isSimilarity = SkToBool(dfTexEffect.getFlags() & kSimilarity_DistanceFieldEffectFlag); |
- args.fPB->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision); |
+ pb->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision); |
vsBuilder->codeAppendf("%s = %s;", st.vsOut(), dfTexEffect.inTextureCoords()->fName); |
// compute numbers to be hardcoded to convert texture coordinates from int to float |
@@ -83,15 +83,14 @@ public: |
SkScalar recipHeight = 1.0f / atlas->height(); |
GrGLVertToFrag uv(kVec2f_GrSLType); |
- args.fPB->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision); |
+ pb->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision); |
vsBuilder->codeAppendf("%s = vec2(%.*f, %.*f) * %s;", uv.vsOut(), |
GR_SIGNIFICANT_POW2_DECIMAL_DIG, recipWidth, |
GR_SIGNIFICANT_POW2_DECIMAL_DIG, recipHeight, |
dfTexEffect.inTextureCoords()->fName); |
// Use highp to work around aliasing issues |
- fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision, |
- pb->ctxInfo().standard())); |
+ fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(pb->glslCaps(), kHigh_GrSLPrecision)); |
fsBuilder->codeAppendf("vec2 uv = %s;\n", uv.fsIn()); |
fsBuilder->codeAppend("\tfloat texColor = "); |
@@ -284,17 +283,17 @@ public: |
const GrDistanceFieldPathGeoProc& dfTexEffect = args.fGP.cast<GrDistanceFieldPathGeoProc>(); |
GrGLGPBuilder* pb = args.fPB; |
- GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); |
+ GrGLFragmentBuilder* fsBuilder = pb->getFragmentShaderBuilder(); |
SkAssertResult(fsBuilder->enableFeature( |
GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)); |
- GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); |
+ GrGLVertexBuilder* vsBuilder = pb->getVertexShaderBuilder(); |
// emit attributes |
vsBuilder->emitAttributes(dfTexEffect); |
GrGLVertToFrag v(kVec2f_GrSLType); |
- args.fPB->addVarying("TextureCoords", &v, kHigh_GrSLPrecision); |
+ pb->addVarying("TextureCoords", &v, kHigh_GrSLPrecision); |
// setup pass through color |
if (!dfTexEffect.colorIgnored()) { |
@@ -311,17 +310,16 @@ public: |
&fViewMatrixUniform); |
// emit transforms |
- this->emitTransforms(args.fPB, gpArgs->fPositionVar, dfTexEffect.inPosition()->fName, |
+ this->emitTransforms(pb, gpArgs->fPositionVar, dfTexEffect.inPosition()->fName, |
args.fTransformsIn, args.fTransformsOut); |
const char* textureSizeUniName = nullptr; |
- fTextureSizeUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
- kVec2f_GrSLType, kDefault_GrSLPrecision, |
- "TextureSize", &textureSizeUniName); |
+ fTextureSizeUni = pb->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
+ kVec2f_GrSLType, kDefault_GrSLPrecision, |
+ "TextureSize", &textureSizeUniName); |
// Use highp to work around aliasing issues |
- fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision, |
- pb->ctxInfo().standard())); |
+ fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(pb->glslCaps(), kHigh_GrSLPrecision)); |
fsBuilder->codeAppendf("vec2 uv = %s;", v.fsIn()); |
fsBuilder->codeAppend("float texColor = "); |
@@ -332,8 +330,7 @@ public: |
fsBuilder->codeAppend("float distance = " |
SK_DistanceFieldMultiplier "*(texColor - " SK_DistanceFieldThreshold ");"); |
- fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision, |
- pb->ctxInfo().standard())); |
+ fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(pb->glslCaps(), kHigh_GrSLPrecision)); |
fsBuilder->codeAppendf("vec2 st = uv*%s;", textureSizeUniName); |
fsBuilder->codeAppend("float afwidth;"); |
if (dfTexEffect.getFlags() & kSimilarity_DistanceFieldEffectFlag) { |
@@ -500,7 +497,7 @@ public: |
args.fGP.cast<GrDistanceFieldLCDTextGeoProc>(); |
GrGLGPBuilder* pb = args.fPB; |
- GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder(); |
+ GrGLVertexBuilder* vsBuilder = pb->getVertexShaderBuilder(); |
// emit attributes |
vsBuilder->emitAttributes(dfTexEffect); |
@@ -515,14 +512,14 @@ public: |
&fViewMatrixUniform); |
// emit transforms |
- this->emitTransforms(args.fPB, gpArgs->fPositionVar, dfTexEffect.inPosition()->fName, |
+ this->emitTransforms(pb, gpArgs->fPositionVar, dfTexEffect.inPosition()->fName, |
args.fTransformsIn, args.fTransformsOut); |
// set up varyings |
bool isUniformScale = SkToBool(dfTexEffect.getFlags() & kUniformScale_DistanceFieldEffectMask); |
GrGLVertToFrag recipScale(kFloat_GrSLType); |
GrGLVertToFrag st(kVec2f_GrSLType); |
- args.fPB->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision); |
+ pb->addVarying("IntTextureCoords", &st, kHigh_GrSLPrecision); |
vsBuilder->codeAppendf("%s = %s;", st.vsOut(), dfTexEffect.inTextureCoords()->fName); |
// compute numbers to be hardcoded to convert texture coordinates from int to float |
@@ -533,25 +530,23 @@ public: |
SkScalar recipHeight = 1.0f / atlas->height(); |
GrGLVertToFrag uv(kVec2f_GrSLType); |
- args.fPB->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision); |
+ pb->addVarying("TextureCoords", &uv, kHigh_GrSLPrecision); |
vsBuilder->codeAppendf("%s = vec2(%.*f, %.*f) * %s;", uv.vsOut(), |
GR_SIGNIFICANT_POW2_DECIMAL_DIG, recipWidth, |
GR_SIGNIFICANT_POW2_DECIMAL_DIG, recipHeight, |
dfTexEffect.inTextureCoords()->fName); |
// add frag shader code |
- GrGLFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); |
+ GrGLFragmentBuilder* fsBuilder = pb->getFragmentShaderBuilder(); |
SkAssertResult(fsBuilder->enableFeature( |
GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)); |
// create LCD offset adjusted by inverse of transform |
// Use highp to work around aliasing issues |
- fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision, |
- pb->ctxInfo().standard())); |
+ fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(pb->glslCaps(), kHigh_GrSLPrecision)); |
fsBuilder->codeAppendf("vec2 uv = %s;\n", uv.fsIn()); |
- fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(kHigh_GrSLPrecision, |
- pb->ctxInfo().standard())); |
+ fsBuilder->codeAppend(GrGLShaderVar::PrecisionString(pb->glslCaps(), kHigh_GrSLPrecision)); |
SkScalar lcdDelta = 1.0f / (3.0f * atlas->width()); |
if (dfTexEffect.getFlags() & kBGR_DistanceFieldEffectFlag) { |
@@ -594,7 +589,7 @@ public: |
// adjust width based on gamma |
const char* distanceAdjustUniName = nullptr; |
- fDistanceAdjustUni = args.fPB->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
+ fDistanceAdjustUni = pb->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
kVec3f_GrSLType, kDefault_GrSLPrecision, |
"DistanceAdjust", &distanceAdjustUniName); |
fsBuilder->codeAppendf("distance -= %s;", distanceAdjustUniName); |