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(); |