]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/builtin.cpp
Fix opcode for matrix inverse
[libs/gl.git] / source / glsl / builtin.cpp
index 3800e14bbc0d412552e679f3e2697c514d1deba4..83e480e5cf417b5943abb7841ebcb32256f8136e 100644 (file)
@@ -9,6 +9,18 @@ namespace Msp {
 namespace GL {
 namespace SL {
 
+void add_builtin_type(Stage &stage, const std::string &name, BasicTypeDeclaration::Kind kind, unsigned size, unsigned sign)
+{
+       RefPtr<BasicTypeDeclaration> type = new BasicTypeDeclaration;
+       type->source = BUILTIN_SOURCE;
+       type->name = name;
+       type->kind = kind;
+       type->size = size;
+       type->sign = sign;
+       stage.content.body.push_back(type);
+       stage.types[name] = type.get();
+}
+
 Module *get_builtins_module()
 {
        static RefPtr<Module> builtins_module;
@@ -21,10 +33,23 @@ Module *get_builtins_module()
                if(!io)
                        return 0;
 
-               Parser parser;
-               Module *module = new Module(parser.parse(*io, "<builtin>", BUILTIN_SOURCE));
+               builtins_module = new Module;
+               add_builtin_type(builtins_module->shared, "void", BasicTypeDeclaration::VOID, 0, true);
+               add_builtin_type(builtins_module->shared, "bool", BasicTypeDeclaration::BOOL, 1, true);
+               add_builtin_type(builtins_module->shared, "int", BasicTypeDeclaration::INT, 32, true);
+               add_builtin_type(builtins_module->shared, "uint", BasicTypeDeclaration::INT, 32, false);
+               add_builtin_type(builtins_module->shared, "float", BasicTypeDeclaration::FLOAT, 32, true);
 
-               builtins_module = module;
+               try
+               {
+                       Parser parser(0);
+                       parser.parse(*builtins_module, *io, "<builtin>", BUILTIN_SOURCE);
+               }
+               catch(...)
+               {
+                       builtins_module = 0;
+                       throw;
+               }
        }
        return builtins_module.get();
 }