]> git.tdb.fi Git - libs/gl.git/blobdiff - source/programcompiler.cpp
Disable core version of primitive restart on Radeon as well
[libs/gl.git] / source / programcompiler.cpp
index 0d61c6853c737a75bac34212114077e1b691286c..fd27839da25e1f7cb377a7fdf46079bfb1e862f3 100644 (file)
@@ -368,7 +368,17 @@ void ProgramCompiler::Formatter::visit(VariableDeclaration &var)
        if(!var.sampling.empty())
                formatted += format("%s ", var.sampling);
        if(!var.interface.empty() && var.interface!=block_interface)
-               formatted += format("%s ", var.interface);
+       {
+               string interface = var.interface;
+               if(stage->required_version<Version(1, 30))
+               {
+                       if(stage->type==VERTEX && var.interface=="in")
+                               interface = "attribute";
+                       else if((stage->type==VERTEX && var.interface=="out") || (stage->type==FRAGMENT && var.interface=="in"))
+                               interface = "varying";
+               }
+               formatted += format("%s ", interface);
+       }
        formatted += format("%s %s", var.type, var.name);
        if(var.array)
        {
@@ -1484,11 +1494,13 @@ void ProgramCompiler::NodeRemover::visit(VariableDeclaration &var)
 
 
 ProgramCompiler::LegacyConverter::LegacyConverter():
-       target_version(get_glsl_version())
+       target_version(get_glsl_version()),
+       frag_out(0)
 { }
 
 ProgramCompiler::LegacyConverter::LegacyConverter(const Version &v):
-       target_version(v)
+       target_version(v),
+       frag_out(0)
 { }
 
 bool ProgramCompiler::LegacyConverter::check_version(const Version &feature_version)
@@ -1503,7 +1515,7 @@ bool ProgramCompiler::LegacyConverter::check_version(const Version &feature_vers
 
 void ProgramCompiler::LegacyConverter::visit(VariableReference &var)
 {
-       if(var.name==frag_out_name && !check_version(Version(1, 30)))
+       if(var.declaration==frag_out && !check_version(Version(1, 30)))
        {
                var.name = "gl_FragColor";
                var.declaration = 0;
@@ -1515,6 +1527,13 @@ void ProgramCompiler::LegacyConverter::visit(VariableReference &var)
                type = string();
 }
 
+void ProgramCompiler::LegacyConverter::visit(Assignment &assign)
+{
+       TraversingVisitor::visit(assign);
+       if(assign.target_declaration==frag_out && !check_version(Version(1, 30)))
+               assign.target_declaration = 0;
+}
+
 void ProgramCompiler::LegacyConverter::visit(FunctionCall &call)
 {
        if(call.name=="texture" && !call.declaration && !check_version(Version(1, 30)))
@@ -1569,13 +1588,9 @@ void ProgramCompiler::LegacyConverter::visit(VariableDeclaration &var)
 
        if((var.interface=="in" || var.interface=="out") && !check_version(Version(1, 30)))
        {
-               if(stage->type==VERTEX && var.interface=="in")
-                       var.interface = "attribute";
-               else if((stage->type==VERTEX && var.interface=="out") || (stage->type==FRAGMENT && var.interface=="in"))
-                       var.interface = "varying";
-               else if(stage->type==FRAGMENT && var.interface=="out")
+               if(stage->type==FRAGMENT && var.interface=="out")
                {
-                       frag_out_name = var.name;
+                       frag_out = &var;
                        remove_node = true;
                }
        }