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/GrGpuGLShaders.cpp b/gpu/src/GrGpuGLShaders.cpp
index adac9b0..5afd77e 100644
--- a/gpu/src/GrGpuGLShaders.cpp
+++ b/gpu/src/GrGpuGLShaders.cpp
@@ -143,7 +143,7 @@
     }
 };
 
-void GrGpuGLShaders::ProgramUnitTest() {
+bool GrGpuGLShaders::programUnitTest() {
 
     static const int STAGE_OPTS[] = {
         0,
@@ -185,8 +185,13 @@
         idx = (int)(random.nextF() * (kNumStages+1));
         pdesc.fFirstCoverageStage = idx;
 
-        pdesc.fEdgeAANumEdges = (random.nextF() * (getMaxEdges() + 1));
-        pdesc.fEdgeAAConcave = random.nextF() > .5f;
+        bool edgeAA = random.nextF() > .5f;
+        if (edgeAA) {
+            pdesc.fEdgeAANumEdges = random.nextF() * this->getMaxEdges() + 1;
+            pdesc.fEdgeAAConcave = random.nextF() > .5f;
+        } else {
+            pdesc.fEdgeAANumEdges = 0;
+        }
 
         if (fDualSourceBlendingSupport) {
             pdesc.fDualSrcOutput =
@@ -217,10 +222,17 @@
             stage.fModulation = random_val(&random, StageDesc::kModulationCnt);
             stage.fCoordMapping =  random_val(&random, StageDesc::kCoordMappingCnt);
             stage.fFetchMode = random_val(&random, StageDesc::kFetchModeCnt);
+            // convolution shaders don't work with persp tex matrix
+            if (stage.fFetchMode == StageDesc::kConvolution_FetchMode) {
+                stage.fOptFlags |= StageDesc::kNoPerspective_OptFlagBit;
+            }
             stage.setEnabled(VertexUsesStage(s, pdesc.fVertexLayout));
+            stage.fKernelWidth = 4 * random.nextF() + 2;
         }
         CachedData cachedData;
-        program.genProgram(&cachedData);
+        if (!program.genProgram(&cachedData)) {
+            return false;
+        }
         DeleteProgram(&cachedData);
         bool again = false;
         if (again) {
@@ -228,6 +240,7 @@
             DeleteProgram(&cachedData);
         }
     }
+    return true;
 }
 
 GrGpuGLShaders::GrGpuGLShaders() {
@@ -247,7 +260,7 @@
     fProgramCache = new ProgramCache();
 
 #if 0
-    ProgramUnitTest();
+    this->programUnitTest();
 #endif
 }