Revert 2289. GLSL version detection not robust enough. May think we don't have GLSL 1.50 support based on OpenGL version. We have to look at the available extensions, not just GL version.




git-svn-id: http://skia.googlecode.com/svn/trunk@2290 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrGpuGLShaders.cpp b/gpu/src/GrGpuGLShaders.cpp
index f894f1c..a9a3953 100644
--- a/gpu/src/GrGpuGLShaders.cpp
+++ b/gpu/src/GrGpuGLShaders.cpp
@@ -51,19 +51,15 @@
     enum {
         kMaxEntries = 32
     };
-    Entry                       fEntries[kMaxEntries];
-    int                         fCount;
-    unsigned int                fCurrLRUStamp;
-    const GrGLInterface*        fGL;
-    GrGLProgram::GLSLVersion    fGLSLVersion;
-
+    Entry                 fEntries[kMaxEntries];
+    int                   fCount;
+    unsigned int          fCurrLRUStamp;
+    const GrGLInterface*  fGL;
 public:
-    ProgramCache(const GrGLInterface* gl,
-                 GrGLProgram::GLSLVersion glslVersion) 
+    ProgramCache(const GrGLInterface* gl) 
         : fCount(0)
         , fCurrLRUStamp(0)
-        , fGL(gl)
-        , fGLSLVersion(glslVersion) {
+        , fGL(gl) {
     }
 
     ~ProgramCache() {
@@ -89,7 +85,7 @@
         
         Entry* entry = fHashCache.find(newEntry.fKey);
         if (NULL == entry) {
-            if (!desc.genProgram(fGL, fGLSLVersion, &newEntry.fProgramData)) {
+            if (!desc.genProgram(fGL, &newEntry.fProgramData)) {
                 return NULL;
             }
             if (fCount < kMaxEntries) {
@@ -140,32 +136,14 @@
 #define GL_CALL(X) GR_GL_CALL(this->glInterface(), X)
 
 namespace {
-
-GrGLProgram::GLSLVersion get_glsl_version(GrGLBinding binding, float glVersion) {
-    switch (binding) {
-        case kDesktop_GrGLBinding:
-            return (glVersion >= 3.2) ? GrGLProgram::k150_GLSLVersion :
-                                        GrGLProgram::k120_GLSLVersion;
-        case kES2_GrGLBinding:
-            return GrGLProgram::k120_GLSLVersion;
-        default:
-            GrCrash("Attempting to get GLSL version in unknown or fixed-"
-                     "function GL binding.");
-            return GrGLProgram::k120_GLSLVersion; // suppress warning
+    template <typename T>
+    T random_val(GrRandom* r, T count) {
+        return (T)(int)(r->nextF() * count);
     }
-}
-
-template <typename T>
-T random_val(GrRandom* r, T count) {
-    return (T)(int)(r->nextF() * count);
-}
-
-}
+};
 
 bool GrGpuGLShaders::programUnitTest() {
 
-    GrGLProgram::GLSLVersion glslVersion = 
-            get_glsl_version(this->glBinding(), this->glVersion());
     static const int STAGE_OPTS[] = {
         0,
         StageDesc::kNoPerspective_OptFlagBit,
@@ -264,12 +242,15 @@
             stage.fKernelWidth = 4 * random.nextF() + 2;
         }
         CachedData cachedData;
-        if (!program.genProgram(this->glInterface(),
-                                glslVersion,
-                                &cachedData)) {
+        if (!program.genProgram(this->glInterface(), &cachedData)) {
             return false;
         }
         DeleteProgram(this->glInterface(), &cachedData);
+        bool again = false;
+        if (again) {
+            program.genProgram(this->glInterface(), &cachedData);
+            DeleteProgram(this->glInterface(), &cachedData);
+        }
     }
     return true;
 }
@@ -291,8 +272,7 @@
     fShaderSupport = true;
     if (kDesktop_GrGLBinding == this->glBinding()) {
         fDualSourceBlendingSupport =
-                            this->glVersion() >= 3.25f || // TODO: when resolving Issue 387 change 
-                                                          // this back to 3.3
+                            fGLVersion >= 3.3f ||
                             this->hasExtension("GL_ARB_blend_func_extended");
         fShaderDerivativeSupport = true;
     } else {
@@ -302,9 +282,7 @@
     }
 
     fProgramData = NULL;
-    GrGLProgram::GLSLVersion glslVersion =
-        get_glsl_version(this->glBinding(), this->glVersion());
-    fProgramCache = new ProgramCache(gl, glslVersion);
+    fProgramCache = new ProgramCache(gl);
 
 #if 0
     this->programUnitTest();