]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/optimize.cpp
Unify handling of variables and interface blocks in the GLSL compiler
[libs/gl.git] / source / glsl / optimize.cpp
index da95158903d2fea799d1aba55c3faca0762f7434..1b9b41de20e07a63ff38cb7e6f984d7311df9664 100644 (file)
@@ -191,12 +191,6 @@ void InlineContentInjector::visit(VariableReference &var)
                referenced_names.insert(var.name);
 }
 
-void InlineContentInjector::visit(InterfaceBlockReference &iface)
-{
-       if(pass==REFERENCED)
-               referenced_names.insert(iface.name);
-}
-
 void InlineContentInjector::visit(FunctionCall &call)
 {
        if(pass==REFERENCED)
@@ -1246,11 +1240,6 @@ void UnusedTypeRemover::visit(VariableDeclaration &var)
        TraversingVisitor::visit(var);
 }
 
-void UnusedTypeRemover::visit(InterfaceBlock &iface)
-{
-       unused_nodes.erase(iface.type_declaration);
-}
-
 void UnusedTypeRemover::visit(FunctionDeclaration &func)
 {
        unused_nodes.erase(func.return_type_declaration);
@@ -1313,14 +1302,6 @@ void UnusedVariableRemover::visit(VariableReference &var)
                referenced(var.declaration, var);
 }
 
-void UnusedVariableRemover::visit(InterfaceBlockReference &iface)
-{
-       if(composite_reference)
-               r_reference.declaration = iface.declaration;
-       else if(iface.declaration)
-               referenced(iface.declaration, iface);
-}
-
 void UnusedVariableRemover::visit_composite(Expression &expr)
 {
        if(!composite_reference)
@@ -1474,7 +1455,8 @@ void UnusedVariableRemover::visit(VariableDeclaration &var)
 
        /* Mark variables as output if they're used by the next stage or the
        graphics API. */
-       var_info.output = (var.interface=="out" && (stage->type==Stage::FRAGMENT || var.linked_declaration || !var.name.compare(0, 3, "gl_")));
+       bool builtin = (!var.name.compare(0, 3, "gl_") || (var.block_declaration && !var.block_declaration->block_name.compare(0, 3, "gl_")));
+       var_info.output = (var.interface=="out" && (stage->type==Stage::FRAGMENT || var.linked_declaration || builtin));
 
        // Linked outputs are automatically referenced.
        if(var_info.output && var.linked_declaration)
@@ -1487,12 +1469,6 @@ void UnusedVariableRemover::visit(VariableDeclaration &var)
        }
 }
 
-void UnusedVariableRemover::visit(InterfaceBlock &iface)
-{
-       VariableInfo &var_info = variables[&iface];
-       var_info.output = (iface.interface=="out" && (iface.linked_block || !iface.block_name.compare(0, 3, "gl_")));
-}
-
 void UnusedVariableRemover::merge_variables(const BlockVariableMap &other_vars)
 {
        for(const auto &kvp: other_vars)