MCPcopy Create free account
hub / github.com/dfranx/ShaderDebugger / translateBinaryExpression

Method translateBinaryExpression

src/HLSLCompiler.cpp:602–634  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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);

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected