Add experimental geometry shader code to gpu backend

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


git-svn-id: http://skia.googlecode.com/svn/trunk@2365 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/gpu/src/GrGLInterface.cpp b/gpu/src/GrGLInterface.cpp
index 0b433d1..70dd019 100644
--- a/gpu/src/GrGLInterface.cpp
+++ b/gpu/src/GrGLInterface.cpp
@@ -20,7 +20,11 @@
 #endif
 
 GrGLVersion GrGLGetVersionFromString(const char* versionString) {
-    GrAssert(versionString);
+    if (NULL == versionString) {
+        GrAssert(!"NULL GL version string.");
+        return 0;
+    }
+
     int major, minor;
 
     int n = sscanf(versionString, "%d.%d", &major, &minor);
@@ -43,6 +47,26 @@
     return 0;
 }
 
+GrGLSLVersion GrGLGetGLSLVersionFromString(const char* versionString) {
+    if (NULL == versionString) {
+        GrAssert(!"NULL GLSL version string.");
+        return 0;
+    }
+
+    int major, minor;
+
+    int n = sscanf(versionString, "%d.%d", &major, &minor);
+    if (2 == n) {
+        return GR_GLSL_VER(major, minor);
+    }
+    
+    n = sscanf(versionString, "OpenGL ES GLSL ES %d.%d", &major, &minor);
+    if (2 == n) {
+        return GR_GLSL_VER(major, minor);
+    }
+    return 0;
+}
+
 bool GrGLHasExtensionFromString(const char* ext, const char* extensionString) {
     int extLength = strlen(ext);
 
@@ -72,6 +96,12 @@
     return GrGLGetVersionFromString((const char*) v);
 }
 
+GrGLSLVersion GrGLGetGLSLVersion(const GrGLInterface* gl) {
+    const GrGLubyte* v;
+    GR_GL_CALL_RET(gl, v, GetString(GR_GL_SHADING_LANGUAGE_VERSION));
+    return GrGLGetGLSLVersionFromString((const char*) v);
+}
+
 GrGLInterface::GrGLInterface() {
     fBindingsExported = (GrGLBinding)0;
     fNPOTRenderTargetSupport = kProbe_GrGLCapability;