Reland r6330 thru r6333 but do without enabling GL_ARB_fragment_coord_conventions on Intel GPUs.



git-svn-id: http://skia.googlecode.com/svn/trunk@6048 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index ddb3193..07acde3 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -42,14 +42,7 @@
 }
 
 void setUniformNormal3(const GrGLUniformManager& uman, UniformHandle uni, const SkPoint3& point) {
-    setUniformPoint3(uman, uni, SkPoint3(point.fX, -point.fY, point.fZ));
-}
-
-void setUniformPoint3FlipY(const GrGLUniformManager& uman,
-                           UniformHandle uni,
-                           const SkPoint3& point,
-                           int height) {
-    setUniformPoint3(uman, uni, SkPoint3(point.fX, height-point.fY, point.fZ));
+    setUniformPoint3(uman, uni, SkPoint3(point.fX, point.fY, point.fZ));
 }
 #endif
 
@@ -376,12 +369,12 @@
     virtual void setupVariables(GrGLShaderBuilder* builder);
     virtual void emitVS(SkString* out) const {}
     virtual void emitFuncs(GrGLShaderBuilder* builder) {}
-    virtual void emitSurfaceToLight(const GrGLShaderBuilder*,
+    virtual void emitSurfaceToLight(GrGLShaderBuilder*,
                                     SkString* out,
                                     const char* z) const = 0;
     virtual void emitLightColor(GrGLShaderBuilder*,
                                 const char *surfaceToLight) const;
-    virtual void setData(const GrGLUniformManager&, const GrRenderTarget* rt, const SkLight* light) const;
+    virtual void setData(const GrGLUniformManager&, const SkLight* light) const;
 
 private:
     typedef SkRefCnt INHERITED;
@@ -396,8 +389,8 @@
 public:
     virtual ~GrGLDistantLight() {}
     virtual void setupVariables(GrGLShaderBuilder* builder) SK_OVERRIDE;
-    virtual void setData(const GrGLUniformManager&, const GrRenderTarget* rt, const SkLight* light) const SK_OVERRIDE;
-    virtual void emitSurfaceToLight(const GrGLShaderBuilder*,
+    virtual void setData(const GrGLUniformManager&, const SkLight* light) const SK_OVERRIDE;
+    virtual void emitSurfaceToLight(GrGLShaderBuilder*,
                                     SkString* out,
                                     const char* z) const SK_OVERRIDE;
 private:
@@ -411,9 +404,9 @@
 public:
     virtual ~GrGLPointLight() {}
     virtual void setupVariables(GrGLShaderBuilder* builder) SK_OVERRIDE;
-    virtual void setData(const GrGLUniformManager&, const GrRenderTarget* rt, const SkLight* light) const SK_OVERRIDE;
+    virtual void setData(const GrGLUniformManager&, const SkLight* light) const SK_OVERRIDE;
     virtual void emitVS(SkString* out) const SK_OVERRIDE;
-    virtual void emitSurfaceToLight(const GrGLShaderBuilder*,
+    virtual void emitSurfaceToLight(GrGLShaderBuilder*,
                                     SkString* out,
                                     const char* z) const SK_OVERRIDE;
 private:
@@ -428,10 +421,10 @@
 public:
     virtual ~GrGLSpotLight() {}
     virtual void setupVariables(GrGLShaderBuilder* builder) SK_OVERRIDE;
-    virtual void setData(const GrGLUniformManager&, const GrRenderTarget* rt, const SkLight* light) const SK_OVERRIDE;
+    virtual void setData(const GrGLUniformManager&, const SkLight* light) const SK_OVERRIDE;
     virtual void emitVS(SkString* out) const SK_OVERRIDE;
     virtual void emitFuncs(GrGLShaderBuilder* builder);
-    virtual void emitSurfaceToLight(const GrGLShaderBuilder* builder,
+    virtual void emitSurfaceToLight(GrGLShaderBuilder* builder,
                                     SkString* out,
                                     const char* z) const SK_OVERRIDE;
     virtual void emitLightColor(GrGLShaderBuilder*,
@@ -964,10 +957,7 @@
 
     static inline StageKey GenKey(const GrCustomStage& s, const GrGLCaps& caps);
 
-    virtual void setData(const GrGLUniformManager&,
-                         const GrCustomStage&,
-                         const GrRenderTarget*,
-                         int stageNum) SK_OVERRIDE;
+    virtual void setData(const GrGLUniformManager&, const GrCustomStage&) SK_OVERRIDE;
 
 private:
     typedef GrGLProgramStage INHERITED;
@@ -985,10 +975,7 @@
                               const GrCustomStage& stage);
     virtual void setupVariables(GrGLShaderBuilder* builder) SK_OVERRIDE;
     virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) SK_OVERRIDE;
-    virtual void setData(const GrGLUniformManager&,
-                         const GrCustomStage&,
-                         const GrRenderTarget*,
-                         int stageNum) SK_OVERRIDE;
+    virtual void setData(const GrGLUniformManager&, const GrCustomStage&) SK_OVERRIDE;
 
 private:
     typedef GrGLLightingEffect INHERITED;
@@ -1004,10 +991,7 @@
                                const GrCustomStage& stage);
     virtual void setupVariables(GrGLShaderBuilder* builder) SK_OVERRIDE;
     virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) SK_OVERRIDE;
-    virtual void setData(const GrGLUniformManager&,
-                         const GrCustomStage&,
-                         const GrRenderTarget*,
-                         int stageNum) SK_OVERRIDE;
+    virtual void setData(const GrGLUniformManager&, const GrCustomStage&) SK_OVERRIDE;
 
 private:
     typedef GrGLLightingEffect INHERITED;
@@ -1133,7 +1117,7 @@
                           "pointToNormal",
                           SK_ARRAY_COUNT(gPointToNormalArgs),
                           gPointToNormalArgs,
-                          "\treturn normalize(vec3(-x * scale, -y * scale, 1));\n",
+                          "\treturn normalize(vec3(-x * scale, y * scale, 1));\n",
                           &pointToNormalName);
 
     static const GrGLShaderVar gInteriorNormalArgs[] =  {
@@ -1189,17 +1173,14 @@
     return static_cast<const GrLightingEffect&>(s).light()->type();
 }
 
-void GrGLLightingEffect::setData(const GrGLUniformManager& uman,
-                                 const GrCustomStage& data,
-                                 const GrRenderTarget* rt,
-                                 int stageNum) {
+void GrGLLightingEffect::setData(const GrGLUniformManager& uman, const GrCustomStage& data) {
     const GrLightingEffect& effect =
         static_cast<const GrLightingEffect&>(data);
     GrGLTexture* texture = static_cast<GrGLTexture*>(data.texture(0));
     float ySign = texture->orientation() == GrGLTexture::kTopDown_Orientation ? -1.0f : 1.0f;
     uman.set2f(fImageIncrementUni, 1.0f / texture->width(), ySign / texture->height());
     uman.set1f(fSurfaceScaleUni, effect.surfaceScale());
-    fLight->setData(uman, rt, effect.light());
+    fLight->setData(uman, effect.light());
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1236,11 +1217,8 @@
                           funcName);
 }
 
-void GrGLDiffuseLightingEffect::setData(const GrGLUniformManager& uman,
-                                        const GrCustomStage& data,
-                                        const GrRenderTarget* rt,
-                                        int stageNum) {
-    INHERITED::setData(uman, data, rt, stageNum);
+void GrGLDiffuseLightingEffect::setData(const GrGLUniformManager& uman, const GrCustomStage& data) {
+    INHERITED::setData(uman, data);
     const GrDiffuseLightingEffect& effect =
         static_cast<const GrDiffuseLightingEffect&>(data);
     uman.set1f(fKDUni, effect.kd());
@@ -1319,10 +1297,8 @@
 }
 
 void GrGLSpecularLightingEffect::setData(const GrGLUniformManager& uman,
-                                         const GrCustomStage& data,
-                                         const GrRenderTarget* rt,
-                                         int stageNum) {
-    INHERITED::setData(uman, data, rt, stageNum);
+                                         const GrCustomStage& data) {
+    INHERITED::setData(uman, data);
     const GrSpecularLightingEffect& effect = static_cast<const GrSpecularLightingEffect&>(data);
     uman.set1f(fKSUni, effect.ks());
     uman.set1f(fShininessUni, effect.shininess());
@@ -1342,7 +1318,6 @@
 }
 
 void GrGLLight::setData(const GrGLUniformManager& uman,
-                        const GrRenderTarget* rt,
                         const SkLight* light) const {
     setUniformPoint3(uman, fColorUni, light->color() * SkScalarInvert(SkIntToScalar(255)));
 }
@@ -1355,16 +1330,14 @@
                                         "LightDirection");
 }
 
-void GrGLDistantLight::setData(const GrGLUniformManager& uman,
-                               const GrRenderTarget* rt,
-                               const SkLight* light) const {
-    INHERITED::setData(uman, rt, light);
+void GrGLDistantLight::setData(const GrGLUniformManager& uman, const SkLight* light) const {
+    INHERITED::setData(uman, light);
     SkASSERT(light->type() == SkLight::kDistant_LightType);
     const SkDistantLight* distantLight = static_cast<const SkDistantLight*>(light);
     setUniformNormal3(uman, fDirectionUni, distantLight->direction());
 }
 
-void GrGLDistantLight::emitSurfaceToLight(const GrGLShaderBuilder* builder,
+void GrGLDistantLight::emitSurfaceToLight(GrGLShaderBuilder* builder,
                                           SkString* out,
                                           const char* z) const {
     const char* dir = builder->getUniformCStr(fDirectionUni);
@@ -1380,22 +1353,21 @@
 }
 
 void GrGLPointLight::setData(const GrGLUniformManager& uman,
-                             const GrRenderTarget* rt,
                              const SkLight* light) const {
-    INHERITED::setData(uman, rt, light);
+    INHERITED::setData(uman, light);
     SkASSERT(light->type() == SkLight::kPoint_LightType);
     const SkPointLight* pointLight = static_cast<const SkPointLight*>(light);
-    setUniformPoint3FlipY(uman, fLocationUni, pointLight->location(), rt->height());
+    setUniformPoint3(uman, fLocationUni, pointLight->location());
 }
 
 void GrGLPointLight::emitVS(SkString* out) const {
 }
 
-void GrGLPointLight::emitSurfaceToLight(const GrGLShaderBuilder* builder,
+void GrGLPointLight::emitSurfaceToLight(GrGLShaderBuilder* builder,
                                         SkString* out,
                                         const char* z) const {
     const char* loc = builder->getUniformCStr(fLocationUni);
-    out->appendf("normalize(%s - vec3(gl_FragCoord.xy, %s))", loc, z);
+    out->appendf("normalize(%s - vec3(%s.xy, %s))", loc, builder->fragmentPosition(), z);
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -1417,12 +1389,11 @@
 }
 
 void GrGLSpotLight::setData(const GrGLUniformManager& uman,
-                            const GrRenderTarget* rt,
                             const SkLight* light) const {
-    INHERITED::setData(uman, rt, light);
+    INHERITED::setData(uman, light);
     SkASSERT(light->type() == SkLight::kSpot_LightType);
     const SkSpotLight* spotLight = static_cast<const SkSpotLight *>(light);
-    setUniformPoint3FlipY(uman, fLocationUni, spotLight->location(), rt->height());
+    setUniformPoint3(uman, fLocationUni, spotLight->location());
     uman.set1f(fExponentUni, spotLight->specularExponent());
     uman.set1f(fCosInnerConeAngleUni, spotLight->cosInnerConeAngle());
     uman.set1f(fCosOuterConeAngleUni, spotLight->cosOuterConeAngle());
@@ -1463,11 +1434,11 @@
                           &fLightColorFunc);
 }
 
-void GrGLSpotLight::emitSurfaceToLight(const GrGLShaderBuilder* builder,
+void GrGLSpotLight::emitSurfaceToLight(GrGLShaderBuilder* builder,
                                        SkString* out,
                                        const char* z) const {
     const char* location= builder->getUniformCStr(fLocationUni);
-    out->appendf("normalize(%s - vec3(gl_FragCoord.xy, %s))", location, z);
+    out->appendf("normalize(%s - vec3(%s.xy, %s))", location, builder->fragmentPosition(), z);
 }
 
 void GrGLSpotLight::emitLightColor(GrGLShaderBuilder* builder,