Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(834)

Unified Diff: gpu/command_buffer/service/program_manager.cc

Issue 23819037: Uniforms and attributes name conflicts should cause link failure (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 &&

Powered by Google App Engine
This is Rietveld 408576698