| Index: src/gpu/glsl/GrGLSLXferProcessor.cpp
|
| diff --git a/src/gpu/glsl/GrGLSLXferProcessor.cpp b/src/gpu/glsl/GrGLSLXferProcessor.cpp
|
| index f0f5efd37ba2f174318a81cd7d0130328ccfd488..0f7a3db718fa44e3c2b0c1d52b49a92e49e01bc2 100644
|
| --- a/src/gpu/glsl/GrGLSLXferProcessor.cpp
|
| +++ b/src/gpu/glsl/GrGLSLXferProcessor.cpp
|
| @@ -22,6 +22,8 @@ void GrGLSLXferProcessor::emitCode(const EmitArgs& args) {
|
| GrGLSLUniformHandler* uniformHandler = args.fUniformHandler;
|
| const char* dstColor = fragBuilder->dstColor();
|
|
|
| + bool needsLocalOutColor = false;
|
| +
|
| if (args.fXP.getDstTexture()) {
|
| bool topDown = kTopLeft_GrSurfaceOrigin == args.fXP.getDstTexture()->origin();
|
|
|
| @@ -59,6 +61,15 @@ void GrGLSLXferProcessor::emitCode(const EmitArgs& args) {
|
| fragBuilder->codeAppendf("vec4 %s = ", dstColor);
|
| fragBuilder->appendTextureLookup(args.fTexSamplers[0], "_dstTexCoord", kVec2f_GrSLType);
|
| fragBuilder->codeAppend(";");
|
| + } else {
|
| + needsLocalOutColor = args.fGLSLCaps->requiresLocalOutputColorForFBFetch();
|
| + }
|
| +
|
| + const char* outColor = "_localColorOut";
|
| + if (!needsLocalOutColor) {
|
| + outColor = args.fOutputPrimary;
|
| + } else {
|
| + fragBuilder->codeAppendf("vec4 %s;", outColor);
|
| }
|
|
|
| this->emitBlendCodeForDstRead(fragBuilder,
|
| @@ -66,9 +77,12 @@ void GrGLSLXferProcessor::emitCode(const EmitArgs& args) {
|
| args.fInputColor,
|
| args.fInputCoverage,
|
| dstColor,
|
| - args.fOutputPrimary,
|
| + outColor,
|
| args.fOutputSecondary,
|
| args.fXP);
|
| + if (needsLocalOutColor) {
|
| + fragBuilder->codeAppendf("%s = %s;", args.fOutputPrimary, outColor);
|
| + }
|
| }
|
|
|
| void GrGLSLXferProcessor::setData(const GrGLSLProgramDataManager& pdm, const GrXferProcessor& xp) {
|
|
|