Chromium Code Reviews| Index: gpu/command_buffer/service/program_manager.cc |
| diff --git a/gpu/command_buffer/service/program_manager.cc b/gpu/command_buffer/service/program_manager.cc |
| index b27614721022acb2d5e50b0bb786c2d809916d7e..00712bc7d4dd3c1005390a611a2f7c3f1bafc18f 100644 |
| --- a/gpu/command_buffer/service/program_manager.cc |
| +++ b/gpu/command_buffer/service/program_manager.cc |
| @@ -558,6 +558,10 @@ bool Program::Link(ShaderManager* manager, |
| set_log_info("invalid shaders"); |
| return false; |
| } |
| + if (DetectShaderVersionMismatch()) { |
| + set_log_info("Versions of linked shaders have to match."); |
| + return false; |
| + } |
| if (DetectAttribLocationBindingConflicts()) { |
| set_log_info("glBindAttribLocation() conflicts"); |
| return false; |
| @@ -1034,6 +1038,22 @@ bool Program::CanLink() const { |
| return true; |
| } |
| +bool Program::DetectShaderVersionMismatch() const { |
| + int version = Shader::kUndefinedShaderVersion; |
| + for (int ii = 0; ii < kMaxAttachedShaders; ++ii) { |
| + Shader* shader = attached_shaders_[ii].get(); |
| + if (shader) { |
| + if (version != Shader::kUndefinedShaderVersion && |
| + shader->shader_version() != version) { |
| + return true; |
|
Zhenyao Mo
2015/05/06 17:57:42
This is based on the assumption that kMaxAttachedS
oetuaho-nv
2015/05/07 08:02:41
I don't see how this would be based on that assump
Jamie Madill
2015/05/07 11:27:54
Yes, I think it's sufficient to detect any mismatc
Zhenyao Mo
2015/05/07 14:33:08
You are right. I misread the code.
|
| + } |
| + version = shader->shader_version(); |
| + DCHECK(version != Shader::kUndefinedShaderVersion); |
| + } |
| + } |
| + return false; |
| +} |
| + |
| bool Program::DetectAttribLocationBindingConflicts() const { |
| std::set<GLint> location_binding_used; |
| for (LocationMap::const_iterator it = bind_attrib_location_map_.begin(); |