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,8 +85,6 @@ 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 {
case lhs.ConstType == shaderir.ConstTypeNone && rhs.ConstType == shaderir.ConstTypeNone:
if canTruncateToFloat(lhs.Const) && canTruncateToFloat(rhs.Const) { if canTruncateToFloat(lhs.Const) && canTruncateToFloat(rhs.Const) {
return true return true
} }
@ -94,56 +92,30 @@ func canApplyBinaryOp(lhs, rhs *shaderir.Expr, lhst, rhst shaderir.Type, op shad
return true return true
} }
return lhs.Const.Kind() == rhs.Const.Kind() 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
case lhs.Const != nil: case lhs.Const != nil:
switch lhs.ConstType {
case shaderir.ConstTypeNone:
if rhst.Main == shaderir.Float { if rhst.Main == shaderir.Float {
return canTruncateToFloat(lhs.Const) return canTruncateToFloat(lhs.Const)
} }
if rhst.Main == shaderir.Int { if rhst.Main == shaderir.Int {
return canTruncateToInteger(lhs.Const) return canTruncateToInteger(lhs.Const)
} }
case shaderir.ConstTypeFloat: if rhst.Main == shaderir.Bool {
return rhst.Main == shaderir.Float return lhs.Const.Kind() == gconstant.Bool
case shaderir.ConstTypeInt:
return rhst.Main == shaderir.Int
case shaderir.ConstTypeBool:
return rhst.Main == shaderir.Bool
} }
return false
case rhs.Const != nil: case rhs.Const != nil:
switch rhs.ConstType {
case shaderir.ConstTypeNone:
if lhst.Main == shaderir.Float { if lhst.Main == shaderir.Float {
return canTruncateToFloat(rhs.Const) return canTruncateToFloat(rhs.Const)
} }
if lhst.Main == shaderir.Int { if lhst.Main == shaderir.Int {
return canTruncateToInteger(rhs.Const) return canTruncateToInteger(rhs.Const)
} }
case shaderir.ConstTypeFloat: if lhst.Main == shaderir.Bool {
return lhst.Main == shaderir.Float return rhs.Const.Kind() == gconstant.Bool
case shaderir.ConstTypeInt:
return lhst.Main == shaderir.Int
case shaderir.ConstTypeBool:
return lhst.Main == shaderir.Bool
} }
return false
} }
// Comparing matrices are forbidden (#2187). // Comparing matrices are forbidden (#2187).