| Index: src/gpu/effects/GrConvolutionEffect.cpp
|
| diff --git a/src/gpu/effects/GrConvolutionEffect.cpp b/src/gpu/effects/GrConvolutionEffect.cpp
|
| index 8e05f4789b7a067810d4ba8413b4b6b3afaf1db7..fb68a29420cf5dd72b6e030857d1f8ca36b1cf0e 100644
|
| --- a/src/gpu/effects/GrConvolutionEffect.cpp
|
| +++ b/src/gpu/effects/GrConvolutionEffect.cpp
|
| @@ -8,8 +8,8 @@
|
| #include "GrConvolutionEffect.h"
|
| #include "glsl/GrGLSLFragmentProcessor.h"
|
| #include "glsl/GrGLSLFragmentShaderBuilder.h"
|
| -#include "glsl/GrGLSLProgramBuilder.h"
|
| #include "glsl/GrGLSLProgramDataManager.h"
|
| +#include "glsl/GrGLSLUniformHandler.h"
|
|
|
| // For brevity
|
| typedef GrGLSLProgramDataManager::UniformHandle UniformHandle;
|
| @@ -48,17 +48,18 @@ GrGLConvolutionEffect::GrGLConvolutionEffect(const GrProcessor& processor) {
|
| }
|
|
|
| void GrGLConvolutionEffect::emitCode(EmitArgs& args) {
|
| - fImageIncrementUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibility,
|
| - kVec2f_GrSLType, kDefault_GrSLPrecision,
|
| - "ImageIncrement");
|
| + GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
|
| + fImageIncrementUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibility,
|
| + kVec2f_GrSLType, kDefault_GrSLPrecision,
|
| + "ImageIncrement");
|
| if (this->useBounds()) {
|
| - fBoundsUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibility,
|
| - kVec2f_GrSLType, kDefault_GrSLPrecision,
|
| - "Bounds");
|
| + fBoundsUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragment_Visibility,
|
| + kVec2f_GrSLType, kDefault_GrSLPrecision,
|
| + "Bounds");
|
| }
|
| - fKernelUni = args.fBuilder->addUniformArray(GrGLSLProgramBuilder::kFragment_Visibility,
|
| - kFloat_GrSLType, kDefault_GrSLPrecision,
|
| - "Kernel", this->width());
|
| + fKernelUni = uniformHandler->addUniformArray(GrGLSLUniformHandler::kFragment_Visibility,
|
| + kFloat_GrSLType, kDefault_GrSLPrecision,
|
| + "Kernel", this->width());
|
|
|
| GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
|
| SkString coords2D = fragBuilder->ensureFSCoords2D(args.fCoords, 0);
|
| @@ -66,8 +67,8 @@ void GrGLConvolutionEffect::emitCode(EmitArgs& args) {
|
| fragBuilder->codeAppendf("\t\t%s = vec4(0, 0, 0, 0);\n", args.fOutputColor);
|
|
|
| int width = this->width();
|
| - const GrGLSLShaderVar& kernel = args.fBuilder->getUniformVariable(fKernelUni);
|
| - const char* imgInc = args.fBuilder->getUniformCStr(fImageIncrementUni);
|
| + const GrGLSLShaderVar& kernel = uniformHandler->getUniformVariable(fKernelUni);
|
| + const char* imgInc = uniformHandler->getUniformCStr(fImageIncrementUni);
|
|
|
| fragBuilder->codeAppendf("\t\tvec2 coord = %s - %d.0 * %s;\n", coords2D.c_str(), fRadius, imgInc);
|
|
|
| @@ -82,7 +83,7 @@ void GrGLConvolutionEffect::emitCode(EmitArgs& args) {
|
| // 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 = args.fBuilder->getUniformCStr(fBoundsUni);
|
| + const char* bounds = uniformHandler->getUniformCStr(fBoundsUni);
|
| const char* component = this->direction() == Gr1DKernelEffect::kY_Direction ? "y" : "x";
|
| fragBuilder->codeAppendf("if (coord.%s >= %s.x && coord.%s <= %s.y) {",
|
| component, bounds, component, bounds);
|
|
|