Add vendor to context info.
authorbsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 23 Oct 2012 13:52:43 +0000 (13:52 +0000)
committerbsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>
Tue, 23 Oct 2012 13:52:43 +0000 (13:52 +0000)
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

src/gpu/gl/GrGLContextInfo.cpp
src/gpu/gl/GrGLContextInfo.h
src/gpu/gl/GrGLUtil.cpp
src/gpu/gl/GrGLUtil.h

index 9802e6598502821669013b96c367fb97241c395f..060d236b22d6a1a7707668101d1deac542eba024 100644 (file)
@@ -30,6 +30,7 @@ GrGLContextInfo& GrGLContextInfo::operator = (const GrGLContextInfo& ctx) {
     fBindingInUse = ctx.fBindingInUse;
     fGLVersion = ctx.fGLVersion;
     fGLSLGeneration = ctx.fGLSLGeneration;
+    fVendor = ctx.fVendor;
     fExtensionString = ctx.fExtensionString;
     fGLCaps = ctx.fGLCaps;
     return *this;
@@ -40,6 +41,7 @@ void GrGLContextInfo::reset() {
     fBindingInUse = kNone_GrGLBinding;
     fGLVersion = GR_GL_VER(0, 0);
     fGLSLGeneration = static_cast<GrGLSLGeneration>(0);
+    fVendor = kOther_GrGLVendor;
     fExtensionString = "";
     fGLCaps.reset();
 }
@@ -70,7 +72,7 @@ bool GrGLContextInfo::initialize(const GrGLInterface* interface) {
             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;
         }
index 44fc98555fdda3cfcc52438754219b48a4295854..a6c997f5a2ecd3f3518bc0b9b7680b0e82016bb8 100644 (file)
@@ -31,7 +31,7 @@ public:
 
     /**
      * 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 @@ public:
     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 @@ private:
     GrGLBinding          fBindingInUse;
     GrGLVersion          fGLVersion;
     GrGLSLGeneration     fGLSLGeneration;
+    GrGLVendor           fVendor;
     SkString             fExtensionString;
     GrGLCaps             fGLCaps;
 };
index 0e9e21fb2f9d33c8facae2ca5962308a1a030edc..55236aab14c3555a589acb17fe2713cca23a7157 100644 (file)
@@ -166,6 +166,16 @@ bool GrGLHasExtensionFromString(const char* ext, const char* extensionString) {
     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 @@ GrGLSLVersion GrGLGetGLSLVersion(const GrGLInterface* gl) {
     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);
+}
+
index 17d5a6320edfb5125793e7147e5aee3a6c74bf1e..997207a1c77ebfa50afd7c310a151a34d9346540 100644 (file)
 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 @@ GrGLVersion GrGLGetVersionFromString(const char* versionString);
 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()