X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fsyntax.cpp;h=4526bf2bd986075f6bfe50e50dae1eabf2ebd204;hb=59347f76bc985e8c9c769d4a3eee672cba9c920b;hp=d0273909d68db900e0d95e79c08f1d2cf9f140cd;hpb=8f5f54a9e165dae424e5b0bb8e488c3d01849bf6;p=libs%2Fgl.git diff --git a/source/glsl/syntax.cpp b/source/glsl/syntax.cpp index d0273909..4526bf2b 100644 --- a/source/glsl/syntax.cpp +++ b/source/glsl/syntax.cpp @@ -138,14 +138,16 @@ void InterfaceBlockReference::visit(NodeVisitor &visitor) MemberAccess::MemberAccess(): - declaration(0) + declaration(0), + index(-1) { } MemberAccess::MemberAccess(const MemberAccess &other): Expression(other), left(other.left), member(other.member), - declaration(0) + declaration(0), + index(-1) { } void MemberAccess::visit(NodeVisitor &visitor) @@ -269,6 +271,7 @@ void InterfaceLayout::visit(NodeVisitor &visitor) BasicTypeDeclaration::BasicTypeDeclaration(): kind(ALIAS), size(0), + sign(true), base_type(0) { } @@ -276,6 +279,7 @@ BasicTypeDeclaration::BasicTypeDeclaration(const BasicTypeDeclaration &other): TypeDeclaration(other), kind(other.kind), size(other.size), + sign(other.sign), base(other.base), base_type(0) { } @@ -485,66 +489,6 @@ string get_unused_variable_name(const Block &block, const string &base) } } -bool is_same_type(const TypeDeclaration &type1, const TypeDeclaration &type2) -{ - if(const BasicTypeDeclaration *basic1 = dynamic_cast(&type1)) - { - const BasicTypeDeclaration *basic2 = dynamic_cast(&type2); - if(!basic2) - return false; - - if(basic1->kind!=basic2->kind || basic1->size!=basic2->size) - return false; - - if(basic1->base_type && basic2->base_type) - return is_same_type(*basic1->base_type, *basic2->base_type); - else - return (!basic1->base_type && !basic2->base_type); - } - else if(const ImageTypeDeclaration *image1 = dynamic_cast(&type1)) - { - const ImageTypeDeclaration *image2 = dynamic_cast(&type2); - if(!image2) - return false; - - if(image1->dimensions!=image2->dimensions || image1->array!=image2->array) - return false; - if(image1->sampled!=image2->sampled || image1->shadow!=image2->shadow) - return false; - - if(image1->base_type && image2->base_type) - return is_same_type(*image1->base_type, *image2->base_type); - else - return (!image1->base_type && !image2->base_type); - } - else if(const StructDeclaration *strct1 = dynamic_cast(&type1)) - { - const StructDeclaration *strct2 = dynamic_cast(&type2); - if(!strct2) - return false; - - NodeList::const_iterator i = strct1->members.body.begin(); - NodeList::const_iterator j = strct2->members.body.begin(); - for(; (i!=strct1->members.body.end() && j!=strct2->members.body.end()); ++i, ++j) - { - const VariableDeclaration *var1 = dynamic_cast(i->get()); - const VariableDeclaration *var2 = dynamic_cast(j->get()); - if(!var1 || !var1->type_declaration || !var2 || !var2->type_declaration) - return false; - if(!is_same_type(*var1->type_declaration, *var2->type_declaration)) - return false; - if(var1->name!=var2->name || var1->array!=var2->array) - return false; - // TODO Compare array sizes - // TODO Compare layout qualifiers for interface block members - } - - return (i==strct1->members.body.end() && j==strct2->members.body.end()); - } - else - return false; -} - int get_layout_value(const Layout &layout, const string &name, int def_value) { for(vector::const_iterator i=layout.qualifiers.begin(); i!=layout.qualifiers.end(); ++i) @@ -553,6 +497,13 @@ int get_layout_value(const Layout &layout, const string &name, int def_value) return def_value; } +void add_to_chain(Assignment::Target &target, Assignment::Target::ChainType type, unsigned index) +{ + if(target.chain_len<7) + target.chain[target.chain_len] = type | min(index, 0x3F); + ++target.chain_len; +} + } // namespace SL } // namespace GL } // namespace Msp