summaryrefslogtreecommitdiffstats
path: root/gpu/command_buffer/service/gles2_cmd_decoder.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gpu/command_buffer/service/gles2_cmd_decoder.cc')
-rw-r--r--gpu/command_buffer/service/gles2_cmd_decoder.cc60
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(