X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Foptimize.cpp;h=0139ec5fbec94d4f1c47493549914d8977b2af8e;hb=91e65bc9e24a6889995081035f6f6f0a78a6c20e;hp=d21512f6c82e4e6bdef3ccbdf38f70cd6e018e66;hpb=4737d137d0a1c7fed868c4adc7a3d7e00ba7681c;p=libs%2Fgl.git diff --git a/source/glsl/optimize.cpp b/source/glsl/optimize.cpp index d21512f6..0139ec5f 100644 --- a/source/glsl/optimize.cpp +++ b/source/glsl/optimize.cpp @@ -611,6 +611,8 @@ void ConstantFolder::convert_to_result(const Variant &value) set_result(static_cast(value.value())); else if(value.check_type()) set_result(static_cast(value.value())); + else if(value.check_type()) + set_result(static_cast(value.value())); else if(value.check_type()) set_result(static_cast(value.value())); } @@ -640,6 +642,8 @@ void ConstantFolder::visit(RefPtr &expr) literal->token = (r_constant_value.value() ? "true" : "false"); else if(r_constant_value.check_type()) literal->token = lexical_cast(r_constant_value.value()); + else if(r_constant_value.check_type()) + literal->token = lexical_cast(r_constant_value.value())+"u"; else if(r_constant_value.check_type()) { literal->token = lexical_cast(r_constant_value.value()); @@ -744,11 +748,15 @@ void ConstantFolder::visit(BinaryExpression &binary) set_result(evaluate_logical(oper, left_value.value(), r_constant_value.value())); else if(!oper2 && left_value.check_type()) set_result(evaluate_logical(oper, left_value.value(), r_constant_value.value())); + else if(!oper2 && left_value.check_type()) + set_result(evaluate_logical(oper, left_value.value(), r_constant_value.value())); } else if((oper=='<' || oper=='>') && oper2!=oper) { if(left_value.check_type()) set_result(evaluate_relation(binary.oper->token, left_value.value(), r_constant_value.value())); + else if(left_value.check_type()) + set_result(evaluate_relation(binary.oper->token, left_value.value(), r_constant_value.value())); else if(left_value.check_type()) set_result(evaluate_relation(binary.oper->token, left_value.value(), r_constant_value.value())); } @@ -756,13 +764,17 @@ void ConstantFolder::visit(BinaryExpression &binary) { if(left_value.check_type()) set_result((left_value.value()==r_constant_value.value()) == (oper=='=')); - if(left_value.check_type()) + else if(left_value.check_type()) + set_result((left_value.value()==r_constant_value.value()) == (oper=='=')); + else if(left_value.check_type()) set_result((left_value.value()==r_constant_value.value()) == (oper=='=')); } else if(oper=='+' || oper=='-' || oper=='*' || oper=='/') { if(left_value.check_type()) set_result(evaluate_arithmetic(oper, left_value.value(), r_constant_value.value())); + else if(left_value.check_type()) + set_result(evaluate_arithmetic(oper, left_value.value(), r_constant_value.value())); else if(left_value.check_type()) set_result(evaluate_arithmetic(oper, left_value.value(), r_constant_value.value())); } @@ -770,6 +782,8 @@ void ConstantFolder::visit(BinaryExpression &binary) { if(left_value.check_type()) set_result(evaluate_int_special_op(oper, left_value.value(), r_constant_value.value())); + else if(left_value.check_type()) + set_result(evaluate_int_special_op(oper, left_value.value(), r_constant_value.value())); } } @@ -800,8 +814,10 @@ void ConstantFolder::visit(FunctionCall &call) if(basic->kind==BasicTypeDeclaration::BOOL) convert_to_result(r_constant_value); - else if(basic->kind==BasicTypeDeclaration::INT && basic->size==32) + else if(basic->kind==BasicTypeDeclaration::INT && basic->size==32 && basic->sign) convert_to_result(r_constant_value); + else if(basic->kind==BasicTypeDeclaration::INT && basic->size==32 && !basic->sign) + convert_to_result(r_constant_value); else if(basic->kind==BasicTypeDeclaration::FLOAT && basic->size==32) convert_to_result(r_constant_value);