| 600 | } |
| 601 | } |
| 602 | void HLSLCompiler::translateBinaryExpression(M4::HLSLBinaryExpression* expr) |
| 603 | { |
| 604 | HLSLCompiler::ExpressionType lType = m_convertType(expr->expression1->expressionType); |
| 605 | HLSLCompiler::ExpressionType rType = m_convertType(expr->expression2->expressionType); |
| 606 | |
| 607 | // call fmod() when using modulo with floats |
| 608 | if (expr->binaryOp == M4::HLSLBinaryOp_Mod && |
| 609 | (rType.Type == ag::Type::Float || lType.Type == ag::Type::Float) && |
| 610 | (rType.Columns * rType.Rows == 1 && lType.Columns * lType.Rows == 1)) |
| 611 | { |
| 612 | translateExpression(expr->expression2); |
| 613 | if (lType.Columns * lType.Rows > 1 && rType.Columns * rType.Rows == 1) |
| 614 | m_generateConvert(lType); |
| 615 | |
| 616 | translateExpression(expr->expression1); |
| 617 | if (rType.Columns * rType.Rows > 1 && lType.Columns * lType.Rows == 1) |
| 618 | m_generateConvert(rType); |
| 619 | |
| 620 | m_gen.Function.CallReturn("fmod", 2); |
| 621 | } |
| 622 | // else generate operator opcode |
| 623 | else { |
| 624 | translateExpression(expr->expression1); |
| 625 | if (rType.Columns * rType.Rows > 1 && lType.Columns * lType.Rows == 1) |
| 626 | m_generateConvert(rType); |
| 627 | |
| 628 | translateExpression(expr->expression2); |
| 629 | if (lType.Columns * lType.Rows > 1 && rType.Columns * rType.Rows == 1) |
| 630 | m_generateConvert(lType); |
| 631 | |
| 632 | translateOperator(expr->binaryOp); |
| 633 | } |
| 634 | } |
| 635 | void HLSLCompiler::translateAssignExpression(M4::HLSLBinaryExpression* expr) |
| 636 | { |
| 637 | HLSLCompiler::ExpressionType lType = m_convertType(expr->expression1->expressionType); |
nothing calls this directly
no outgoing calls
no test coverage detected