use crate::ir::DataType;
#[inline]
pub(crate) fn cast_is_valid(source: DataType, target: DataType) -> bool {
if source == target {
return true;
}
matches!(
(source, target),
(DataType::U32, DataType::I32)
| (DataType::U32, DataType::Bool)
| (DataType::U32, DataType::U64)
| (DataType::U32, DataType::Vec2U32)
| (DataType::U32, DataType::Vec4U32)
| (DataType::I32, DataType::U32)
| (DataType::I32, DataType::Bool)
| (DataType::I32, DataType::U64)
| (DataType::I32, DataType::Vec2U32)
| (DataType::I32, DataType::Vec4U32)
| (DataType::Bool, DataType::U32)
| (DataType::Bool, DataType::I32)
| (DataType::Bool, DataType::U64)
| (DataType::Bool, DataType::Vec2U32)
| (DataType::Bool, DataType::Vec4U32)
| (DataType::U64, DataType::U32)
| (DataType::U64, DataType::I32)
| (DataType::U64, DataType::Bool)
| (DataType::U64, DataType::Vec2U32)
| (DataType::Vec2U32, DataType::U32)
| (DataType::Vec2U32, DataType::I32)
| (DataType::Vec2U32, DataType::U64)
| (DataType::Vec2U32, DataType::Bool)
| (DataType::Vec4U32, DataType::U32)
| (DataType::Vec4U32, DataType::I32)
| (DataType::Vec4U32, DataType::Vec2U32)
| (DataType::Vec4U32, DataType::Bool)
| (DataType::Vec4U32, DataType::U64)
| (DataType::U32, DataType::F32)
| (DataType::F32, DataType::U32)
)
}