Add vendor to context info.

R=robertphillips@google.com
Review URL: https://codereview.appspot.com/6741062

git-svn-id: http://skia.googlecode.com/svn/trunk@6043 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/gl/GrGLContextInfo.cpp b/src/gpu/gl/GrGLContextInfo.cpp
index 9802e65..060d236 100644
--- a/src/gpu/gl/GrGLContextInfo.cpp
+++ b/src/gpu/gl/GrGLContextInfo.cpp
@@ -30,6 +30,7 @@
     fBindingInUse = ctx.fBindingInUse;
     fGLVersion = ctx.fGLVersion;
     fGLSLGeneration = ctx.fGLSLGeneration;
+    fVendor = ctx.fVendor;
     fExtensionString = ctx.fExtensionString;
     fGLCaps = ctx.fGLCaps;
     return *this;
@@ -40,6 +41,7 @@
     fBindingInUse = kNone_GrGLBinding;
     fGLVersion = GR_GL_VER(0, 0);
     fGLSLGeneration = static_cast<GrGLSLGeneration>(0);
+    fVendor = kOther_GrGLVendor;
     fExtensionString = "";
     fGLCaps.reset();
 }
@@ -70,7 +72,7 @@
             const GrGLubyte* ext;
             GR_GL_CALL_RET(interface, ext, GetString(GR_GL_EXTENSIONS));
             fExtensionString = reinterpret_cast<const char*>(ext);
-
+            fVendor = GrGLGetVendor(interface);
             fGLCaps.init(*this);
             return true;
         }
diff --git a/src/gpu/gl/GrGLContextInfo.h b/src/gpu/gl/GrGLContextInfo.h
index 44fc985..a6c997f 100644
--- a/src/gpu/gl/GrGLContextInfo.h
+++ b/src/gpu/gl/GrGLContextInfo.h
@@ -31,7 +31,7 @@
 
     /**
      * Creates a GrGLContextInfo from a GrGLInterface and the currently
-     * bound OpenGL context accesible by the GrGLInterface.
+     * bound OpenGL context accessible by the GrGLInterface.
      */
     explicit GrGLContextInfo(const GrGLInterface* interface);
 
@@ -58,6 +58,7 @@
     GrGLBinding binding() const { return fBindingInUse; }
     GrGLVersion version() const { return fGLVersion; }
     GrGLSLGeneration glslGeneration() const { return fGLSLGeneration; }
+    GrGLVendor vendor() const { return fVendor; }
     const GrGLCaps& caps() const { return fGLCaps; }
     GrGLCaps& caps() { return fGLCaps; }
 
@@ -79,6 +80,7 @@
     GrGLBinding          fBindingInUse;
     GrGLVersion          fGLVersion;
     GrGLSLGeneration     fGLSLGeneration;
+    GrGLVendor           fVendor;
     SkString             fExtensionString;
     GrGLCaps             fGLCaps;
 };
diff --git a/src/gpu/gl/GrGLUtil.cpp b/src/gpu/gl/GrGLUtil.cpp
index 0e9e21f..55236aa 100644
--- a/src/gpu/gl/GrGLUtil.cpp
+++ b/src/gpu/gl/GrGLUtil.cpp
@@ -166,6 +166,16 @@
     return false;
 }
 
+GrGLVendor GrGLGetVendorFromString(const char* vendorString) {
+    if (NULL != vendorString) {
+        if (0 == strcmp(vendorString, "Intel")) {
+            return kIntel_GrGLVendor;
+        }
+    }
+
+    return kOther_GrGLVendor;
+}
+
 bool GrGLHasExtension(const GrGLInterface* gl, const char* ext) {
     const GrGLubyte* glstr;
     GR_GL_CALL_RET(gl, glstr, GetString(GR_GL_EXTENSIONS));
@@ -189,3 +199,10 @@
     GR_GL_CALL_RET(gl, v, GetString(GR_GL_SHADING_LANGUAGE_VERSION));
     return GrGLGetGLSLVersionFromString((const char*) v);
 }
+
+GrGLVendor GrGLGetVendor(const GrGLInterface* gl) {
+    const GrGLubyte* v;
+    GR_GL_CALL_RET(gl, v, GetString(GR_GL_VENDOR));
+    return GrGLGetVendorFromString((const char*) v);
+}
+
diff --git a/src/gpu/gl/GrGLUtil.h b/src/gpu/gl/GrGLUtil.h
index 17d5a63..997207a 100644
--- a/src/gpu/gl/GrGLUtil.h
+++ b/src/gpu/gl/GrGLUtil.h
@@ -16,6 +16,14 @@
 typedef uint32_t GrGLVersion;
 typedef uint32_t GrGLSLVersion;
 
+/**
+ * This list is lazily updated as required.
+ */
+enum GrGLVendor {
+    kIntel_GrGLVendor,
+    kOther_GrGLVendor,
+};
+
 #define GR_GL_VER(major, minor) ((static_cast<int>(major) << 16) | \
                                  static_cast<int>(minor))
 #define GR_GLSL_VER(major, minor) ((static_cast<int>(major) << 16) | \
@@ -61,12 +69,14 @@
 GrGLBinding GrGLGetBindingInUseFromString(const char* versionString);
 GrGLSLVersion GrGLGetGLSLVersionFromString(const char* versionString);
 bool GrGLHasExtensionFromString(const char* ext, const char* extensionString);
+GrGLVendor GrGLGetVendorFromString(const char* vendorString);
 
 // these variants call glGetString()
 bool GrGLHasExtension(const GrGLInterface*, const char* ext);
 GrGLBinding GrGLGetBindingInUse(const GrGLInterface*);
 GrGLVersion GrGLGetVersion(const GrGLInterface*);
 GrGLSLVersion GrGLGetGLSLVersion(const GrGLInterface*);
+GrGLVendor GrGLGetVendor(const GrGLInterface*);
 
 /**
  * Helpers for glGetError()