@@ -975,47 +975,16 @@ impl super::Validator {
975975 accept,
976976 reject,
977977 } => {
978- let accept_inner = & resolver[ accept] ;
979- let reject_inner = & resolver[ reject] ;
980- let condition_ty = & resolver[ condition] ;
981- let condition_good = match * condition_ty {
982- Ti :: Scalar ( Sc {
983- kind : Sk :: Bool ,
984- width : _,
985- } ) => {
986- // When `condition` is a single boolean, `accept` and
987- // `reject` can be vectors or scalars.
988- match * accept_inner {
989- Ti :: Scalar { .. } | Ti :: Vector { .. } => true ,
990- _ => false ,
991- }
992- }
993- Ti :: Vector {
994- size,
995- scalar :
996- Sc {
997- kind : Sk :: Bool ,
998- width : _,
999- } ,
1000- } => match * accept_inner {
1001- Ti :: Vector {
1002- size : other_size, ..
1003- } => size == other_size,
1004- _ => false ,
1005- } ,
1006- _ => false ,
1007- } ;
1008- if accept_inner != reject_inner {
1009- return Err ( ExpressionError :: SelectValuesTypeMismatch {
1010- accept : accept_inner. clone ( ) ,
1011- reject : reject_inner. clone ( ) ,
1012- } ) ;
1013- }
1014- if !condition_good {
1015- return Err ( ExpressionError :: SelectConditionNotABool {
1016- actual : condition_ty. clone ( ) ,
1017- } ) ;
1018- }
978+ self . validate_func_call_with_overloads (
979+ module,
980+ "Select" ,
981+ proc:: select:: overloads ( ) ,
982+ [ reject, accept, condition]
983+ . iter ( )
984+ . copied ( )
985+ . map ( |arg| ( arg, & resolver[ arg] ) ) ,
986+ ) ?;
987+
1019988 ShaderStages :: all ( )
1020989 }
1021990 E :: Derivative { expr, .. } => {
0 commit comments