Respect color space in GrTextureDomainEffect

Forgot that this was plumbed in, but not being used. From local testing,
fixes color correctness in a variety of real world content.

BUG=skia:

Change-Id: Iad4cdf38da03719d1af144a9094c16d545139114
Reviewed-on: https://skia-review.googlesource.com/6296
Commit-Queue: Brian Osman <brianosman@google.com>
Reviewed-by: Robert Phillips <robertphillips@google.com>
diff --git a/src/gpu/effects/GrTextureDomain.cpp b/src/gpu/effects/GrTextureDomain.cpp
index dd43b15..c9bf545 100644
--- a/src/gpu/effects/GrTextureDomain.cpp
+++ b/src/gpu/effects/GrTextureDomain.cpp
@@ -10,6 +10,7 @@
 #include "GrShaderCaps.h"
 #include "GrSimpleTextureEffect.h"
 #include "SkFloatingPoint.h"
+#include "glsl/GrGLSLColorSpaceXformHelper.h"
 #include "glsl/GrGLSLFragmentProcessor.h"
 #include "glsl/GrGLSLFragmentShaderBuilder.h"
 #include "glsl/GrGLSLProgramDataManager.h"
@@ -50,7 +51,8 @@
                                               const char* outColor,
                                               const SkString& inCoords,
                                               GrGLSLFragmentProcessor::SamplerHandle sampler,
-                                              const char* inModulateColor) {
+                                              const char* inModulateColor,
+                                              GrGLSLColorSpaceXformHelper* colorXformHelper) {
     SkASSERT((Mode)-1 == fMode || textureDomain.mode() == fMode);
     SkDEBUGCODE(fMode = textureDomain.mode();)
 
@@ -69,8 +71,8 @@
     switch (textureDomain.mode()) {
         case kIgnore_Mode: {
             builder->codeAppendf("%s = ", outColor);
-            builder->appendTextureLookupAndModulate(inModulateColor, sampler,
-                                                      inCoords.c_str());
+            builder->appendTextureLookupAndModulate(inModulateColor, sampler, inCoords.c_str(),
+                                                    kVec2f_GrSLType, colorXformHelper);
             builder->codeAppend(";");
             break;
         }
@@ -80,8 +82,8 @@
                                   inCoords.c_str(), fDomainName.c_str(), fDomainName.c_str());
 
             builder->codeAppendf("%s = ", outColor);
-            builder->appendTextureLookupAndModulate(inModulateColor, sampler,
-                                                      clampedCoords.c_str());
+            builder->appendTextureLookupAndModulate(inModulateColor, sampler, clampedCoords.c_str(),
+                                                    kVec2f_GrSLType, colorXformHelper);
             builder->codeAppend(";");
             break;
         }
@@ -99,8 +101,8 @@
                 // result=white;" code fails to compile.
                 builder->codeAppend("vec4 outside = vec4(0.0, 0.0, 0.0, 0.0);");
                 builder->codeAppend("vec4 inside = ");
-                builder->appendTextureLookupAndModulate(inModulateColor, sampler,
-                                                          inCoords.c_str());
+                builder->appendTextureLookupAndModulate(inModulateColor, sampler, inCoords.c_str(),
+                                                        kVec2f_GrSLType, colorXformHelper);
                 builder->codeAppend(";");
 
                 builder->codeAppendf("highp float x = (%s).x;", inCoords.c_str());
@@ -120,8 +122,8 @@
                                        domain);
                 builder->codeAppendf("%s = any(outside) ? vec4(0.0, 0.0, 0.0, 0.0) : ",
                                        outColor);
-                builder->appendTextureLookupAndModulate(inModulateColor, sampler,
-                                                          inCoords.c_str());
+                builder->appendTextureLookupAndModulate(inModulateColor, sampler, inCoords.c_str(),
+                                                        kVec2f_GrSLType, colorXformHelper);
                 builder->codeAppend(";");
             }
             break;
@@ -133,8 +135,8 @@
                                  fDomainName.c_str(), fDomainName.c_str());
 
             builder->codeAppendf("%s = ", outColor);
-            builder->appendTextureLookupAndModulate(inModulateColor, sampler,
-                                                      clampedCoords.c_str());
+            builder->appendTextureLookupAndModulate(inModulateColor, sampler, clampedCoords.c_str(),
+                                                    kVec2f_GrSLType, colorXformHelper);
             builder->codeAppend(";");
             break;
         }
@@ -213,6 +215,10 @@
 
             GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder;
             SkString coords2D = fragBuilder->ensureCoords2D(args.fTransformedCoords[0]);
+
+            GrGLSLColorSpaceXformHelper colorSpaceHelper(args.fUniformHandler,
+                                                         tde.colorSpaceXform(),
+                                                         &fColorSpaceXformUni);
             fGLDomain.sampleTexture(fragBuilder,
                                     args.fUniformHandler,
                                     args.fShaderCaps,
@@ -220,7 +226,8 @@
                                     args.fOutputColor,
                                     coords2D,
                                     args.fTexSamplers[0],
-                                    args.fInputColor);
+                                    args.fInputColor,
+                                    &colorSpaceHelper);
         }
 
     protected:
@@ -228,11 +235,14 @@
             const GrTextureDomainEffect& tde = fp.cast<GrTextureDomainEffect>();
             const GrTextureDomain& domain = tde.fTextureDomain;
             fGLDomain.setData(pdman, domain, tde.textureSampler(0).texture()->origin());
+            if (SkToBool(tde.colorSpaceXform())) {
+                pdman.setSkMatrix44(fColorSpaceXformUni, tde.colorSpaceXform()->srcToDst());
+            }
         }
 
     private:
         GrTextureDomain::GLDomain         fGLDomain;
-
+        UniformHandle                     fColorSpaceXformUni;
     };
 
     return new GLSLProcessor;