diff options
Diffstat (limited to 'gpu/command_buffer/service/gles2_cmd_decoder.cc')
-rw-r--r-- | gpu/command_buffer/service/gles2_cmd_decoder.cc | 60 |
1 files changed, 12 insertions, 48 deletions
diff --git a/gpu/command_buffer/service/gles2_cmd_decoder.cc b/gpu/command_buffer/service/gles2_cmd_decoder.cc index a3bf4bf..9955d98 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( |