- variables.push_back(BlockVariableMap());
- stage.content.visit(*this);
- BlockVariableMap &global_variables = variables.back();
- for(BlockVariableMap::iterator i=global_variables.begin(); i!=global_variables.end(); ++i)
- {
- string interface = i->first->interface;
- bool linked = i->first->linked_declaration;
- map<VariableDeclaration *, Node *>::iterator j = aggregates.find(i->first);
- if(j!=aggregates.end())
- if(InterfaceBlock *iface = dynamic_cast<InterfaceBlock *>(j->second))
- {
- interface = iface->interface;
- linked = iface->linked_block;
- }
-
- /* Don't remove output variables which are used by the next stage or the
- graphics API. */
- if(interface=="out" && (stage.type==Stage::FRAGMENT || linked || !i->first->name.compare(0, 3, "gl_")))
- continue;
-
- // Mark other unreferenced global variables as unused.
- if(!i->second.referenced)
+ stage = &s;
+ s.content.visit(*this);
+
+ for(list<AssignmentInfo>::const_iterator i=assignments.begin(); i!=assignments.end(); ++i)
+ if(i->used_by.empty())
+ unused_nodes.insert(i->node);
+
+ for(map<string, InterfaceBlock *>::const_iterator i=s.interface_blocks.begin(); i!=s.interface_blocks.end(); ++i)
+ if(i->second->instance_name.empty())
+ unused_nodes.insert(i->second);
+
+ for(BlockVariableMap::const_iterator i=variables.begin(); i!=variables.end(); ++i)
+ {
+ if(i->second.output)