| Index: gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| index 273df90dd028b1d976eceb2aebd1dc6dd97f0de0..9b926bc109bface9d0f388f529fe26c0335215dc 100644
|
| --- a/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| +++ b/gpu/command_buffer/service/gles2_cmd_decoder.cc
|
| @@ -4719,7 +4719,16 @@ void GLES2DecoderImpl::DoLinkProgram(GLuint program) {
|
| return;
|
| }
|
|
|
| - if (info->Link()) {
|
| + ShaderTranslator* vertex_translator = NULL;
|
| + ShaderTranslator* fragment_translator = NULL;
|
| + if (use_shader_translator_) {
|
| + vertex_translator = vertex_translator_;
|
| + fragment_translator = fragment_translator_;
|
| + }
|
| + if (info->Link(shader_manager(),
|
| + vertex_translator,
|
| + fragment_translator,
|
| + feature_info_)) {
|
| if (info == current_program_.get()) {
|
| program_manager()->ClearUniforms(info);
|
| }
|
| @@ -5812,58 +5821,13 @@ void GLES2DecoderImpl::DoCompileShader(GLuint client_id) {
|
| if (!info) {
|
| return;
|
| }
|
| - // Translate GL ES 2.0 shader to Desktop GL shader and pass that to
|
| - // glShaderSource and then glCompileShader.
|
| - const char* shader_src = info->source() ? info->source()->c_str() : "";
|
| ShaderTranslator* translator = NULL;
|
| if (use_shader_translator_) {
|
| translator = info->shader_type() == GL_VERTEX_SHADER ?
|
| vertex_translator_.get() : fragment_translator_.get();
|
| -
|
| - if (!translator->Translate(shader_src)) {
|
| - info->SetStatus(false, translator->info_log(), NULL);
|
| - return;
|
| - }
|
| - shader_src = translator->translated_shader();
|
| - if (!feature_info_->feature_flags().angle_translated_shader_source)
|
| - info->UpdateTranslatedSource(shader_src);
|
| - }
|
| -
|
| - glShaderSource(info->service_id(), 1, &shader_src, NULL);
|
| - glCompileShader(info->service_id());
|
| - if (feature_info_->feature_flags().angle_translated_shader_source) {
|
| - GLint max_len = 0;
|
| - glGetShaderiv(info->service_id(),
|
| - GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE,
|
| - &max_len);
|
| - scoped_array<char> temp(new char[max_len]);
|
| - GLint len = 0;
|
| - glGetTranslatedShaderSourceANGLE(
|
| - info->service_id(), max_len, &len, temp.get());
|
| - DCHECK(max_len == 0 || len < max_len);
|
| - DCHECK(len == 0 || temp[len] == '\0');
|
| - info->UpdateTranslatedSource(temp.get());
|
| - }
|
| -
|
| - GLint status = GL_FALSE;
|
| - glGetShaderiv(info->service_id(), GL_COMPILE_STATUS, &status);
|
| - if (status) {
|
| - 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.
|
| - // All translated shaders must compile.
|
| - LOG_IF(ERROR, use_shader_translator_)
|
| - << "Shader translator allowed/produced an invalid shader.";
|
| - GLint max_len = 0;
|
| - glGetShaderiv(info->service_id(), GL_INFO_LOG_LENGTH, &max_len);
|
| - scoped_array<char> temp(new char[max_len]);
|
| - GLint len = 0;
|
| - 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).c_str(), NULL);
|
| }
|
| +
|
| + program_manager()->DoCompileShader(info, translator, feature_info_);
|
| };
|
|
|
| void GLES2DecoderImpl::DoGetShaderiv(
|
|
|