diff options
author | 2017-12-08 13:34:21 -0700 | |
---|---|---|
committer | 2017-12-08 20:57:28 +0000 | |
commit | 27372888a5c7698f51069bd5b5beea3e85b66668 (patch) | |
tree | 2fb60b65f286fe7da33467918198ad731cef708d /src/gpu | |
parent | be4ffab4e208ec47b4298621b9c9e8456f31717e (diff) |
Don't force GrGLSLVarying's scope to be compile-time constant
Bug: skia:
Change-Id: I70a191949fd26a39257a8a59a0a4c6448ec1fa37
Reviewed-on: https://skia-review.googlesource.com/82462
Commit-Queue: Chris Dalton <csmartdalton@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'src/gpu')
-rw-r--r-- | src/gpu/GrDefaultGeoProcFactory.cpp | 2 | ||||
-rw-r--r-- | src/gpu/GrPathProcessor.cpp | 2 | ||||
-rw-r--r-- | src/gpu/ccpr/GrCCPRCoverageProcessor.h | 2 | ||||
-rw-r--r-- | src/gpu/ccpr/GrCCPRCubicShader.h | 12 | ||||
-rw-r--r-- | src/gpu/ccpr/GrCCPRPathProcessor.cpp | 4 | ||||
-rw-r--r-- | src/gpu/ccpr/GrCCPRQuadraticShader.h | 12 | ||||
-rw-r--r-- | src/gpu/ccpr/GrCCPRTriangleShader.h | 12 | ||||
-rw-r--r-- | src/gpu/effects/GrAtlasedShaderHelpers.h | 8 | ||||
-rw-r--r-- | src/gpu/effects/GrBezierEffect.cpp | 8 | ||||
-rw-r--r-- | src/gpu/effects/GrBitmapTextGeoProc.cpp | 4 | ||||
-rw-r--r-- | src/gpu/effects/GrDistanceFieldGeoProc.cpp | 20 | ||||
-rw-r--r-- | src/gpu/gl/GrGLVaryingHandler.cpp | 2 | ||||
-rw-r--r-- | src/gpu/gl/GrGLVaryingHandler.h | 2 | ||||
-rw-r--r-- | src/gpu/glsl/GrGLSLGeometryProcessor.cpp | 2 | ||||
-rw-r--r-- | src/gpu/glsl/GrGLSLVarying.cpp | 8 | ||||
-rw-r--r-- | src/gpu/glsl/GrGLSLVarying.h | 59 | ||||
-rw-r--r-- | src/gpu/ops/GrAAConvexPathRenderer.cpp | 2 | ||||
-rw-r--r-- | src/gpu/ops/GrDashOp.cpp | 8 | ||||
-rw-r--r-- | src/gpu/ops/GrMSAAPathRenderer.cpp | 2 | ||||
-rw-r--r-- | src/gpu/ops/GrOvalOpFactory.cpp | 8 |
20 files changed, 80 insertions, 99 deletions
diff --git a/src/gpu/GrDefaultGeoProcFactory.cpp b/src/gpu/GrDefaultGeoProcFactory.cpp index 56758769b7..37967e4d2a 100644 --- a/src/gpu/GrDefaultGeoProcFactory.cpp +++ b/src/gpu/GrDefaultGeoProcFactory.cpp @@ -82,7 +82,7 @@ public: // Setup pass through color if (gp.hasVertexColor()) { - GrGLSLVertToFrag varying(kHalf4_GrSLType); + GrGLSLVarying varying(kHalf4_GrSLType); varyingHandler->addVarying("color", &varying); // There are several optional steps to process the color. Start with the attribute: diff --git a/src/gpu/GrPathProcessor.cpp b/src/gpu/GrPathProcessor.cpp index 49980eb008..d75ac735c1 100644 --- a/src/gpu/GrPathProcessor.cpp +++ b/src/gpu/GrPathProcessor.cpp @@ -56,7 +56,7 @@ public: SkString strVaryingName; strVaryingName.printf("TransformedCoord_%d", i); - GrGLSLVertToFrag v(varyingType); + GrGLSLVarying v(varyingType); GrGLVaryingHandler* glVaryingHandler = (GrGLVaryingHandler*) varyingHandler; fInstalledTransforms.push_back().fHandle = glVaryingHandler->addPathProcessingVarying(strVaryingName.c_str(), diff --git a/src/gpu/ccpr/GrCCPRCoverageProcessor.h b/src/gpu/ccpr/GrCCPRCoverageProcessor.h index 30aa2acdc2..7ecb888005 100644 --- a/src/gpu/ccpr/GrCCPRCoverageProcessor.h +++ b/src/gpu/ccpr/GrCCPRCoverageProcessor.h @@ -208,7 +208,7 @@ public: const char* outputCoverage) const = 0; private: - GrGLSLGeoToFrag fWind{kHalf_GrSLType}; + GrGLSLVarying fWind{kHalf_GrSLType, GrGLSLVarying::Scope::kGeoToFrag}; }; GrCCPRCoverageProcessor(RenderPass); diff --git a/src/gpu/ccpr/GrCCPRCubicShader.h b/src/gpu/ccpr/GrCCPRCubicShader.h index 7b91a495b8..be7635efec 100644 --- a/src/gpu/ccpr/GrCCPRCubicShader.h +++ b/src/gpu/ccpr/GrCCPRCubicShader.h @@ -34,9 +34,9 @@ protected: virtual void onEmitVaryings(GrGLSLVaryingHandler*, SkString* code) = 0; - GrShaderVar fKLMMatrix{"klm_matrix", kFloat3x3_GrSLType}; - GrShaderVar fEdgeDistanceEquation{"edge_distance_equation", kFloat3_GrSLType}; - GrGLSLGeoToFrag fKLMD{kFloat4_GrSLType}; + GrShaderVar fKLMMatrix{"klm_matrix", kFloat3x3_GrSLType}; + GrShaderVar fEdgeDistanceEquation{"edge_distance_equation", kFloat3_GrSLType}; + GrGLSLVarying fKLMD{kFloat4_GrSLType, GrGLSLVarying::Scope::kGeoToFrag}; }; class GrCCPRCubicHullShader : public GrCCPRCubicShader { @@ -47,7 +47,7 @@ class GrCCPRCubicHullShader : public GrCCPRCubicShader { void onEmitVaryings(GrGLSLVaryingHandler*, SkString* code) override; void onEmitFragmentCode(GrGLSLPPFragmentBuilder*, const char* outputCoverage) const override; - GrGLSLGeoToFrag fGradMatrix{kFloat2x2_GrSLType}; + GrGLSLVarying fGradMatrix{kFloat2x2_GrSLType, GrGLSLVarying::Scope::kGeoToFrag}; }; class GrCCPRCubicCornerShader : public GrCCPRCubicShader { @@ -58,8 +58,8 @@ class GrCCPRCubicCornerShader : public GrCCPRCubicShader { void onEmitVaryings(GrGLSLVaryingHandler*, SkString* code) override; void onEmitFragmentCode(GrGLSLPPFragmentBuilder*, const char* outputCoverage) const override; - GrGLSLGeoToFrag fdKLMDdx{kFloat4_GrSLType}; - GrGLSLGeoToFrag fdKLMDdy{kFloat4_GrSLType}; + GrGLSLVarying fdKLMDdx{kFloat4_GrSLType, GrGLSLVarying::Scope::kGeoToFrag}; + GrGLSLVarying fdKLMDdy{kFloat4_GrSLType, GrGLSLVarying::Scope::kGeoToFrag}; }; #endif diff --git a/src/gpu/ccpr/GrCCPRPathProcessor.cpp b/src/gpu/ccpr/GrCCPRPathProcessor.cpp index be9f67a4b9..c99a0100e9 100644 --- a/src/gpu/ccpr/GrCCPRPathProcessor.cpp +++ b/src/gpu/ccpr/GrCCPRPathProcessor.cpp @@ -122,8 +122,8 @@ void GLSLPathProcessor::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { varyingHandler->emitAttributes(proc); - GrGLSLVertToFrag texcoord(kFloat2_GrSLType); - GrGLSLVertToFrag color(kHalf4_GrSLType); + GrGLSLVarying texcoord(kFloat2_GrSLType); + GrGLSLVarying color(kHalf4_GrSLType); varyingHandler->addVarying("texcoord", &texcoord); varyingHandler->addFlatPassThroughAttribute(&proc.getInstanceAttrib(InstanceAttribs::kColor), args.fOutputColor); diff --git a/src/gpu/ccpr/GrCCPRQuadraticShader.h b/src/gpu/ccpr/GrCCPRQuadraticShader.h index d04e82d249..5d26a39549 100644 --- a/src/gpu/ccpr/GrCCPRQuadraticShader.h +++ b/src/gpu/ccpr/GrCCPRQuadraticShader.h @@ -33,9 +33,9 @@ protected: virtual void onEmitVaryings(GrGLSLVaryingHandler*, SkString* code) = 0; - const GrShaderVar fCanonicalMatrix{"canonical_matrix", kFloat3x3_GrSLType}; - const GrShaderVar fEdgeDistanceEquation{"edge_distance_equation", kFloat3_GrSLType}; - GrGLSLGeoToFrag fXYD{kFloat3_GrSLType}; + const GrShaderVar fCanonicalMatrix{"canonical_matrix", kFloat3x3_GrSLType}; + const GrShaderVar fEdgeDistanceEquation{"edge_distance_equation", kFloat3_GrSLType}; + GrGLSLVarying fXYD{kFloat3_GrSLType, GrGLSLVarying::Scope::kGeoToFrag}; }; /** @@ -53,7 +53,7 @@ class GrCCPRQuadraticHullShader : public GrCCPRQuadraticShader { void onEmitVaryings(GrGLSLVaryingHandler*, SkString* code) override; void onEmitFragmentCode(GrGLSLPPFragmentBuilder*, const char* outputCoverage) const override; - GrGLSLGeoToFrag fGrad{kFloat2_GrSLType}; + GrGLSLVarying fGrad{kFloat2_GrSLType, GrGLSLVarying::Scope::kGeoToFrag}; }; /** @@ -68,8 +68,8 @@ class GrCCPRQuadraticCornerShader : public GrCCPRQuadraticShader { void onEmitVaryings(GrGLSLVaryingHandler*, SkString* code) override; void onEmitFragmentCode(GrGLSLPPFragmentBuilder*, const char* outputCoverage) const override; - GrGLSLGeoToFrag fdXYDdx{kFloat3_GrSLType}; - GrGLSLGeoToFrag fdXYDdy{kFloat3_GrSLType}; + GrGLSLVarying fdXYDdx{kFloat3_GrSLType, GrGLSLVarying::Scope::kGeoToFrag}; + GrGLSLVarying fdXYDdy{kFloat3_GrSLType, GrGLSLVarying::Scope::kGeoToFrag}; }; #endif diff --git a/src/gpu/ccpr/GrCCPRTriangleShader.h b/src/gpu/ccpr/GrCCPRTriangleShader.h index 0d7fc8abde..6d0e2a2a2e 100644 --- a/src/gpu/ccpr/GrCCPRTriangleShader.h +++ b/src/gpu/ccpr/GrCCPRTriangleShader.h @@ -37,7 +37,7 @@ class GrCCPRTriangleEdgeShader : public GrCCPRCoverageProcessor::Shader { const char* coverage, const char* wind) override; void onEmitFragmentCode(GrGLSLPPFragmentBuilder*, const char* outputCoverage) const override; - GrGLSLGeoToFrag fCoverageTimesWind{kHalf_GrSLType}; + GrGLSLVarying fCoverageTimesWind{kHalf_GrSLType, GrGLSLVarying::Scope::kGeoToFrag}; }; /** @@ -55,11 +55,11 @@ class GrCCPRTriangleCornerShader : public GrCCPRCoverageProcessor::Shader { const char* coverage, const char* wind) override; void onEmitFragmentCode(GrGLSLPPFragmentBuilder* f, const char* outputCoverage) const override; - GrShaderVar fAABoxMatrices{"aa_box_matrices", kFloat2x2_GrSLType, 2}; - GrShaderVar fAABoxTranslates{"aa_box_translates", kFloat2_GrSLType, 2}; - GrShaderVar fGeoShaderBisects{"bisects", kFloat2_GrSLType, 2}; - GrGLSLGeoToFrag fCornerLocationInAABoxes{kFloat2x2_GrSLType}; - GrGLSLGeoToFrag fBisectInAABoxes{kFloat2x2_GrSLType}; + GrShaderVar fAABoxMatrices{"aa_box_matrices", kFloat2x2_GrSLType, 2}; + GrShaderVar fAABoxTranslates{"aa_box_translates", kFloat2_GrSLType, 2}; + GrShaderVar fGeoShaderBisects{"bisects", kFloat2_GrSLType, 2}; + GrGLSLVarying fCornerLocationInAABoxes{kFloat2x2_GrSLType, GrGLSLVarying::Scope::kGeoToFrag}; + GrGLSLVarying fBisectInAABoxes{kFloat2x2_GrSLType, GrGLSLVarying::Scope::kGeoToFrag}; }; #endif diff --git a/src/gpu/effects/GrAtlasedShaderHelpers.h b/src/gpu/effects/GrAtlasedShaderHelpers.h index ad901411db..99bbcc0606 100644 --- a/src/gpu/effects/GrAtlasedShaderHelpers.h +++ b/src/gpu/effects/GrAtlasedShaderHelpers.h @@ -16,9 +16,9 @@ static void append_index_uv_varyings(GrGLSLPrimitiveProcessor::EmitArgs& args, const char* inTexCoordsName, const char* atlasSizeInvName, - GrGLSLVertToFrag *uv, - GrGLSLVertToFrag *texIdx, - GrGLSLVertToFrag *st) { + GrGLSLVarying *uv, + GrGLSLVarying *texIdx, + GrGLSLVarying *st) { // This extracts the texture index and texel coordinates from the same variable // Packing structure: texel coordinates are multiplied by 2 (or shifted left 1) // texture index is stored as lower bits of both x and y @@ -43,7 +43,7 @@ static void append_index_uv_varyings(GrGLSLPrimitiveProcessor::EmitArgs& args, static void append_multitexture_lookup(GrGLSLPrimitiveProcessor::EmitArgs& args, int numTextureSamplers, - const GrGLSLVertToFrag &texIdx, + const GrGLSLVarying &texIdx, const char* coordName, const char* colorName) { // conditionally load from the indexed texture sampler diff --git a/src/gpu/effects/GrBezierEffect.cpp b/src/gpu/effects/GrBezierEffect.cpp index 5bc04c82ea..25148cde1b 100644 --- a/src/gpu/effects/GrBezierEffect.cpp +++ b/src/gpu/effects/GrBezierEffect.cpp @@ -77,7 +77,7 @@ void GrGLConicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { // emit attributes varyingHandler->emitAttributes(gp); - GrGLSLVertToFrag v(kFloat4_GrSLType); + GrGLSLVarying v(kFloat4_GrSLType); varyingHandler->addVarying("ConicCoeffs", &v); vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inConicCoeffs()->fName); @@ -329,7 +329,7 @@ void GrGLQuadEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { // emit attributes varyingHandler->emitAttributes(gp); - GrGLSLVertToFrag v(kHalf4_GrSLType); + GrGLSLVarying v(kHalf4_GrSLType); varyingHandler->addVarying("HairQuadEdge", &v); vertBuilder->codeAppendf("%s = %s;", v.vsOut(), gp.inHairQuadEdge()->fName); @@ -552,13 +552,13 @@ void GrGLCubicEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { const char* devkLMMatrixName; fDevKLMUniform = uniformHandler->addUniform(kVertex_GrShaderFlag, kFloat3x3_GrSLType, "KLM", &devkLMMatrixName); - GrGLSLVertToFrag v(kFloat3_GrSLType); + GrGLSLVarying v(kFloat3_GrSLType); varyingHandler->addVarying("CubicCoeffs", &v); vertBuilder->codeAppendf("%s = %s * float3(%s, 1);", v.vsOut(), devkLMMatrixName, gpArgs->fPositionVar.c_str()); - GrGLSLVertToFrag gradCoeffs(kFloat4_GrSLType); + GrGLSLVarying gradCoeffs(kFloat4_GrSLType); if (GrClipEdgeType::kFillAA == fEdgeType || GrClipEdgeType::kHairlineAA == fEdgeType) { varyingHandler->addVarying("GradCoeffs", &gradCoeffs); vertBuilder->codeAppendf("float k = %s[0], l = %s[1], m = %s[2];", diff --git a/src/gpu/effects/GrBitmapTextGeoProc.cpp b/src/gpu/effects/GrBitmapTextGeoProc.cpp index df71f70a1c..ae1340badc 100644 --- a/src/gpu/effects/GrBitmapTextGeoProc.cpp +++ b/src/gpu/effects/GrBitmapTextGeoProc.cpp @@ -37,8 +37,8 @@ public: "AtlasSizeInv", &atlasSizeInvName); - GrGLSLVertToFrag uv(kFloat2_GrSLType); - GrGLSLVertToFrag texIdx(kHalf_GrSLType); + GrGLSLVarying uv(kFloat2_GrSLType); + GrGLSLVarying texIdx(kHalf_GrSLType); append_index_uv_varyings(args, btgp.inTextureCoords()->fName, atlasSizeInvName, &uv, &texIdx, nullptr); diff --git a/src/gpu/effects/GrDistanceFieldGeoProc.cpp b/src/gpu/effects/GrDistanceFieldGeoProc.cpp index fda2f9d5c2..2747f55119 100644 --- a/src/gpu/effects/GrDistanceFieldGeoProc.cpp +++ b/src/gpu/effects/GrDistanceFieldGeoProc.cpp @@ -76,9 +76,9 @@ public: args.fFPCoordTransformHandler); // add varyings - GrGLSLVertToFrag uv(kFloat2_GrSLType); - GrGLSLVertToFrag texIdx(kHalf_GrSLType); - GrGLSLVertToFrag st(kFloat2_GrSLType); + GrGLSLVarying uv(kFloat2_GrSLType); + GrGLSLVarying texIdx(kHalf_GrSLType); + GrGLSLVarying st(kFloat2_GrSLType); append_index_uv_varyings(args, dfTexEffect.inTextureCoords()->fName, atlasSizeInvName, &uv, &texIdx, &st); @@ -342,9 +342,9 @@ public: "AtlasSizeInv", &atlasSizeInvName); - GrGLSLVertToFrag uv(kFloat2_GrSLType); - GrGLSLVertToFrag texIdx(kHalf_GrSLType); - GrGLSLVertToFrag st(kFloat2_GrSLType); + GrGLSLVarying uv(kFloat2_GrSLType); + GrGLSLVarying texIdx(kHalf_GrSLType); + GrGLSLVarying st(kFloat2_GrSLType); append_index_uv_varyings(args, dfTexEffect.inTextureCoords()->fName, atlasSizeInvName, &uv, &texIdx, &st); @@ -634,13 +634,13 @@ public: args.fFPCoordTransformHandler); // set up varyings - GrGLSLVertToFrag uv(kFloat2_GrSLType); - GrGLSLVertToFrag texIdx(kHalf_GrSLType); - GrGLSLVertToFrag st(kFloat2_GrSLType); + GrGLSLVarying uv(kFloat2_GrSLType); + GrGLSLVarying texIdx(kHalf_GrSLType); + GrGLSLVarying st(kFloat2_GrSLType); append_index_uv_varyings(args, dfTexEffect.inTextureCoords()->fName, atlasSizeInvName, &uv, &texIdx, &st); - GrGLSLVertToFrag delta(kFloat_GrSLType); + GrGLSLVarying delta(kFloat_GrSLType); varyingHandler->addVarying("Delta", &delta); if (dfTexEffect.getFlags() & kBGR_DistanceFieldEffectFlag) { vertBuilder->codeAppendf("%s = -%s.x/3.0;", delta.vsOut(), atlasSizeInvName); diff --git a/src/gpu/gl/GrGLVaryingHandler.cpp b/src/gpu/gl/GrGLVaryingHandler.cpp index 950fe3c9d4..eecc63e617 100644 --- a/src/gpu/gl/GrGLVaryingHandler.cpp +++ b/src/gpu/gl/GrGLVaryingHandler.cpp @@ -13,7 +13,7 @@ GrGLSLVaryingHandler::VaryingHandle GrGLVaryingHandler::addPathProcessingVarying( const char* name, - GrGLSLVertToFrag* v) { + GrGLSLVarying* v) { #ifdef SK_DEBUG GrGLProgramBuilder* glPB = (GrGLProgramBuilder*) fProgramBuilder; // This call is not used for non-NVPR backends. diff --git a/src/gpu/gl/GrGLVaryingHandler.h b/src/gpu/gl/GrGLVaryingHandler.h index 45d0fdd7d3..a8dbba0962 100644 --- a/src/gpu/gl/GrGLVaryingHandler.h +++ b/src/gpu/gl/GrGLVaryingHandler.h @@ -20,7 +20,7 @@ public: // This function is used by the NVPR PathProcessor to add a varying directly into the fragment // shader since there is no vertex shader. - VaryingHandle addPathProcessingVarying(const char* name, GrGLSLVertToFrag*); + VaryingHandle addPathProcessingVarying(const char* name, GrGLSLVarying*); private: void onFinalize() override; diff --git a/src/gpu/glsl/GrGLSLGeometryProcessor.cpp b/src/gpu/glsl/GrGLSLGeometryProcessor.cpp index 01322eddea..ab27ffaa7b 100644 --- a/src/gpu/glsl/GrGLSLGeometryProcessor.cpp +++ b/src/gpu/glsl/GrGLSLGeometryProcessor.cpp @@ -70,7 +70,7 @@ void GrGLSLGeometryProcessor::emitTransforms(GrGLSLVertexBuilder* vb, SkString strVaryingName; strVaryingName.printf("TransformedCoords_%d", i); - GrGLSLVertToFrag v(varyingType); + GrGLSLVarying v(varyingType); varyingHandler->addVarying(strVaryingName.c_str(), &v); SkASSERT(kFloat2_GrSLType == varyingType || kFloat3_GrSLType == varyingType); diff --git a/src/gpu/glsl/GrGLSLVarying.cpp b/src/gpu/glsl/GrGLSLVarying.cpp index f87076fcdb..4bcce0391a 100644 --- a/src/gpu/glsl/GrGLSLVarying.cpp +++ b/src/gpu/glsl/GrGLSLVarying.cpp @@ -12,7 +12,7 @@ void GrGLSLVaryingHandler::addPassThroughAttribute(const GrGeometryProcessor::Attribute* input, const char* output) { GrSLType type = GrVertexAttribTypeToSLType(input->fType); - GrGLSLVertToFrag v(type); + GrGLSLVarying v(type); this->addVarying(input->fName, &v); this->writePassThroughAttribute(input, output, v); } @@ -20,7 +20,7 @@ void GrGLSLVaryingHandler::addPassThroughAttribute(const GrGeometryProcessor::At void GrGLSLVaryingHandler::addFlatPassThroughAttribute(const GrGeometryProcessor::Attribute* input, const char* output) { GrSLType type = GrVertexAttribTypeToSLType(input->fType); - GrGLSLVertToFrag v(type); + GrGLSLVarying v(type); this->addFlatVarying(input->fName, &v); this->writePassThroughAttribute(input, output, v); } @@ -41,7 +41,7 @@ void GrGLSLVaryingHandler::internalAddVarying(const char* name, GrGLSLVarying* v v.fIsFlat = flat; fProgramBuilder->nameVariable(&v.fVsOut, 'v', name); v.fVisibility = kNone_GrShaderFlags; - if (varying->vsVarying()) { + if (varying->isInVertexShader()) { varying->fVsOut = v.fVsOut.c_str(); v.fVisibility |= kVertex_GrShaderFlag; } @@ -51,7 +51,7 @@ void GrGLSLVaryingHandler::internalAddVarying(const char* name, GrGLSLVarying* v varying->fGsOut = v.fGsOut.c_str(); v.fVisibility |= kGeometry_GrShaderFlag; } - if (varying->fsVarying()) { + if (varying->isInFragmentShader()) { varying->fFsIn = (willUseGeoShader ? v.fGsOut : v.fVsOut).c_str(); v.fVisibility |= kFragment_GrShaderFlag; } diff --git a/src/gpu/glsl/GrGLSLVarying.h b/src/gpu/glsl/GrGLSLVarying.h index eb370a7908..e6174a6197 100644 --- a/src/gpu/glsl/GrGLSLVarying.h +++ b/src/gpu/glsl/GrGLSLVarying.h @@ -18,54 +18,35 @@ class GrGLSLProgramBuilder; class GrGLSLVarying { public: - bool vsVarying() const { return kVertToFrag_Varying == fVarying || - kVertToGeo_Varying == fVarying; } - bool fsVarying() const { return kVertToFrag_Varying == fVarying || - kGeoToFrag_Varying == fVarying; } - const char* vsOut() const { return fVsOut; } - const char* gsIn() const { return fGsIn; } - const char* gsOut() const { return fGsOut; } - const char* fsIn() const { return fFsIn; } - GrSLType type() const { return fType; } - -protected: - enum Varying { - kVertToFrag_Varying, - kVertToGeo_Varying, - kGeoToFrag_Varying, + enum class Scope { + kVertToFrag, + kVertToGeo, + kGeoToFrag }; - GrGLSLVarying(GrSLType type, Varying varying) - : fVarying(varying), fType(type), fVsOut(nullptr), fGsIn(nullptr), fGsOut(nullptr), - fFsIn(nullptr) {} + GrGLSLVarying(GrSLType type, Scope scope = Scope::kVertToFrag) : fType(type), fScope(scope) {} - Varying fVarying; + GrSLType type() const { return fType; } + Scope scope() const { return fScope; } + bool isInVertexShader() const { return Scope::kGeoToFrag != fScope; } + bool isInFragmentShader() const { return Scope::kVertToGeo != fScope; } + + const char* vsOut() const { SkASSERT(this->isInVertexShader()); return fVsOut; } + const char* gsIn() const { return fGsIn; } + const char* gsOut() const { return fGsOut; } + const char* fsIn() const { SkASSERT(this->isInFragmentShader()); return fFsIn; } private: - GrSLType fType; - const char* fVsOut; - const char* fGsIn; - const char* fGsOut; - const char* fFsIn; + const GrSLType fType; + const Scope fScope; + const char* fVsOut = nullptr; + const char* fGsIn = nullptr; + const char* fGsOut = nullptr; + const char* fFsIn = nullptr; friend class GrGLSLVaryingHandler; }; -struct GrGLSLVertToFrag : public GrGLSLVarying { - GrGLSLVertToFrag(GrSLType type) - : GrGLSLVarying(type, kVertToFrag_Varying) {} -}; - -struct GrGLSLVertToGeo : public GrGLSLVarying { - GrGLSLVertToGeo(GrSLType type) - : GrGLSLVarying(type, kVertToGeo_Varying) {} -}; - -struct GrGLSLGeoToFrag : public GrGLSLVarying { - GrGLSLGeoToFrag(GrSLType type) - : GrGLSLVarying(type, kGeoToFrag_Varying) {} -}; - static const int kVaryingsPerBlock = 8; class GrGLSLVaryingHandler { diff --git a/src/gpu/ops/GrAAConvexPathRenderer.cpp b/src/gpu/ops/GrAAConvexPathRenderer.cpp index b706d68858..badaadd329 100644 --- a/src/gpu/ops/GrAAConvexPathRenderer.cpp +++ b/src/gpu/ops/GrAAConvexPathRenderer.cpp @@ -566,7 +566,7 @@ public: // emit attributes varyingHandler->emitAttributes(qe); - GrGLSLVertToFrag v(kHalf4_GrSLType); + GrGLSLVarying v(kHalf4_GrSLType); varyingHandler->addVarying("QuadEdge", &v); vertBuilder->codeAppendf("%s = %s;", v.vsOut(), qe.fInQuadEdge->fName); diff --git a/src/gpu/ops/GrDashOp.cpp b/src/gpu/ops/GrDashOp.cpp index 84b0e8f53d..583f7b2caf 100644 --- a/src/gpu/ops/GrDashOp.cpp +++ b/src/gpu/ops/GrDashOp.cpp @@ -909,12 +909,12 @@ void GLDashingCircleEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { varyingHandler->emitAttributes(dce); // XY are dashPos, Z is dashInterval - GrGLSLVertToFrag dashParams(kHalf3_GrSLType); + GrGLSLVarying dashParams(kHalf3_GrSLType); varyingHandler->addVarying("DashParam", &dashParams); vertBuilder->codeAppendf("%s = %s;", dashParams.vsOut(), dce.inDashParams()->fName); // x refers to circle radius - 0.5, y refers to cicle's center x coord - GrGLSLVertToFrag circleParams(kHalf2_GrSLType); + GrGLSLVarying circleParams(kHalf2_GrSLType); varyingHandler->addVarying("CircleParams", &circleParams); vertBuilder->codeAppendf("%s = %s;", circleParams.vsOut(), dce.inCircleParams()->fName); @@ -1111,13 +1111,13 @@ void GLDashingLineEffect::onEmitCode(EmitArgs& args, GrGPArgs* gpArgs) { varyingHandler->emitAttributes(de); // XY refers to dashPos, Z is the dash interval length - GrGLSLVertToFrag inDashParams(kFloat3_GrSLType); + GrGLSLVarying inDashParams(kFloat3_GrSLType); varyingHandler->addVarying("DashParams", &inDashParams); vertBuilder->codeAppendf("%s = %s;", inDashParams.vsOut(), de.inDashParams()->fName); // The rect uniform's xyzw refer to (left + 0.5, top + 0.5, right - 0.5, bottom - 0.5), // respectively. - GrGLSLVertToFrag inRectParams(kFloat4_GrSLType); + GrGLSLVarying inRectParams(kFloat4_GrSLType); varyingHandler->addVarying("RectParams", &inRectParams); vertBuilder->codeAppendf("%s = %s;", inRectParams.vsOut(), de.inRectParams()->fName); diff --git a/src/gpu/ops/GrMSAAPathRenderer.cpp b/src/gpu/ops/GrMSAAPathRenderer.cpp index 8097b7c73c..cc0e56d0ad 100644 --- a/src/gpu/ops/GrMSAAPathRenderer.cpp +++ b/src/gpu/ops/GrMSAAPathRenderer.cpp @@ -140,7 +140,7 @@ public: varyingHandler->emitAttributes(qp); varyingHandler->addPassThroughAttribute(qp.inColor(), args.fOutputColor); - GrGLSLVertToFrag uv(kFloat2_GrSLType); + GrGLSLVarying uv(kFloat2_GrSLType); varyingHandler->addVarying("uv", &uv); vsBuilder->codeAppendf("%s = %s;", uv.vsOut(), qp.inUV()->fName); diff --git a/src/gpu/ops/GrOvalOpFactory.cpp b/src/gpu/ops/GrOvalOpFactory.cpp index 3c4898f848..9194f673e6 100644 --- a/src/gpu/ops/GrOvalOpFactory.cpp +++ b/src/gpu/ops/GrOvalOpFactory.cpp @@ -272,12 +272,12 @@ private: // emit attributes varyingHandler->emitAttributes(egp); - GrGLSLVertToFrag ellipseOffsets(kHalf2_GrSLType); + GrGLSLVarying ellipseOffsets(kHalf2_GrSLType); varyingHandler->addVarying("EllipseOffsets", &ellipseOffsets); vertBuilder->codeAppendf("%s = %s;", ellipseOffsets.vsOut(), egp.fInEllipseOffset->fName); - GrGLSLVertToFrag ellipseRadii(kHalf4_GrSLType); + GrGLSLVarying ellipseRadii(kHalf4_GrSLType); varyingHandler->addVarying("EllipseRadii", &ellipseRadii); vertBuilder->codeAppendf("%s = %s;", ellipseRadii.vsOut(), egp.fInEllipseRadii->fName); @@ -412,11 +412,11 @@ private: // emit attributes varyingHandler->emitAttributes(diegp); - GrGLSLVertToFrag offsets0(kHalf2_GrSLType); + GrGLSLVarying offsets0(kHalf2_GrSLType); varyingHandler->addVarying("EllipseOffsets0", &offsets0); vertBuilder->codeAppendf("%s = %s;", offsets0.vsOut(), diegp.fInEllipseOffsets0->fName); - GrGLSLVertToFrag offsets1(kHalf2_GrSLType); + GrGLSLVarying offsets1(kHalf2_GrSLType); varyingHandler->addVarying("EllipseOffsets1", &offsets1); vertBuilder->codeAppendf("%s = %s;", offsets1.vsOut(), diegp.fInEllipseOffsets1->fName); |