Fix context creation problems in dm

Fixes these issues:

1. The glXCreateContextAttribsARB call seems to modify the
context_attrib parameter upon failure. Since context_attrib was static,
if it first tried to create an OpenGL 4.4 context and it failed, further
attempts to create a context with lower versions would also fail.

2. Getting an OpenGL 3.0 context was never tried.

3. Context creation for ES 3.0 was failing on my machine. Since ES 2.0
looks like the intended version from the surrounding code, I set it to
that. It could be rewritten to use a similar loop as standard OpenGL and
try from the highest version to the lowest.

BUG=skia:5403
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2147513002

Review-Url: https://codereview.chromium.org/2147513002
diff --git a/tools/gpu/gl/glx/CreatePlatformGLTestContext_glx.cpp b/tools/gpu/gl/glx/CreatePlatformGLTestContext_glx.cpp
index 7429bed..a3069dc 100644
--- a/tools/gpu/gl/glx/CreatePlatformGLTestContext_glx.cpp
+++ b/tools/gpu/gl/glx/CreatePlatformGLTestContext_glx.cpp
@@ -184,8 +184,8 @@
             if (gluCheckExtension(
                     reinterpret_cast<const GLubyte*>("GLX_EXT_create_context_es2_profile"),
                     reinterpret_cast<const GLubyte*>(glxExts))) {
-                static const int context_attribs_gles[] = {
-                    GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
+                const int context_attribs_gles[] = {
+                    GLX_CONTEXT_MAJOR_VERSION_ARB, 2,
                     GLX_CONTEXT_MINOR_VERSION_ARB, 0,
                     GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_ES2_PROFILE_BIT_EXT,
                     None
@@ -198,14 +198,17 @@
             // to do this nastiness
             for (i = NUM_GL_VERSIONS - 2; i > 0 ; i--) {
                 /* don't bother below GL 3.0 */
-                if (gl_versions[i].major == 3 && gl_versions[i].minor == 0) {
+                if (gl_versions[i].major < 3) {
                     break;
                 }
                 // On Nvidia GPUs, to use Nv Path rendering we need a compatibility profile for the
                 // time being.
                 // TODO when Nvidia implements NVPR on Core profiles, we should start requesting
                 // core here
-                static const int context_attribs_gl[] = {
+                // Warning: This array should not be set to static. The
+                // glXCreateContextAttribsARB call writes to it upon failure and
+                // the next call would fail too.
+                const int context_attribs_gl[] = {
                       GLX_CONTEXT_MAJOR_VERSION_ARB, gl_versions[i].major,
                       GLX_CONTEXT_MINOR_VERSION_ARB, gl_versions[i].minor,
                       GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB,
@@ -231,7 +234,7 @@
             // implementations will return the newest context version
             // compatible with OpenGL versions less than version 3.0.
             if (ctxErrorOccurred || !fContext) {
-                static const int context_attribs_gl_fallback[] = {
+                const int context_attribs_gl_fallback[] = {
                     GLX_CONTEXT_MAJOR_VERSION_ARB, 1,
                     GLX_CONTEXT_MINOR_VERSION_ARB, 0,
                     None