Get correct GLVersion for Mesa to avoid GrContext creation failure
Path originally written by yunchao.he@intel.com
Review URL: https://codereview.chromium.org/15779009/
git-svn-id: http://skia.googlecode.com/svn/trunk@9309 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/gl/GrGLUtil.cpp b/src/gpu/gl/GrGLUtil.cpp
index f4c5da6..08bbebc 100644
--- a/src/gpu/gl/GrGLUtil.cpp
+++ b/src/gpu/gl/GrGLUtil.cpp
@@ -48,6 +48,37 @@
}
}
+namespace {
+// Mesa uses a non-standard version string of format: 1.4 Mesa <mesa_major>.<mesa_minor>.
+// The mapping of from mesa version to GL version came from here: http://www.mesa3d.org/intro.html
+bool get_gl_version_for_mesa(int mesaMajorVersion, int* major, int* minor) {
+ switch (mesaMajorVersion) {
+ case 2:
+ case 3:
+ case 4:
+ case 5:
+ case 6:
+ *major = 1;
+ *minor = mesaMajorVersion - 1;
+ return true;
+ case 7:
+ *major = 2;
+ *minor = 1;
+ return true;
+ case 8:
+ *major = 3;
+ *minor = 0;
+ return true;
+ case 9:
+ *major = 3;
+ *minor = 1;
+ return true;
+ default:
+ return false;
+ }
+}
+}
+
///////////////////////////////////////////////////////////////////////////////
#if GR_GL_LOG_CALLS
@@ -76,8 +107,7 @@
// check for ES 1
char profile[2];
- n = sscanf(versionString, "OpenGL ES-%c%c %d.%d", profile, profile+1,
- &major, &minor);
+ n = sscanf(versionString, "OpenGL ES-%c%c %d.%d", profile, profile+1, &major, &minor);
if (4 == n) {
// we no longer support ES1.
return kNone_GrGLBinding;
@@ -99,7 +129,18 @@
int major, minor;
- int n = sscanf(versionString, "%d.%d", &major, &minor);
+ // check for mesa
+ int mesaMajor, mesaMinor;
+ int n = sscanf(versionString, "%d.%d Mesa %d.%d", &major, &minor, &mesaMajor, &mesaMinor);
+ if (4 == n) {
+ if (get_gl_version_for_mesa(mesaMajor, &major, &minor)) {
+ return GR_GL_VER(major, minor);
+ } else {
+ return 0;
+ }
+ }
+
+ n = sscanf(versionString, "%d.%d", &major, &minor);
if (2 == n) {
return GR_GL_VER(major, minor);
}