Use the shader translator to correct bad type information
returned by OpenGL drivers.

TEST=unit tests, ran OpenGL ES 2.0 conformance tests and ran WebGL conformance test. Things that used to fail now pass.
BUG=none

Review URL: http://codereview.chromium.org/4829001

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@65882 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
index 110ea129..4b76497 100644
--- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
+++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
@@ -4084,12 +4084,13 @@
   // Translate GL ES 2.0 shader to Desktop GL shader and pass that to
   // glShaderSource and then glCompileShader.
   const char* shader_src = info->source().c_str();
+  ShaderTranslator* translator = NULL;
   if (use_shader_translator_) {
-    ShaderTranslator* translator = info->shader_type() == GL_VERTEX_SHADER ?
+    translator = info->shader_type() == GL_VERTEX_SHADER ?
         vertex_translator_.get() : fragment_translator_.get();
 
     if (!translator->Translate(shader_src)) {
-      info->SetStatus(false, translator->info_log());
+      info->SetStatus(false, translator->info_log(), NULL);
       return;
     }
     shader_src = translator->translated_shader();
@@ -4100,7 +4101,7 @@
   GLint status = GL_FALSE;
   glGetShaderiv(info->service_id(),  GL_COMPILE_STATUS, &status);
   if (status) {
-    info->SetStatus(true, "");
+    info->SetStatus(true, "", translator);
   } else {
     // We cannot reach here if we are using the shader translator.
     // All invalid shaders must be rejected by the translator.
@@ -4114,7 +4115,7 @@
     glGetShaderInfoLog(info->service_id(), max_len, &len, temp.get());
     DCHECK(max_len == 0 || len < max_len);
     DCHECK(len ==0 || temp[len] == '\0');
-    info->SetStatus(false, std::string(temp.get(), len));
+    info->SetStatus(false, std::string(temp.get(), len), NULL);
   }
 };