Index: gpu/command_buffer/service/shader_manager.cc |
diff --git a/gpu/command_buffer/service/shader_manager.cc b/gpu/command_buffer/service/shader_manager.cc |
index 90b15760a5e8438a275047e8993e215905ffff5a..055cd707a539b3db87f6a1da81bb3476293ce5fb 100644 |
--- a/gpu/command_buffer/service/shader_manager.cc |
+++ b/gpu/command_buffer/service/shader_manager.cc |
@@ -29,19 +29,22 @@ Shader::Shader(GLuint service_id, GLenum shader_type) |
shader_state_(kShaderStateWaiting), |
service_id_(service_id), |
shader_type_(shader_type), |
+ source_type_(kANGLE), |
valid_(false) { |
} |
Shader::~Shader() { |
} |
-void Shader::RequestCompile() { |
+void Shader::RequestCompile(scoped_refptr<ShaderTranslatorInterface> translator, |
+ TranslatedShaderSourceType type) { |
shader_state_ = kShaderStateCompileRequested; |
+ translator_ = translator; |
+ source_type_ = type; |
last_compiled_source_ = source_; |
} |
-void Shader::DoCompile(ShaderTranslatorInterface* translator, |
- TranslatedShaderSourceType type) { |
+void Shader::DoCompile() { |
// We require that RequestCompile() must be called before DoCompile(), |
// so we can return early if the shader state is not what we expect. |
if (shader_state_ != kShaderStateCompileRequested) { |
@@ -51,19 +54,21 @@ void Shader::DoCompile(ShaderTranslatorInterface* translator, |
// Signify the shader has been compiled, whether or not it is valid |
// is dependent on the |valid_| member variable. |
shader_state_ = kShaderStateCompiled; |
+ valid_ = false; |
// Translate GL ES 2.0 shader to Desktop GL shader and pass that to |
// glShaderSource and then glCompileShader. |
const char* source_for_driver = last_compiled_source_.c_str(); |
+ ShaderTranslatorInterface* translator = translator_.get(); |
if (translator) { |
- valid_ = translator->Translate(last_compiled_source_, |
- &log_info_, |
- &translated_source_, |
- &attrib_map_, |
- &uniform_map_, |
- &varying_map_, |
- &name_map_); |
- if (!valid_) { |
+ bool success = translator->Translate(last_compiled_source_, |
+ &log_info_, |
+ &translated_source_, |
+ &attrib_map_, |
+ &uniform_map_, |
+ &varying_map_, |
+ &name_map_); |
+ if (!success) { |
return; |
} |
source_for_driver = translated_source_.c_str(); |
@@ -71,7 +76,7 @@ void Shader::DoCompile(ShaderTranslatorInterface* translator, |
glShaderSource(service_id_, 1, &source_for_driver, NULL); |
glCompileShader(service_id_); |
- if (type == kANGLE) { |
+ if (source_type_ == kANGLE) { |
GLint max_len = 0; |
glGetShaderiv(service_id_, |
GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE, |
@@ -84,11 +89,14 @@ void Shader::DoCompile(ShaderTranslatorInterface* translator, |
DCHECK(max_len == 0 || len < max_len); |
DCHECK(len == 0 || translated_source_[len] == '\0'); |
translated_source_.resize(len); |
+ source_for_driver = translated_source_.c_str(); |
} |
GLint status = GL_FALSE; |
glGetShaderiv(service_id_, GL_COMPILE_STATUS, &status); |
- if (status != GL_TRUE) { |
+ if (status == GL_TRUE) { |
+ valid_ = true; |
+ } 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. |