Make program unit test run clean and add it to tests program

Review URL: http://codereview.appspot.com/4898049/


git-svn-id: http://skia.googlecode.com/svn/trunk@2121 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrGLProgram.cpp b/gpu/src/GrGLProgram.cpp
index fe42855..4699851 100644
--- a/gpu/src/GrGLProgram.cpp
+++ b/gpu/src/GrGLProgram.cpp
@@ -1091,7 +1091,7 @@
         segments->fVSCode.appendf("\t%s -= vec2(%g, %g) * %s;\n",
                                   varyingName.c_str(), scale, scale,
                                   imageIncrementName.c_str());
-}
+    }
 
     /// Fragment Shader Stuff
     GrStringBuilder fsCoordName;
@@ -1265,17 +1265,32 @@
         segments->fFSCode.appendf("\t%s += %s(%s, %s + vec2(+%s.x,+%s.y))%s;\n", accumVar.c_str(), texFunc.c_str(), samplerName.c_str(), sampleCoords.c_str(), texelSizeName.c_str(), texelSizeName.c_str(), smear);
         segments->fFSCode.appendf("\t%s = .25 * %s%s;\n", fsOutColor, accumVar.c_str(), modulate.c_str());
     } else if (ProgramDesc::StageDesc::kConvolution_FetchMode == desc.fFetchMode) {
-        segments->fFSCode.append("\tvec4 sum = vec4(0, 0, 0, 0);\n");
-        segments->fFSCode.appendf("\tvec2 coord = %s;\n", sampleCoords.c_str());
-        segments->fFSCode.appendf("\tfor (int i = 0; i < %d; i++) {\n", desc.fKernelWidth);
-        segments->fFSCode.appendf("\t\tsum += %s(%s, coord)%s * %s[i];\n",
-                                  texFunc.c_str(), samplerName.c_str(),
-                                  smear, kernelName.c_str());
-        segments->fFSCode.appendf("\t\tcoord += %s;\n",
+        GrStringBuilder sumVar("sum");
+        sumVar.appendS32(stageNum);
+        GrStringBuilder coordVar("coord");
+        coordVar.appendS32(stageNum);
+
+        segments->fFSCode.appendf("\tvec4 %s = vec4(0, 0, 0, 0);\n",
+                                  sumVar.c_str());
+        segments->fFSCode.appendf("\tvec2 %s = %s;\n", 
+                                  coordVar.c_str(),
+                                  sampleCoords.c_str());
+        segments->fFSCode.appendf("\tfor (int i = 0; i < %d; i++) {\n",
+                                  desc.fKernelWidth);
+        segments->fFSCode.appendf("\t\t%s += %s(%s, %s)%s * %s[i];\n",
+                                  sumVar.c_str(), texFunc.c_str(),
+                                  samplerName.c_str(), coordVar.c_str(), smear,
+                                  kernelName.c_str());
+        segments->fFSCode.appendf("\t\t%s += %s;\n",
+                                  coordVar.c_str(),
                                   imageIncrementName.c_str());
         segments->fFSCode.appendf("\t}\n");
-        segments->fFSCode.appendf("\t%s = sum%s;\n", fsOutColor, modulate.c_str());
+        segments->fFSCode.appendf("\t%s = %s%s;\n", fsOutColor,
+                                  sumVar.c_str(), modulate.c_str());
     } else {
-        segments->fFSCode.appendf("\t%s = %s(%s, %s)%s%s;\n", fsOutColor, texFunc.c_str(), samplerName.c_str(), sampleCoords.c_str(), smear, modulate.c_str());
+        segments->fFSCode.appendf("\t%s = %s(%s, %s)%s%s;\n",
+                                  fsOutColor, texFunc.c_str(), 
+                                  samplerName.c_str(), sampleCoords.c_str(),
+                                  smear, modulate.c_str());
     }
 }