internal/shader: remove ConstType usages from canApplyBinaryOp

Updates #2550
This commit is contained in:
Hajime Hoshi 2023-07-23 14:50:03 +09:00
parent 94d1df8c7d
commit 9ffbc51607

View File

@ -85,65 +85,37 @@ func canApplyBinaryOp(lhs, rhs *shaderir.Expr, lhst, rhst shaderir.Type, op shad
switch { switch {
case lhs.Const != nil && rhs.Const != nil: case lhs.Const != nil && rhs.Const != nil:
switch { if canTruncateToFloat(lhs.Const) && canTruncateToFloat(rhs.Const) {
case lhs.ConstType == shaderir.ConstTypeNone && rhs.ConstType == shaderir.ConstTypeNone: return true
if canTruncateToFloat(lhs.Const) && canTruncateToFloat(rhs.Const) {
return true
}
if canTruncateToInteger(lhs.Const) && canTruncateToInteger(rhs.Const) {
return true
}
return lhs.Const.Kind() == rhs.Const.Kind()
case lhs.ConstType == shaderir.ConstTypeNone:
switch rhs.ConstType {
case shaderir.ConstTypeFloat:
return canTruncateToFloat(lhs.Const)
case shaderir.ConstTypeInt:
return canTruncateToInteger(lhs.Const)
}
case rhs.ConstType == shaderir.ConstTypeNone:
switch lhs.ConstType {
case shaderir.ConstTypeInt:
return canTruncateToInteger(rhs.Const)
case shaderir.ConstTypeFloat:
return canTruncateToFloat(rhs.Const)
}
} }
return lhs.ConstType == rhs.ConstType if canTruncateToInteger(lhs.Const) && canTruncateToInteger(rhs.Const) {
return true
}
return lhs.Const.Kind() == rhs.Const.Kind()
case lhs.Const != nil: case lhs.Const != nil:
switch lhs.ConstType { if rhst.Main == shaderir.Float {
case shaderir.ConstTypeNone: return canTruncateToFloat(lhs.Const)
if rhst.Main == shaderir.Float {
return canTruncateToFloat(lhs.Const)
}
if rhst.Main == shaderir.Int {
return canTruncateToInteger(lhs.Const)
}
case shaderir.ConstTypeFloat:
return rhst.Main == shaderir.Float
case shaderir.ConstTypeInt:
return rhst.Main == shaderir.Int
case shaderir.ConstTypeBool:
return rhst.Main == shaderir.Bool
} }
if rhst.Main == shaderir.Int {
return canTruncateToInteger(lhs.Const)
}
if rhst.Main == shaderir.Bool {
return lhs.Const.Kind() == gconstant.Bool
}
return false
case rhs.Const != nil: case rhs.Const != nil:
switch rhs.ConstType { if lhst.Main == shaderir.Float {
case shaderir.ConstTypeNone: return canTruncateToFloat(rhs.Const)
if lhst.Main == shaderir.Float {
return canTruncateToFloat(rhs.Const)
}
if lhst.Main == shaderir.Int {
return canTruncateToInteger(rhs.Const)
}
case shaderir.ConstTypeFloat:
return lhst.Main == shaderir.Float
case shaderir.ConstTypeInt:
return lhst.Main == shaderir.Int
case shaderir.ConstTypeBool:
return lhst.Main == shaderir.Bool
} }
if lhst.Main == shaderir.Int {
return canTruncateToInteger(rhs.Const)
}
if lhst.Main == shaderir.Bool {
return rhs.Const.Kind() == gconstant.Bool
}
return false
} }
// Comparing matrices are forbidden (#2187). // Comparing matrices are forbidden (#2187).