• Home
  • Raw
  • Download

Lines Matching full:arguments

55 static bool has_compile_time_constant_arguments(const ExpressionArray& arguments) {  in has_compile_time_constant_arguments()  argument
56 for (const std::unique_ptr<Expression>& arg : arguments) { in has_compile_time_constant_arguments()
105 // Takes up to two vector or scalar arguments and coalesces them in sequence: in coalesce_n_way_vector()
113 // If an argument is null, zero is passed to the coalesce function. If the arguments are a mix in coalesce_n_way_vector()
160 static std::unique_ptr<Expression> coalesce_vector(const IntrinsicArguments& arguments, in coalesce_vector() argument
165 SkASSERT(arguments[0]); in coalesce_vector()
166 SkASSERT(!arguments[1]); in coalesce_vector()
167 type_check_expression<T>(*arguments[0]); in coalesce_vector()
169 return coalesce_n_way_vector(arguments[0], /*arg1=*/nullptr, in coalesce_vector()
174 static std::unique_ptr<Expression> coalesce_pairwise_vectors(const IntrinsicArguments& arguments, in coalesce_pairwise_vectors() argument
179 SkASSERT(arguments[0]); in coalesce_pairwise_vectors()
180 SkASSERT(arguments[1]); in coalesce_pairwise_vectors()
181 SkASSERT(!arguments[2]); in coalesce_pairwise_vectors()
182 type_check_expression<T>(*arguments[0]); in coalesce_pairwise_vectors()
183 type_check_expression<T>(*arguments[1]); in coalesce_pairwise_vectors()
185 return coalesce_n_way_vector(arguments[0], arguments[1], in coalesce_pairwise_vectors()
192 const IntrinsicArguments& arguments, in optimize_comparison() argument
194 const Expression* left = arguments[0]; in optimize_comparison()
195 const Expression* right = arguments[1]; in optimize_comparison()
198 SkASSERT(!arguments[2]); in optimize_comparison()
227 // Takes up to three arguments and evaluates all of them, left-to-right, in tandem. in evaluate_n_way_intrinsic()
234 // If an argument is null, zero is passed to the evaluation function. If the arguments are a mix in evaluate_n_way_intrinsic()
280 const IntrinsicArguments& arguments, in evaluate_intrinsic() argument
283 SkASSERT(arguments[0]); in evaluate_intrinsic()
284 SkASSERT(!arguments[1]); in evaluate_intrinsic()
285 type_check_expression<T>(*arguments[0]); in evaluate_intrinsic()
287 return evaluate_n_way_intrinsic(context, arguments[0], /*arg1=*/nullptr, /*arg2=*/nullptr, in evaluate_intrinsic()
292 const IntrinsicArguments& arguments, in evaluate_intrinsic_numeric() argument
295 SkASSERT(arguments[0]); in evaluate_intrinsic_numeric()
296 SkASSERT(!arguments[1]); in evaluate_intrinsic_numeric()
297 const Type& type = arguments[0]->type().componentType(); in evaluate_intrinsic_numeric()
300 return evaluate_intrinsic<float>(context, arguments, returnType, eval); in evaluate_intrinsic_numeric()
303 return evaluate_intrinsic<SKSL_INT>(context, arguments, returnType, eval); in evaluate_intrinsic_numeric()
311 const IntrinsicArguments& arguments, in evaluate_pairwise_intrinsic() argument
314 SkASSERT(arguments[0]); in evaluate_pairwise_intrinsic()
315 SkASSERT(arguments[1]); in evaluate_pairwise_intrinsic()
316 SkASSERT(!arguments[2]); in evaluate_pairwise_intrinsic()
317 const Type& type = arguments[0]->type().componentType(); in evaluate_pairwise_intrinsic()
320 type_check_expression<float>(*arguments[0]); in evaluate_pairwise_intrinsic()
321 type_check_expression<float>(*arguments[1]); in evaluate_pairwise_intrinsic()
323 type_check_expression<SKSL_INT>(*arguments[0]); in evaluate_pairwise_intrinsic()
324 type_check_expression<SKSL_INT>(*arguments[1]); in evaluate_pairwise_intrinsic()
330 return evaluate_n_way_intrinsic(context, arguments[0], arguments[1], /*arg2=*/nullptr, in evaluate_pairwise_intrinsic()
335 const IntrinsicArguments& arguments, in evaluate_3_way_intrinsic() argument
338 SkASSERT(arguments[0]); in evaluate_3_way_intrinsic()
339 SkASSERT(arguments[1]); in evaluate_3_way_intrinsic()
340 SkASSERT(arguments[2]); in evaluate_3_way_intrinsic()
341 const Type& type = arguments[0]->type().componentType(); in evaluate_3_way_intrinsic()
344 type_check_expression<float>(*arguments[0]); in evaluate_3_way_intrinsic()
345 type_check_expression<float>(*arguments[1]); in evaluate_3_way_intrinsic()
346 type_check_expression<float>(*arguments[2]); in evaluate_3_way_intrinsic()
348 type_check_expression<SKSL_INT>(*arguments[0]); in evaluate_3_way_intrinsic()
349 type_check_expression<SKSL_INT>(*arguments[1]); in evaluate_3_way_intrinsic()
350 type_check_expression<SKSL_INT>(*arguments[2]); in evaluate_3_way_intrinsic()
356 return evaluate_n_way_intrinsic(context, arguments[0], arguments[1], arguments[2], in evaluate_3_way_intrinsic()
470 IntrinsicArguments arguments = {}; in optimize_intrinsic_call() local
471 SkASSERT(SkToSizeT(argArray.size()) <= arguments.size()); in optimize_intrinsic_call()
473 arguments[index] = ConstantFolder::GetConstantValueForVariable(*argArray[index]); in optimize_intrinsic_call()
477 return *arguments[idx]->getConstantValue(col); in optimize_intrinsic_call()
484 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
487 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
490 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
493 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
496 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
499 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
502 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
505 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
508 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
511 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
515 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
518 return evaluate_pairwise_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
522 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
526 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
529 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
533 return evaluate_pairwise_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
536 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
539 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
542 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
545 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
548 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
551 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
555 return evaluate_intrinsic_numeric(context, arguments, returnType, in optimize_intrinsic_call()
558 return evaluate_intrinsic_numeric(context, arguments, returnType, in optimize_intrinsic_call()
561 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
564 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
567 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
570 return evaluate_pairwise_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
573 return evaluate_pairwise_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
576 return evaluate_pairwise_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
579 return evaluate_3_way_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
582 return evaluate_3_way_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
585 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
588 if (arguments[2]->type().componentType().isBoolean()) { in optimize_intrinsic_call()
589 const SkSL::Type& numericType = arguments[0]->type().componentType(); in optimize_intrinsic_call()
592 type_check_expression<float>(*arguments[0]); in optimize_intrinsic_call()
593 type_check_expression<float>(*arguments[1]); in optimize_intrinsic_call()
595 type_check_expression<SKSL_INT>(*arguments[0]); in optimize_intrinsic_call()
596 type_check_expression<SKSL_INT>(*arguments[1]); in optimize_intrinsic_call()
598 type_check_expression<bool>(*arguments[0]); in optimize_intrinsic_call()
599 type_check_expression<bool>(*arguments[1]); in optimize_intrinsic_call()
604 return evaluate_n_way_intrinsic(context, arguments[0], arguments[1], arguments[2], in optimize_intrinsic_call()
607 return evaluate_3_way_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
611 return evaluate_pairwise_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
614 return evaluate_3_way_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
617 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
621 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
624 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
627 return evaluate_intrinsic<float>(context, arguments, returnType, in optimize_intrinsic_call()
630 return evaluate_intrinsic<SKSL_INT>(context, arguments, returnType, in optimize_intrinsic_call()
633 return evaluate_intrinsic<SKSL_INT>(context, arguments, returnType, in optimize_intrinsic_call()
660 SKSL_INT x = *arguments[0]->getConstantValue(0); in optimize_intrinsic_call()
667 SKSL_INT x = *arguments[0]->getConstantValue(0); in optimize_intrinsic_call()
674 SKSL_INT x = *arguments[0]->getConstantValue(0); in optimize_intrinsic_call()
682 return coalesce_vector<float>(arguments, /*startingState=*/0, returnType, in optimize_intrinsic_call()
686 return coalesce_pairwise_vectors<float>(arguments, /*startingState=*/0, returnType, in optimize_intrinsic_call()
690 return coalesce_pairwise_vectors<float>(arguments, /*startingState=*/0, returnType, in optimize_intrinsic_call()
696 SkASSERT(arguments[0]->type().columns() == 3); // the vec2 form is not a real intrinsic in optimize_intrinsic_call()
701 return assemble_compound(context, arguments[0]->fPosition, returnType, vec); in optimize_intrinsic_call()
704 auto Vec = [&] { return DSLExpression{arguments[0]->clone()}; }; in optimize_intrinsic_call()
708 auto N = [&] { return DSLExpression{arguments[0]->clone()}; }; in optimize_intrinsic_call()
709 auto I = [&] { return DSLExpression{arguments[1]->clone()}; }; in optimize_intrinsic_call()
710 auto NRef = [&] { return DSLExpression{arguments[2]->clone()}; }; in optimize_intrinsic_call()
714 auto I = [&] { return DSLExpression{arguments[0]->clone()}; }; in optimize_intrinsic_call()
715 auto N = [&] { return DSLExpression{arguments[1]->clone()}; }; in optimize_intrinsic_call()
719 // Refract uses its arguments out-of-order in such a way that we end up trying to create in optimize_intrinsic_call()
720 // an invalid Position range, so we rewrite the arguments' positions to avoid that here. in optimize_intrinsic_call()
724 auto I = [&] { return clone(arguments[0]); }; in optimize_intrinsic_call()
725 auto N = [&] { return clone(arguments[1]); }; in optimize_intrinsic_call()
726 auto Eta = [&] { return clone(arguments[2]); }; in optimize_intrinsic_call()
741 return evaluate_pairwise_intrinsic(context, arguments, returnType, in optimize_intrinsic_call()
751 return assemble_compound(context, arguments[0]->fPosition, returnType, mat); in optimize_intrinsic_call()
761 return assemble_compound(context, arguments[0]->fPosition, returnType, mat); in optimize_intrinsic_call()
765 extract_matrix(arguments[0], mat); in optimize_intrinsic_call()
767 switch (arguments[0]->type().slotCount()) { in optimize_intrinsic_call()
778 SkDEBUGFAILF("unsupported type %s", arguments[0]->type().description().c_str()); in optimize_intrinsic_call()
781 return Literal::MakeFloat(arguments[0]->fPosition, determinant, &returnType); in optimize_intrinsic_call()
785 extract_matrix(arguments[0], mat); in optimize_intrinsic_call()
786 switch (arguments[0]->type().slotCount()) { in optimize_intrinsic_call()
803 SkDEBUGFAILF("unsupported type %s", arguments[0]->type().description().c_str()); in optimize_intrinsic_call()
809 return assemble_compound(context, arguments[0]->fPosition, returnType, dmat); in optimize_intrinsic_call()
813 return optimize_comparison(context, arguments, Intrinsics::compare_lessThan); in optimize_intrinsic_call()
816 return optimize_comparison(context, arguments, Intrinsics::compare_lessThanEqual); in optimize_intrinsic_call()
819 return optimize_comparison(context, arguments, Intrinsics::compare_greaterThan); in optimize_intrinsic_call()
822 return optimize_comparison(context, arguments, Intrinsics::compare_greaterThanEqual); in optimize_intrinsic_call()
825 return optimize_comparison(context, arguments, Intrinsics::compare_equal); in optimize_intrinsic_call()
828 return optimize_comparison(context, arguments, Intrinsics::compare_notEqual); in optimize_intrinsic_call()
831 return coalesce_vector<bool>(arguments, /*startingState=*/false, returnType, in optimize_intrinsic_call()
835 return coalesce_vector<bool>(arguments, /*startingState=*/true, returnType, in optimize_intrinsic_call()
839 return evaluate_intrinsic<bool>(context, arguments, returnType, in optimize_intrinsic_call()
848 this->arguments().clone()); in clone()
854 for (const std::unique_ptr<Expression>& arg : this->arguments()) { in description()
863 * Determines the cost of coercing the arguments of a function to the required types. Cost has no
869 const ExpressionArray& arguments) { in call_cost() argument
874 if (function.parameters().size() != SkToSizeT(arguments.size())) { in call_cost()
879 if (!function.determineFinalTypes(arguments, &types, &ignored)) { in call_cost()
883 for (int i = 0; i < arguments.size(); i++) { in call_cost()
884 total = total + arguments[i]->coercionCost(*types[i]); in call_cost()
892 const ExpressionArray& arguments) { in FindBestFunctionForCall() argument
899 CoercionCost cost = call_cost(context, *f, arguments); in FindBestFunctionForCall()
908 static std::string build_argument_type_list(SkSpan<const std::unique_ptr<Expression>> arguments) { in build_argument_type_list() argument
911 for (const std::unique_ptr<Expression>& arg : arguments) { in build_argument_type_list()
921 ExpressionArray arguments) { in Convert() argument
927 std::move(arguments)); in Convert()
931 arguments); in Convert()
933 return FunctionCall::Convert(context, pos, *best, std::move(arguments)); in Convert()
936 build_argument_type_list(arguments); in Convert()
942 arguments.push_back(std::move(ref.self())); in Convert()
945 arguments); in Convert()
947 return FunctionCall::Convert(context, pos, *best, std::move(arguments)); in Convert()
950 "no match for " + arguments.back()->type().displayName() + in Convert()
952 build_argument_type_list(SkSpan(arguments).first(arguments.size() - 1)); in Convert()
968 ExpressionArray arguments) { in Convert() argument
975 // Reject function calls with the wrong number of arguments. in Convert()
976 if (function.parameters().size() != SkToSizeT(arguments.size())) { in Convert()
982 msg += ", but found " + std::to_string(arguments.size()); in Convert()
990 if (!function.determineFinalTypes(arguments, &types, &returnType)) { in Convert()
992 build_argument_type_list(arguments); in Convert()
997 for (int i = 0; i < arguments.size(); i++) { in Convert()
999 arguments[i] = types[i]->coerceExpression(std::move(arguments[i]), context); in Convert()
1000 if (!arguments[i]) { in Convert()
1009 if (!Analysis::UpdateVariableRefKind(arguments[i].get(), refKind, context.fErrors)) { in Convert()
1025 const Variable& child = *arguments.back()->as<VariableReference>().variable(); in Convert()
1026 arguments.pop_back(); in Convert()
1027 return ChildCall::Make(context, pos, returnType, child, std::move(arguments)); in Convert()
1030 return Make(context, pos, returnType, function, std::move(arguments)); in Convert()
1037 ExpressionArray arguments) { in Make() argument
1038 SkASSERT(function.parameters().size() == SkToSizeT(arguments.size())); in Make()
1041 if (function.isIntrinsic() && has_compile_time_constant_arguments(arguments)) { in Make()
1046 arguments, in Make()
1053 return std::make_unique<FunctionCall>(pos, returnType, &function, std::move(arguments)); in Make()