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 6dd6ca262ee866366003e8f7a3834250f6a06108..0084581ac724634f26a185d2d401be7037cc7175 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, |
| "declared in vertex shader"); |
| return false; |
| } |
| + if (DetectGlobalNameConflicts()) { |
| + set_log_info("Name conflicts between a varying and an attribute"); |
|
bajones
2013/09/07 00:00:14
varying -> uniform
|
| + return false; |
| + } |
| if (!CheckVaryingsPacking()) { |
| set_log_info("Varyings over maximum register limit"); |
| return false; |
| @@ -1072,6 +1076,27 @@ bool Program::DetectVaryingsMismatch() const { |
| return false; |
| } |
| +bool Program::DetectGlobalNameConflicts() const { |
| + DCHECK(attached_shaders_[0] && |
| + attached_shaders_[0]->shader_type() == GL_VERTEX_SHADER && |
| + attached_shaders_[1] && |
| + attached_shaders_[1]->shader_type() == GL_FRAGMENT_SHADER); |
| + const ShaderTranslator::VariableMap* uniforms[2]; |
| + uniforms[0] = &(attached_shaders_[0]->uniform_map()); |
| + uniforms[1] = &(attached_shaders_[1]->uniform_map()); |
| + const ShaderTranslator::VariableMap* attribs = |
| + &(attached_shaders_[0]->attrib_map()); |
| + |
| + for (ShaderTranslator::VariableMap::const_iterator iter = |
| + attribs->begin(); iter != attribs->end(); ++iter) { |
| + for (int ii = 0; ii < 2; ++ii) { |
| + if (uniforms[ii]->find(iter->first) != uniforms[ii]->end()) |
| + return true; |
| + } |
| + } |
| + return false; |
| +} |
| + |
| bool Program::CheckVaryingsPacking() const { |
| DCHECK(attached_shaders_[0] && |
| attached_shaders_[0]->shader_type() == GL_VERTEX_SHADER && |