aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu
diff options
context:
space:
mode:
authorGravatar Chris Dalton <csmartdalton@google.com>2017-12-08 13:34:21 -0700
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-12-08 20:57:28 +0000
commit27372888a5c7698f51069bd5b5beea3e85b66668 (patch)
tree2fb60b65f286fe7da33467918198ad731cef708d /src/gpu
parentbe4ffab4e208ec47b4298621b9c9e8456f31717e (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.cpp2
-rw-r--r--src/gpu/GrPathProcessor.cpp2
-rw-r--r--src/gpu/ccpr/GrCCPRCoverageProcessor.h2
-rw-r--r--src/gpu/ccpr/GrCCPRCubicShader.h12
-rw-r--r--src/gpu/ccpr/GrCCPRPathProcessor.cpp4
-rw-r--r--src/gpu/ccpr/GrCCPRQuadraticShader.h12
-rw-r--r--src/gpu/ccpr/GrCCPRTriangleShader.h12
-rw-r--r--src/gpu/effects/GrAtlasedShaderHelpers.h8
-rw-r--r--src/gpu/effects/GrBezierEffect.cpp8
-rw-r--r--src/gpu/effects/GrBitmapTextGeoProc.cpp4
-rw-r--r--src/gpu/effects/GrDistanceFieldGeoProc.cpp20
-rw-r--r--src/gpu/gl/GrGLVaryingHandler.cpp2
-rw-r--r--src/gpu/gl/GrGLVaryingHandler.h2
-rw-r--r--src/gpu/glsl/GrGLSLGeometryProcessor.cpp2
-rw-r--r--src/gpu/glsl/GrGLSLVarying.cpp8
-rw-r--r--src/gpu/glsl/GrGLSLVarying.h59
-rw-r--r--src/gpu/ops/GrAAConvexPathRenderer.cpp2
-rw-r--r--src/gpu/ops/GrDashOp.cpp8
-rw-r--r--src/gpu/ops/GrMSAAPathRenderer.cpp2
-rw-r--r--src/gpu/ops/GrOvalOpFactory.cpp8
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);