Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Unified Diff: src/gpu/effects/GrConvolutionEffect.cpp

Issue 1251173002: Added GrGLFragmentProcessor::EmitArgs struct for use with emitCode() (Closed) Base URL: https://skia.googlesource.com/skia@composeshader_gpu
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/gpu/effects/GrConvolutionEffect.cpp
diff --git a/src/gpu/effects/GrConvolutionEffect.cpp b/src/gpu/effects/GrConvolutionEffect.cpp
index c8c3781ef44765e9d8f79f382a477e0438fed84e..07c7806db602280df5220234487802aaf4a54775 100644
--- a/src/gpu/effects/GrConvolutionEffect.cpp
+++ b/src/gpu/effects/GrConvolutionEffect.cpp
@@ -81,12 +81,7 @@ class GrGLBoundedConvolutionEffect : public GrGLConvolutionEffect {
public:
GrGLBoundedConvolutionEffect(const GrProcessor& processor) : INHERITED(processor) {}
- virtual void emitCode(GrGLFPBuilder*,
- const GrFragmentProcessor&,
- const char* outputColor,
- const char* inputColor,
- const TransformedCoordsArray&,
- const TextureSamplerArray&) override;
+ virtual void emitCode(EmitArgs&) override;
void setData(const GrGLProgramDataManager& pdman, const GrProcessor&) override;
@@ -98,30 +93,25 @@ private:
typedef GrGLConvolutionEffect INHERITED;
};
-void GrGLBoundedConvolutionEffect::emitCode(GrGLFPBuilder* builder,
- const GrFragmentProcessor& processor,
- const char* outputColor,
- const char* inputColor,
- const TransformedCoordsArray& coords,
- const TextureSamplerArray& samplers) {
+void GrGLBoundedConvolutionEffect::emitCode(EmitArgs& args) {
fImageIncrementUni =
- builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, kVec2f_GrSLType,
+ args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility, kVec2f_GrSLType,
kDefault_GrSLPrecision, "ImageIncrement");
- fBoundsUni = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, kVec2f_GrSLType,
+ fBoundsUni = args.fBuilder->addUniform(GrGLProgramBuilder::kFragment_Visibility, kVec2f_GrSLType,
joshualitt 2015/07/22 19:34:05 line wrap @100
kDefault_GrSLPrecision, "Bounds");
- fKernelUni = builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibility, kFloat_GrSLType,
+ fKernelUni = args.fBuilder->addUniformArray(GrGLProgramBuilder::kFragment_Visibility, kFloat_GrSLType,
joshualitt 2015/07/22 19:34:05 line wrap @100
kDefault_GrSLPrecision, "Kernel", this->width());
- GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder();
- SkString coords2D = fsBuilder->ensureFSCoords2D(coords, 0);
+ GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder();
+ SkString coords2D = fsBuilder->ensureFSCoords2D(args.fCoords, 0);
- fsBuilder->codeAppendf("%s = vec4(0, 0, 0, 0);\n", outputColor);
+ fsBuilder->codeAppendf("%s = vec4(0, 0, 0, 0);\n", args.fOutputColor);
int width = this->width();
- const GrGLShaderVar& kernel = builder->getUniformVariable(fKernelUni);
- const char* imgInc = builder->getUniformCStr(fImageIncrementUni);
+ const GrGLShaderVar& kernel = args.fBuilder->getUniformVariable(fKernelUni);
+ const char* imgInc = args.fBuilder->getUniformCStr(fImageIncrementUni);
fsBuilder->codeAppendf("vec2 coord = %s - %d.0 * %s;\n", coords2D.c_str(), this->radius(),
imgInc);
@@ -135,19 +125,19 @@ void GrGLBoundedConvolutionEffect::emitCode(GrGLFPBuilder* builder,
// We used to compute a bool indicating whether we're in bounds or not, cast it to a
// float, and then mul weight*texture_sample by the float. However, the Adreno 430 seems
// to have a bug that caused corruption.
- const char* bounds = builder->getUniformCStr(fBoundsUni);
+ const char* bounds = args.fBuilder->getUniformCStr(fBoundsUni);
const char* component = this->direction() == Gr1DKernelEffect::kY_Direction ? "y" : "x";
fsBuilder->codeAppendf("if (coord.%s >= %s.x && coord.%s <= %s.y) {",
component, bounds, component, bounds);
- fsBuilder->codeAppendf("%s += ", outputColor);
- fsBuilder->appendTextureLookup(samplers[0], "coord");
+ fsBuilder->codeAppendf("%s += ", args.fOutputColor);
+ fsBuilder->appendTextureLookup(args.fSamplers[0], "coord");
fsBuilder->codeAppendf(" * %s;\n", kernelIndex.c_str());
fsBuilder->codeAppend("}");
fsBuilder->codeAppendf("coord += %s;\n", imgInc);
}
SkString modulate;
- GrGLSLMulVarBy4f(&modulate, outputColor, inputColor);
+ GrGLSLMulVarBy4f(&modulate, args.fOutputColor, args.fInputColor);
fsBuilder->codeAppend(modulate.c_str());
}
@@ -185,12 +175,7 @@ class GrGLLerpConvolutionEffect : public GrGLConvolutionEffect {
public:
GrGLLerpConvolutionEffect(const GrProcessor& processor) : INHERITED(processor) {}
- virtual void emitCode(GrGLFPBuilder*,
- const GrFragmentProcessor&,
- const char* outputColor,
- const char* inputColor,
- const TransformedCoordsArray&,
- const TextureSamplerArray&) override;
+ virtual void emitCode(EmitArgs&) override;
void setData(const GrGLProgramDataManager& pdman, const GrProcessor&) override;
@@ -204,12 +189,7 @@ private:
typedef GrGLConvolutionEffect INHERITED;
};
-void GrGLLerpConvolutionEffect::emitCode(GrGLFPBuilder* builder,
- const GrFragmentProcessor& processor,
- const char* outputColor,
- const char* inputColor,
- const TransformedCoordsArray& coords,
- const TextureSamplerArray& samplers) {
+void GrGLLerpConvolutionEffect::emitCode(EmitArgs& args) {
int sampleCount = bilerpSampleCount();
// We use 2 * sampleCount uniforms. The maximum allowed by PS2.0 is 32, so
@@ -219,19 +199,19 @@ void GrGLLerpConvolutionEffect::emitCode(GrGLFPBuilder* builder,
SkASSERT(sampleCount < 16);
fSampleOffsetUni =
- builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibility, kVec2f_GrSLType,
+ args.fBuilder->addUniformArray(GrGLProgramBuilder::kFragment_Visibility, kVec2f_GrSLType,
kDefault_GrSLPrecision, "SampleOffset", sampleCount);
fSampleWeightUni =
- builder->addUniformArray(GrGLProgramBuilder::kFragment_Visibility, kFloat_GrSLType,
+ args.fBuilder->addUniformArray(GrGLProgramBuilder::kFragment_Visibility, kFloat_GrSLType,
kDefault_GrSLPrecision, "SampleWeight", sampleCount);
- GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder();
- SkString coords2D = fsBuilder->ensureFSCoords2D(coords, 0);
+ GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder();
+ SkString coords2D = fsBuilder->ensureFSCoords2D(args.fCoords, 0);
- fsBuilder->codeAppendf("%s = vec4(0, 0, 0, 0);\n", outputColor);
+ fsBuilder->codeAppendf("%s = vec4(0, 0, 0, 0);\n", args.fOutputColor);
- const GrGLShaderVar& kernel = builder->getUniformVariable(fSampleWeightUni);
- const GrGLShaderVar& imgInc = builder->getUniformVariable(fSampleOffsetUni);
+ const GrGLShaderVar& kernel = args.fBuilder->getUniformVariable(fSampleWeightUni);
+ const GrGLShaderVar& imgInc = args.fBuilder->getUniformVariable(fSampleOffsetUni);
fsBuilder->codeAppendf("vec2 coord; \n");
@@ -244,13 +224,13 @@ void GrGLLerpConvolutionEffect::emitCode(GrGLFPBuilder* builder,
kernel.appendArrayAccess(index.c_str(), &weightIndex);
imgInc.appendArrayAccess(index.c_str(), &offsetIndex);
fsBuilder->codeAppendf("coord = %s + %s;\n", coords2D.c_str(), offsetIndex.c_str());
- fsBuilder->codeAppendf("%s += ", outputColor);
- fsBuilder->appendTextureLookup(samplers[0], "coord");
+ fsBuilder->codeAppendf("%s += ", args.fOutputColor);
+ fsBuilder->appendTextureLookup(args.fSamplers[0], "coord");
fsBuilder->codeAppendf(" * %s;\n", weightIndex.c_str());
}
SkString modulate;
- GrGLSLMulVarBy4f(&modulate, outputColor, inputColor);
+ GrGLSLMulVarBy4f(&modulate, args.fOutputColor, args.fInputColor);
fsBuilder->codeAppend(modulate.c_str());
}

Powered by Google App Engine
This is Rietveld 408576698