1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 // Don't edit this file! It is auto-generated by frameworks/rs/api/generate.sh. 18 19 /* 20 * rs_math.rsh: Mathematical Constants and Functions 21 * 22 * The mathematical functions below can be applied to scalars and vectors. When applied 23 * to vectors, the returned value is a vector of the function applied to each entry of the input. 24 * 25 * For example: 26 * float3 a, b; 27 * // The following call sets 28 * // a.x to sin(b.x), 29 * // a.y to sin(b.y), and 30 * // a.z to sin(b.z). 31 * a = sin(b); 32 * 33 * 34 * See Vector Math Functions for functions like distance() and length() that interpret 35 * instead the input as a single vector in n-dimensional space. 36 * 37 * The precision of the mathematical operations on 32 bit floats is affected by the pragmas 38 * rs_fp_relaxed and rs_fp_full. Under rs_fp_relaxed, subnormal values may be flushed to zero and 39 * rounding may be done towards zero. In comparison, rs_fp_full requires correct handling of 40 * subnormal values, i.e. smaller than 1.17549435e-38f. rs_fp_rull also requires round to nearest 41 * with ties to even. 42 * 43 * Different precision/speed tradeoffs can be achieved by using variants of the common math 44 * functions. Functions with a name starting with 45 * - native_: May have custom hardware implementations with weaker precision. Additionally, 46 * subnormal values may be flushed to zero, rounding towards zero may be used, and NaN and 47 * infinity input may not be handled correctly. 48 * - half_: May perform internal computations using 16 bit floats. Additionally, subnormal 49 * values may be flushed to zero, and rounding towards zero may be used. 50 * 51 */ 52 53 #ifndef RENDERSCRIPT_RS_MATH_RSH 54 #define RENDERSCRIPT_RS_MATH_RSH 55 56 /* 57 * M_1_PI: 1 / pi, as a 32 bit float 58 * 59 * The inverse of pi, as a 32 bit float. 60 */ 61 #define M_1_PI 0.318309886183790671537767526745028724f 62 63 /* 64 * M_2_PI: 2 / pi, as a 32 bit float 65 * 66 * 2 divided by pi, as a 32 bit float. 67 */ 68 #define M_2_PI 0.636619772367581343075535053490057448f 69 70 /* 71 * M_2_PIl: 2 / pi, as a 32 bit float 72 * 73 * DEPRECATED. Do not use. 74 * 75 * 2 divided by pi, as a 32 bit float. 76 */ 77 #define M_2_PIl 0.636619772367581343075535053490057448f 78 79 /* 80 * M_2_SQRTPI: 2 / sqrt(pi), as a 32 bit float 81 * 82 * 2 divided by the square root of pi, as a 32 bit float. 83 */ 84 #define M_2_SQRTPI 1.128379167095512573896158903121545172f 85 86 /* 87 * M_E: e, as a 32 bit float 88 * 89 * The number e, the base of the natural logarithm, as a 32 bit float. 90 */ 91 #define M_E 2.718281828459045235360287471352662498f 92 93 /* 94 * M_LN10: log_e(10), as a 32 bit float 95 * 96 * The natural logarithm of 10, as a 32 bit float. 97 */ 98 #define M_LN10 2.302585092994045684017991454684364208f 99 100 /* 101 * M_LN2: log_e(2), as a 32 bit float 102 * 103 * The natural logarithm of 2, as a 32 bit float. 104 */ 105 #define M_LN2 0.693147180559945309417232121458176568f 106 107 /* 108 * M_LOG10E: log_10(e), as a 32 bit float 109 * 110 * The logarithm base 10 of e, as a 32 bit float. 111 */ 112 #define M_LOG10E 0.434294481903251827651128918916605082f 113 114 /* 115 * M_LOG2E: log_2(e), as a 32 bit float 116 * 117 * The logarithm base 2 of e, as a 32 bit float. 118 */ 119 #define M_LOG2E 1.442695040888963407359924681001892137f 120 121 /* 122 * M_PI: pi, as a 32 bit float 123 * 124 * The constant pi, as a 32 bit float. 125 */ 126 #define M_PI 3.141592653589793238462643383279502884f 127 128 /* 129 * M_PI_2: pi / 2, as a 32 bit float 130 * 131 * Pi divided by 2, as a 32 bit float. 132 */ 133 #define M_PI_2 1.570796326794896619231321691639751442f 134 135 /* 136 * M_PI_4: pi / 4, as a 32 bit float 137 * 138 * Pi divided by 4, as a 32 bit float. 139 */ 140 #define M_PI_4 0.785398163397448309615660845819875721f 141 142 /* 143 * M_SQRT1_2: 1 / sqrt(2), as a 32 bit float 144 * 145 * The inverse of the square root of 2, as a 32 bit float. 146 */ 147 #define M_SQRT1_2 0.707106781186547524400844362104849039f 148 149 /* 150 * M_SQRT2: sqrt(2), as a 32 bit float 151 * 152 * The square root of 2, as a 32 bit float. 153 */ 154 #define M_SQRT2 1.414213562373095048801688724209698079f 155 156 /* 157 * abs: Absolute value of an integer 158 * 159 * Returns the absolute value of an integer. 160 * 161 * For floats, use fabs(). 162 */ 163 extern uchar __attribute__((const, overloadable)) 164 abs(char v); 165 166 extern uchar2 __attribute__((const, overloadable)) 167 abs(char2 v); 168 169 extern uchar3 __attribute__((const, overloadable)) 170 abs(char3 v); 171 172 extern uchar4 __attribute__((const, overloadable)) 173 abs(char4 v); 174 175 extern ushort __attribute__((const, overloadable)) 176 abs(short v); 177 178 extern ushort2 __attribute__((const, overloadable)) 179 abs(short2 v); 180 181 extern ushort3 __attribute__((const, overloadable)) 182 abs(short3 v); 183 184 extern ushort4 __attribute__((const, overloadable)) 185 abs(short4 v); 186 187 extern uint __attribute__((const, overloadable)) 188 abs(int v); 189 190 extern uint2 __attribute__((const, overloadable)) 191 abs(int2 v); 192 193 extern uint3 __attribute__((const, overloadable)) 194 abs(int3 v); 195 196 extern uint4 __attribute__((const, overloadable)) 197 abs(int4 v); 198 199 /* 200 * acos: Inverse cosine 201 * 202 * Returns the inverse cosine, in radians. 203 * 204 * See also native_acos(). 205 */ 206 extern float __attribute__((const, overloadable)) 207 acos(float v); 208 209 extern float2 __attribute__((const, overloadable)) 210 acos(float2 v); 211 212 extern float3 __attribute__((const, overloadable)) 213 acos(float3 v); 214 215 extern float4 __attribute__((const, overloadable)) 216 acos(float4 v); 217 218 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 219 extern half __attribute__((const, overloadable)) 220 acos(half v); 221 #endif 222 223 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 224 extern half2 __attribute__((const, overloadable)) 225 acos(half2 v); 226 #endif 227 228 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 229 extern half3 __attribute__((const, overloadable)) 230 acos(half3 v); 231 #endif 232 233 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 234 extern half4 __attribute__((const, overloadable)) 235 acos(half4 v); 236 #endif 237 238 /* 239 * acosh: Inverse hyperbolic cosine 240 * 241 * Returns the inverse hyperbolic cosine, in radians. 242 * 243 * See also native_acosh(). 244 */ 245 extern float __attribute__((const, overloadable)) 246 acosh(float v); 247 248 extern float2 __attribute__((const, overloadable)) 249 acosh(float2 v); 250 251 extern float3 __attribute__((const, overloadable)) 252 acosh(float3 v); 253 254 extern float4 __attribute__((const, overloadable)) 255 acosh(float4 v); 256 257 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 258 extern half __attribute__((const, overloadable)) 259 acosh(half v); 260 #endif 261 262 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 263 extern half2 __attribute__((const, overloadable)) 264 acosh(half2 v); 265 #endif 266 267 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 268 extern half3 __attribute__((const, overloadable)) 269 acosh(half3 v); 270 #endif 271 272 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 273 extern half4 __attribute__((const, overloadable)) 274 acosh(half4 v); 275 #endif 276 277 /* 278 * acospi: Inverse cosine divided by pi 279 * 280 * Returns the inverse cosine in radians, divided by pi. 281 * 282 * To get an inverse cosine measured in degrees, use acospi(a) * 180.f. 283 * 284 * See also native_acospi(). 285 */ 286 extern float __attribute__((const, overloadable)) 287 acospi(float v); 288 289 extern float2 __attribute__((const, overloadable)) 290 acospi(float2 v); 291 292 extern float3 __attribute__((const, overloadable)) 293 acospi(float3 v); 294 295 extern float4 __attribute__((const, overloadable)) 296 acospi(float4 v); 297 298 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 299 extern half __attribute__((const, overloadable)) 300 acospi(half v); 301 #endif 302 303 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 304 extern half2 __attribute__((const, overloadable)) 305 acospi(half2 v); 306 #endif 307 308 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 309 extern half3 __attribute__((const, overloadable)) 310 acospi(half3 v); 311 #endif 312 313 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 314 extern half4 __attribute__((const, overloadable)) 315 acospi(half4 v); 316 #endif 317 318 /* 319 * asin: Inverse sine 320 * 321 * Returns the inverse sine, in radians. 322 * 323 * See also native_asin(). 324 */ 325 extern float __attribute__((const, overloadable)) 326 asin(float v); 327 328 extern float2 __attribute__((const, overloadable)) 329 asin(float2 v); 330 331 extern float3 __attribute__((const, overloadable)) 332 asin(float3 v); 333 334 extern float4 __attribute__((const, overloadable)) 335 asin(float4 v); 336 337 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 338 extern half __attribute__((const, overloadable)) 339 asin(half v); 340 #endif 341 342 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 343 extern half2 __attribute__((const, overloadable)) 344 asin(half2 v); 345 #endif 346 347 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 348 extern half3 __attribute__((const, overloadable)) 349 asin(half3 v); 350 #endif 351 352 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 353 extern half4 __attribute__((const, overloadable)) 354 asin(half4 v); 355 #endif 356 357 /* 358 * asinh: Inverse hyperbolic sine 359 * 360 * Returns the inverse hyperbolic sine, in radians. 361 * 362 * See also native_asinh(). 363 */ 364 extern float __attribute__((const, overloadable)) 365 asinh(float v); 366 367 extern float2 __attribute__((const, overloadable)) 368 asinh(float2 v); 369 370 extern float3 __attribute__((const, overloadable)) 371 asinh(float3 v); 372 373 extern float4 __attribute__((const, overloadable)) 374 asinh(float4 v); 375 376 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 377 extern half __attribute__((const, overloadable)) 378 asinh(half v); 379 #endif 380 381 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 382 extern half2 __attribute__((const, overloadable)) 383 asinh(half2 v); 384 #endif 385 386 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 387 extern half3 __attribute__((const, overloadable)) 388 asinh(half3 v); 389 #endif 390 391 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 392 extern half4 __attribute__((const, overloadable)) 393 asinh(half4 v); 394 #endif 395 396 /* 397 * asinpi: Inverse sine divided by pi 398 * 399 * Returns the inverse sine in radians, divided by pi. 400 * 401 * To get an inverse sine measured in degrees, use asinpi(a) * 180.f. 402 * 403 * See also native_asinpi(). 404 */ 405 extern float __attribute__((const, overloadable)) 406 asinpi(float v); 407 408 extern float2 __attribute__((const, overloadable)) 409 asinpi(float2 v); 410 411 extern float3 __attribute__((const, overloadable)) 412 asinpi(float3 v); 413 414 extern float4 __attribute__((const, overloadable)) 415 asinpi(float4 v); 416 417 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 418 extern half __attribute__((const, overloadable)) 419 asinpi(half v); 420 #endif 421 422 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 423 extern half2 __attribute__((const, overloadable)) 424 asinpi(half2 v); 425 #endif 426 427 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 428 extern half3 __attribute__((const, overloadable)) 429 asinpi(half3 v); 430 #endif 431 432 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 433 extern half4 __attribute__((const, overloadable)) 434 asinpi(half4 v); 435 #endif 436 437 /* 438 * atan: Inverse tangent 439 * 440 * Returns the inverse tangent, in radians. 441 * 442 * See also native_atan(). 443 */ 444 extern float __attribute__((const, overloadable)) 445 atan(float v); 446 447 extern float2 __attribute__((const, overloadable)) 448 atan(float2 v); 449 450 extern float3 __attribute__((const, overloadable)) 451 atan(float3 v); 452 453 extern float4 __attribute__((const, overloadable)) 454 atan(float4 v); 455 456 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 457 extern half __attribute__((const, overloadable)) 458 atan(half v); 459 #endif 460 461 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 462 extern half2 __attribute__((const, overloadable)) 463 atan(half2 v); 464 #endif 465 466 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 467 extern half3 __attribute__((const, overloadable)) 468 atan(half3 v); 469 #endif 470 471 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 472 extern half4 __attribute__((const, overloadable)) 473 atan(half4 v); 474 #endif 475 476 /* 477 * atan2: Inverse tangent of a ratio 478 * 479 * Returns the inverse tangent of (numerator / denominator), in radians. 480 * 481 * See also native_atan2(). 482 * 483 * Parameters: 484 * numerator: Numerator. 485 * denominator: Denominator. Can be 0. 486 */ 487 extern float __attribute__((const, overloadable)) 488 atan2(float numerator, float denominator); 489 490 extern float2 __attribute__((const, overloadable)) 491 atan2(float2 numerator, float2 denominator); 492 493 extern float3 __attribute__((const, overloadable)) 494 atan2(float3 numerator, float3 denominator); 495 496 extern float4 __attribute__((const, overloadable)) 497 atan2(float4 numerator, float4 denominator); 498 499 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 500 extern half __attribute__((const, overloadable)) 501 atan2(half numerator, half denominator); 502 #endif 503 504 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 505 extern half2 __attribute__((const, overloadable)) 506 atan2(half2 numerator, half2 denominator); 507 #endif 508 509 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 510 extern half3 __attribute__((const, overloadable)) 511 atan2(half3 numerator, half3 denominator); 512 #endif 513 514 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 515 extern half4 __attribute__((const, overloadable)) 516 atan2(half4 numerator, half4 denominator); 517 #endif 518 519 /* 520 * atan2pi: Inverse tangent of a ratio, divided by pi 521 * 522 * Returns the inverse tangent of (numerator / denominator), in radians, divided by pi. 523 * 524 * To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f. 525 * 526 * See also native_atan2pi(). 527 * 528 * Parameters: 529 * numerator: Numerator. 530 * denominator: Denominator. Can be 0. 531 */ 532 extern float __attribute__((const, overloadable)) 533 atan2pi(float numerator, float denominator); 534 535 extern float2 __attribute__((const, overloadable)) 536 atan2pi(float2 numerator, float2 denominator); 537 538 extern float3 __attribute__((const, overloadable)) 539 atan2pi(float3 numerator, float3 denominator); 540 541 extern float4 __attribute__((const, overloadable)) 542 atan2pi(float4 numerator, float4 denominator); 543 544 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 545 extern half __attribute__((const, overloadable)) 546 atan2pi(half numerator, half denominator); 547 #endif 548 549 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 550 extern half2 __attribute__((const, overloadable)) 551 atan2pi(half2 numerator, half2 denominator); 552 #endif 553 554 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 555 extern half3 __attribute__((const, overloadable)) 556 atan2pi(half3 numerator, half3 denominator); 557 #endif 558 559 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 560 extern half4 __attribute__((const, overloadable)) 561 atan2pi(half4 numerator, half4 denominator); 562 #endif 563 564 /* 565 * atanh: Inverse hyperbolic tangent 566 * 567 * Returns the inverse hyperbolic tangent, in radians. 568 * 569 * See also native_atanh(). 570 */ 571 extern float __attribute__((const, overloadable)) 572 atanh(float v); 573 574 extern float2 __attribute__((const, overloadable)) 575 atanh(float2 v); 576 577 extern float3 __attribute__((const, overloadable)) 578 atanh(float3 v); 579 580 extern float4 __attribute__((const, overloadable)) 581 atanh(float4 v); 582 583 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 584 extern half __attribute__((const, overloadable)) 585 atanh(half v); 586 #endif 587 588 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 589 extern half2 __attribute__((const, overloadable)) 590 atanh(half2 v); 591 #endif 592 593 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 594 extern half3 __attribute__((const, overloadable)) 595 atanh(half3 v); 596 #endif 597 598 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 599 extern half4 __attribute__((const, overloadable)) 600 atanh(half4 v); 601 #endif 602 603 /* 604 * atanpi: Inverse tangent divided by pi 605 * 606 * Returns the inverse tangent in radians, divided by pi. 607 * 608 * To get an inverse tangent measured in degrees, use atanpi(a) * 180.f. 609 * 610 * See also native_atanpi(). 611 */ 612 extern float __attribute__((const, overloadable)) 613 atanpi(float v); 614 615 extern float2 __attribute__((const, overloadable)) 616 atanpi(float2 v); 617 618 extern float3 __attribute__((const, overloadable)) 619 atanpi(float3 v); 620 621 extern float4 __attribute__((const, overloadable)) 622 atanpi(float4 v); 623 624 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 625 extern half __attribute__((const, overloadable)) 626 atanpi(half v); 627 #endif 628 629 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 630 extern half2 __attribute__((const, overloadable)) 631 atanpi(half2 v); 632 #endif 633 634 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 635 extern half3 __attribute__((const, overloadable)) 636 atanpi(half3 v); 637 #endif 638 639 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 640 extern half4 __attribute__((const, overloadable)) 641 atanpi(half4 v); 642 #endif 643 644 /* 645 * cbrt: Cube root 646 * 647 * Returns the cube root. 648 * 649 * See also native_cbrt(). 650 */ 651 extern float __attribute__((const, overloadable)) 652 cbrt(float v); 653 654 extern float2 __attribute__((const, overloadable)) 655 cbrt(float2 v); 656 657 extern float3 __attribute__((const, overloadable)) 658 cbrt(float3 v); 659 660 extern float4 __attribute__((const, overloadable)) 661 cbrt(float4 v); 662 663 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 664 extern half __attribute__((const, overloadable)) 665 cbrt(half v); 666 #endif 667 668 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 669 extern half2 __attribute__((const, overloadable)) 670 cbrt(half2 v); 671 #endif 672 673 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 674 extern half3 __attribute__((const, overloadable)) 675 cbrt(half3 v); 676 #endif 677 678 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 679 extern half4 __attribute__((const, overloadable)) 680 cbrt(half4 v); 681 #endif 682 683 /* 684 * ceil: Smallest integer not less than a value 685 * 686 * Returns the smallest integer not less than a value. 687 * 688 * For example, ceil(1.2f) returns 2.f, and ceil(-1.2f) returns -1.f. 689 * 690 * See also floor(). 691 */ 692 extern float __attribute__((const, overloadable)) 693 ceil(float v); 694 695 extern float2 __attribute__((const, overloadable)) 696 ceil(float2 v); 697 698 extern float3 __attribute__((const, overloadable)) 699 ceil(float3 v); 700 701 extern float4 __attribute__((const, overloadable)) 702 ceil(float4 v); 703 704 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 705 extern half __attribute__((const, overloadable)) 706 ceil(half v); 707 #endif 708 709 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 710 extern half2 __attribute__((const, overloadable)) 711 ceil(half2 v); 712 #endif 713 714 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 715 extern half3 __attribute__((const, overloadable)) 716 ceil(half3 v); 717 #endif 718 719 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 720 extern half4 __attribute__((const, overloadable)) 721 ceil(half4 v); 722 #endif 723 724 /* 725 * clamp: Restrain a value to a range 726 * 727 * Clamps a value to a specified high and low bound. clamp() returns min_value 728 * if value < min_value, max_value if value > max_value, otherwise value. 729 * 730 * There are two variants of clamp: one where the min and max are scalars applied 731 * to all entries of the value, the other where the min and max are also vectors. 732 * 733 * If min_value is greater than max_value, the results are undefined. 734 * 735 * Parameters: 736 * value: Value to be clamped. 737 * min_value: Lower bound, a scalar or matching vector. 738 * max_value: High bound, must match the type of low. 739 */ 740 extern float __attribute__((const, overloadable)) 741 clamp(float value, float min_value, float max_value); 742 743 extern float2 __attribute__((const, overloadable)) 744 clamp(float2 value, float2 min_value, float2 max_value); 745 746 extern float3 __attribute__((const, overloadable)) 747 clamp(float3 value, float3 min_value, float3 max_value); 748 749 extern float4 __attribute__((const, overloadable)) 750 clamp(float4 value, float4 min_value, float4 max_value); 751 752 extern float2 __attribute__((const, overloadable)) 753 clamp(float2 value, float min_value, float max_value); 754 755 extern float3 __attribute__((const, overloadable)) 756 clamp(float3 value, float min_value, float max_value); 757 758 extern float4 __attribute__((const, overloadable)) 759 clamp(float4 value, float min_value, float max_value); 760 761 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 762 extern char __attribute__((const, overloadable)) 763 clamp(char value, char min_value, char max_value); 764 #endif 765 766 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 767 extern char2 __attribute__((const, overloadable)) 768 clamp(char2 value, char2 min_value, char2 max_value); 769 #endif 770 771 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 772 extern char3 __attribute__((const, overloadable)) 773 clamp(char3 value, char3 min_value, char3 max_value); 774 #endif 775 776 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 777 extern char4 __attribute__((const, overloadable)) 778 clamp(char4 value, char4 min_value, char4 max_value); 779 #endif 780 781 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 782 extern uchar __attribute__((const, overloadable)) 783 clamp(uchar value, uchar min_value, uchar max_value); 784 #endif 785 786 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 787 extern uchar2 __attribute__((const, overloadable)) 788 clamp(uchar2 value, uchar2 min_value, uchar2 max_value); 789 #endif 790 791 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 792 extern uchar3 __attribute__((const, overloadable)) 793 clamp(uchar3 value, uchar3 min_value, uchar3 max_value); 794 #endif 795 796 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 797 extern uchar4 __attribute__((const, overloadable)) 798 clamp(uchar4 value, uchar4 min_value, uchar4 max_value); 799 #endif 800 801 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 802 extern short __attribute__((const, overloadable)) 803 clamp(short value, short min_value, short max_value); 804 #endif 805 806 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 807 extern short2 __attribute__((const, overloadable)) 808 clamp(short2 value, short2 min_value, short2 max_value); 809 #endif 810 811 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 812 extern short3 __attribute__((const, overloadable)) 813 clamp(short3 value, short3 min_value, short3 max_value); 814 #endif 815 816 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 817 extern short4 __attribute__((const, overloadable)) 818 clamp(short4 value, short4 min_value, short4 max_value); 819 #endif 820 821 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 822 extern ushort __attribute__((const, overloadable)) 823 clamp(ushort value, ushort min_value, ushort max_value); 824 #endif 825 826 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 827 extern ushort2 __attribute__((const, overloadable)) 828 clamp(ushort2 value, ushort2 min_value, ushort2 max_value); 829 #endif 830 831 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 832 extern ushort3 __attribute__((const, overloadable)) 833 clamp(ushort3 value, ushort3 min_value, ushort3 max_value); 834 #endif 835 836 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 837 extern ushort4 __attribute__((const, overloadable)) 838 clamp(ushort4 value, ushort4 min_value, ushort4 max_value); 839 #endif 840 841 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 842 extern int __attribute__((const, overloadable)) 843 clamp(int value, int min_value, int max_value); 844 #endif 845 846 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 847 extern int2 __attribute__((const, overloadable)) 848 clamp(int2 value, int2 min_value, int2 max_value); 849 #endif 850 851 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 852 extern int3 __attribute__((const, overloadable)) 853 clamp(int3 value, int3 min_value, int3 max_value); 854 #endif 855 856 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 857 extern int4 __attribute__((const, overloadable)) 858 clamp(int4 value, int4 min_value, int4 max_value); 859 #endif 860 861 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 862 extern uint __attribute__((const, overloadable)) 863 clamp(uint value, uint min_value, uint max_value); 864 #endif 865 866 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 867 extern uint2 __attribute__((const, overloadable)) 868 clamp(uint2 value, uint2 min_value, uint2 max_value); 869 #endif 870 871 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 872 extern uint3 __attribute__((const, overloadable)) 873 clamp(uint3 value, uint3 min_value, uint3 max_value); 874 #endif 875 876 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 877 extern uint4 __attribute__((const, overloadable)) 878 clamp(uint4 value, uint4 min_value, uint4 max_value); 879 #endif 880 881 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 882 extern long __attribute__((const, overloadable)) 883 clamp(long value, long min_value, long max_value); 884 #endif 885 886 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 887 extern long2 __attribute__((const, overloadable)) 888 clamp(long2 value, long2 min_value, long2 max_value); 889 #endif 890 891 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 892 extern long3 __attribute__((const, overloadable)) 893 clamp(long3 value, long3 min_value, long3 max_value); 894 #endif 895 896 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 897 extern long4 __attribute__((const, overloadable)) 898 clamp(long4 value, long4 min_value, long4 max_value); 899 #endif 900 901 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 902 extern ulong __attribute__((const, overloadable)) 903 clamp(ulong value, ulong min_value, ulong max_value); 904 #endif 905 906 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 907 extern ulong2 __attribute__((const, overloadable)) 908 clamp(ulong2 value, ulong2 min_value, ulong2 max_value); 909 #endif 910 911 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 912 extern ulong3 __attribute__((const, overloadable)) 913 clamp(ulong3 value, ulong3 min_value, ulong3 max_value); 914 #endif 915 916 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 917 extern ulong4 __attribute__((const, overloadable)) 918 clamp(ulong4 value, ulong4 min_value, ulong4 max_value); 919 #endif 920 921 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 922 extern char2 __attribute__((const, overloadable)) 923 clamp(char2 value, char min_value, char max_value); 924 #endif 925 926 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 927 extern char3 __attribute__((const, overloadable)) 928 clamp(char3 value, char min_value, char max_value); 929 #endif 930 931 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 932 extern char4 __attribute__((const, overloadable)) 933 clamp(char4 value, char min_value, char max_value); 934 #endif 935 936 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 937 extern uchar2 __attribute__((const, overloadable)) 938 clamp(uchar2 value, uchar min_value, uchar max_value); 939 #endif 940 941 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 942 extern uchar3 __attribute__((const, overloadable)) 943 clamp(uchar3 value, uchar min_value, uchar max_value); 944 #endif 945 946 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 947 extern uchar4 __attribute__((const, overloadable)) 948 clamp(uchar4 value, uchar min_value, uchar max_value); 949 #endif 950 951 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 952 extern short2 __attribute__((const, overloadable)) 953 clamp(short2 value, short min_value, short max_value); 954 #endif 955 956 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 957 extern short3 __attribute__((const, overloadable)) 958 clamp(short3 value, short min_value, short max_value); 959 #endif 960 961 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 962 extern short4 __attribute__((const, overloadable)) 963 clamp(short4 value, short min_value, short max_value); 964 #endif 965 966 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 967 extern ushort2 __attribute__((const, overloadable)) 968 clamp(ushort2 value, ushort min_value, ushort max_value); 969 #endif 970 971 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 972 extern ushort3 __attribute__((const, overloadable)) 973 clamp(ushort3 value, ushort min_value, ushort max_value); 974 #endif 975 976 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 977 extern ushort4 __attribute__((const, overloadable)) 978 clamp(ushort4 value, ushort min_value, ushort max_value); 979 #endif 980 981 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 982 extern int2 __attribute__((const, overloadable)) 983 clamp(int2 value, int min_value, int max_value); 984 #endif 985 986 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 987 extern int3 __attribute__((const, overloadable)) 988 clamp(int3 value, int min_value, int max_value); 989 #endif 990 991 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 992 extern int4 __attribute__((const, overloadable)) 993 clamp(int4 value, int min_value, int max_value); 994 #endif 995 996 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 997 extern uint2 __attribute__((const, overloadable)) 998 clamp(uint2 value, uint min_value, uint max_value); 999 #endif 1000 1001 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 1002 extern uint3 __attribute__((const, overloadable)) 1003 clamp(uint3 value, uint min_value, uint max_value); 1004 #endif 1005 1006 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 1007 extern uint4 __attribute__((const, overloadable)) 1008 clamp(uint4 value, uint min_value, uint max_value); 1009 #endif 1010 1011 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 1012 extern long2 __attribute__((const, overloadable)) 1013 clamp(long2 value, long min_value, long max_value); 1014 #endif 1015 1016 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 1017 extern long3 __attribute__((const, overloadable)) 1018 clamp(long3 value, long min_value, long max_value); 1019 #endif 1020 1021 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 1022 extern long4 __attribute__((const, overloadable)) 1023 clamp(long4 value, long min_value, long max_value); 1024 #endif 1025 1026 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 1027 extern ulong2 __attribute__((const, overloadable)) 1028 clamp(ulong2 value, ulong min_value, ulong max_value); 1029 #endif 1030 1031 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 1032 extern ulong3 __attribute__((const, overloadable)) 1033 clamp(ulong3 value, ulong min_value, ulong max_value); 1034 #endif 1035 1036 #if (defined(RS_VERSION) && (RS_VERSION >= 19)) 1037 extern ulong4 __attribute__((const, overloadable)) 1038 clamp(ulong4 value, ulong min_value, ulong max_value); 1039 #endif 1040 1041 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1042 extern half __attribute__((const, overloadable)) 1043 clamp(half value, half min_value, half max_value); 1044 #endif 1045 1046 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1047 extern half2 __attribute__((const, overloadable)) 1048 clamp(half2 value, half2 min_value, half2 max_value); 1049 #endif 1050 1051 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1052 extern half3 __attribute__((const, overloadable)) 1053 clamp(half3 value, half3 min_value, half3 max_value); 1054 #endif 1055 1056 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1057 extern half4 __attribute__((const, overloadable)) 1058 clamp(half4 value, half4 min_value, half4 max_value); 1059 #endif 1060 1061 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1062 extern half2 __attribute__((const, overloadable)) 1063 clamp(half2 value, half min_value, half max_value); 1064 #endif 1065 1066 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1067 extern half3 __attribute__((const, overloadable)) 1068 clamp(half3 value, half min_value, half max_value); 1069 #endif 1070 1071 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1072 extern half4 __attribute__((const, overloadable)) 1073 clamp(half4 value, half min_value, half max_value); 1074 #endif 1075 1076 /* 1077 * clz: Number of leading 0 bits 1078 * 1079 * Returns the number of leading 0-bits in a value. 1080 * 1081 * For example, clz((char)0x03) returns 6. 1082 */ 1083 extern char __attribute__((const, overloadable)) 1084 clz(char value); 1085 1086 extern char2 __attribute__((const, overloadable)) 1087 clz(char2 value); 1088 1089 extern char3 __attribute__((const, overloadable)) 1090 clz(char3 value); 1091 1092 extern char4 __attribute__((const, overloadable)) 1093 clz(char4 value); 1094 1095 extern uchar __attribute__((const, overloadable)) 1096 clz(uchar value); 1097 1098 extern uchar2 __attribute__((const, overloadable)) 1099 clz(uchar2 value); 1100 1101 extern uchar3 __attribute__((const, overloadable)) 1102 clz(uchar3 value); 1103 1104 extern uchar4 __attribute__((const, overloadable)) 1105 clz(uchar4 value); 1106 1107 extern short __attribute__((const, overloadable)) 1108 clz(short value); 1109 1110 extern short2 __attribute__((const, overloadable)) 1111 clz(short2 value); 1112 1113 extern short3 __attribute__((const, overloadable)) 1114 clz(short3 value); 1115 1116 extern short4 __attribute__((const, overloadable)) 1117 clz(short4 value); 1118 1119 extern ushort __attribute__((const, overloadable)) 1120 clz(ushort value); 1121 1122 extern ushort2 __attribute__((const, overloadable)) 1123 clz(ushort2 value); 1124 1125 extern ushort3 __attribute__((const, overloadable)) 1126 clz(ushort3 value); 1127 1128 extern ushort4 __attribute__((const, overloadable)) 1129 clz(ushort4 value); 1130 1131 extern int __attribute__((const, overloadable)) 1132 clz(int value); 1133 1134 extern int2 __attribute__((const, overloadable)) 1135 clz(int2 value); 1136 1137 extern int3 __attribute__((const, overloadable)) 1138 clz(int3 value); 1139 1140 extern int4 __attribute__((const, overloadable)) 1141 clz(int4 value); 1142 1143 extern uint __attribute__((const, overloadable)) 1144 clz(uint value); 1145 1146 extern uint2 __attribute__((const, overloadable)) 1147 clz(uint2 value); 1148 1149 extern uint3 __attribute__((const, overloadable)) 1150 clz(uint3 value); 1151 1152 extern uint4 __attribute__((const, overloadable)) 1153 clz(uint4 value); 1154 1155 /* 1156 * copysign: Copies the sign of a number to another 1157 * 1158 * Copies the sign from sign_value to magnitude_value. 1159 * 1160 * The value returned is either magnitude_value or -magnitude_value. 1161 * 1162 * For example, copysign(4.0f, -2.7f) returns -4.0f and copysign(-4.0f, 2.7f) returns 4.0f. 1163 */ 1164 extern float __attribute__((const, overloadable)) 1165 copysign(float magnitude_value, float sign_value); 1166 1167 extern float2 __attribute__((const, overloadable)) 1168 copysign(float2 magnitude_value, float2 sign_value); 1169 1170 extern float3 __attribute__((const, overloadable)) 1171 copysign(float3 magnitude_value, float3 sign_value); 1172 1173 extern float4 __attribute__((const, overloadable)) 1174 copysign(float4 magnitude_value, float4 sign_value); 1175 1176 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1177 extern half __attribute__((const, overloadable)) 1178 copysign(half magnitude_value, half sign_value); 1179 #endif 1180 1181 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1182 extern half2 __attribute__((const, overloadable)) 1183 copysign(half2 magnitude_value, half2 sign_value); 1184 #endif 1185 1186 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1187 extern half3 __attribute__((const, overloadable)) 1188 copysign(half3 magnitude_value, half3 sign_value); 1189 #endif 1190 1191 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1192 extern half4 __attribute__((const, overloadable)) 1193 copysign(half4 magnitude_value, half4 sign_value); 1194 #endif 1195 1196 /* 1197 * cos: Cosine 1198 * 1199 * Returns the cosine of an angle measured in radians. 1200 * 1201 * See also native_cos(). 1202 */ 1203 extern float __attribute__((const, overloadable)) 1204 cos(float v); 1205 1206 extern float2 __attribute__((const, overloadable)) 1207 cos(float2 v); 1208 1209 extern float3 __attribute__((const, overloadable)) 1210 cos(float3 v); 1211 1212 extern float4 __attribute__((const, overloadable)) 1213 cos(float4 v); 1214 1215 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1216 extern half __attribute__((const, overloadable)) 1217 cos(half v); 1218 #endif 1219 1220 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1221 extern half2 __attribute__((const, overloadable)) 1222 cos(half2 v); 1223 #endif 1224 1225 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1226 extern half3 __attribute__((const, overloadable)) 1227 cos(half3 v); 1228 #endif 1229 1230 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1231 extern half4 __attribute__((const, overloadable)) 1232 cos(half4 v); 1233 #endif 1234 1235 /* 1236 * cosh: Hypebolic cosine 1237 * 1238 * Returns the hypebolic cosine of v, where v is measured in radians. 1239 * 1240 * See also native_cosh(). 1241 */ 1242 extern float __attribute__((const, overloadable)) 1243 cosh(float v); 1244 1245 extern float2 __attribute__((const, overloadable)) 1246 cosh(float2 v); 1247 1248 extern float3 __attribute__((const, overloadable)) 1249 cosh(float3 v); 1250 1251 extern float4 __attribute__((const, overloadable)) 1252 cosh(float4 v); 1253 1254 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1255 extern half __attribute__((const, overloadable)) 1256 cosh(half v); 1257 #endif 1258 1259 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1260 extern half2 __attribute__((const, overloadable)) 1261 cosh(half2 v); 1262 #endif 1263 1264 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1265 extern half3 __attribute__((const, overloadable)) 1266 cosh(half3 v); 1267 #endif 1268 1269 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1270 extern half4 __attribute__((const, overloadable)) 1271 cosh(half4 v); 1272 #endif 1273 1274 /* 1275 * cospi: Cosine of a number multiplied by pi 1276 * 1277 * Returns the cosine of (v * pi), where (v * pi) is measured in radians. 1278 * 1279 * To get the cosine of a value measured in degrees, call cospi(v / 180.f). 1280 * 1281 * See also native_cospi(). 1282 */ 1283 extern float __attribute__((const, overloadable)) 1284 cospi(float v); 1285 1286 extern float2 __attribute__((const, overloadable)) 1287 cospi(float2 v); 1288 1289 extern float3 __attribute__((const, overloadable)) 1290 cospi(float3 v); 1291 1292 extern float4 __attribute__((const, overloadable)) 1293 cospi(float4 v); 1294 1295 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1296 extern half __attribute__((const, overloadable)) 1297 cospi(half v); 1298 #endif 1299 1300 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1301 extern half2 __attribute__((const, overloadable)) 1302 cospi(half2 v); 1303 #endif 1304 1305 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1306 extern half3 __attribute__((const, overloadable)) 1307 cospi(half3 v); 1308 #endif 1309 1310 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1311 extern half4 __attribute__((const, overloadable)) 1312 cospi(half4 v); 1313 #endif 1314 1315 /* 1316 * degrees: Converts radians into degrees 1317 * 1318 * Converts from radians to degrees. 1319 */ 1320 extern float __attribute__((const, overloadable)) 1321 degrees(float v); 1322 1323 extern float2 __attribute__((const, overloadable)) 1324 degrees(float2 v); 1325 1326 extern float3 __attribute__((const, overloadable)) 1327 degrees(float3 v); 1328 1329 extern float4 __attribute__((const, overloadable)) 1330 degrees(float4 v); 1331 1332 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1333 extern half __attribute__((const, overloadable)) 1334 degrees(half v); 1335 #endif 1336 1337 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1338 extern half2 __attribute__((const, overloadable)) 1339 degrees(half2 v); 1340 #endif 1341 1342 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1343 extern half3 __attribute__((const, overloadable)) 1344 degrees(half3 v); 1345 #endif 1346 1347 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1348 extern half4 __attribute__((const, overloadable)) 1349 degrees(half4 v); 1350 #endif 1351 1352 /* 1353 * erf: Mathematical error function 1354 * 1355 * Returns the error function. 1356 */ 1357 extern float __attribute__((const, overloadable)) 1358 erf(float v); 1359 1360 extern float2 __attribute__((const, overloadable)) 1361 erf(float2 v); 1362 1363 extern float3 __attribute__((const, overloadable)) 1364 erf(float3 v); 1365 1366 extern float4 __attribute__((const, overloadable)) 1367 erf(float4 v); 1368 1369 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1370 extern half __attribute__((const, overloadable)) 1371 erf(half v); 1372 #endif 1373 1374 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1375 extern half2 __attribute__((const, overloadable)) 1376 erf(half2 v); 1377 #endif 1378 1379 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1380 extern half3 __attribute__((const, overloadable)) 1381 erf(half3 v); 1382 #endif 1383 1384 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1385 extern half4 __attribute__((const, overloadable)) 1386 erf(half4 v); 1387 #endif 1388 1389 /* 1390 * erfc: Mathematical complementary error function 1391 * 1392 * Returns the complementary error function. 1393 */ 1394 extern float __attribute__((const, overloadable)) 1395 erfc(float v); 1396 1397 extern float2 __attribute__((const, overloadable)) 1398 erfc(float2 v); 1399 1400 extern float3 __attribute__((const, overloadable)) 1401 erfc(float3 v); 1402 1403 extern float4 __attribute__((const, overloadable)) 1404 erfc(float4 v); 1405 1406 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1407 extern half __attribute__((const, overloadable)) 1408 erfc(half v); 1409 #endif 1410 1411 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1412 extern half2 __attribute__((const, overloadable)) 1413 erfc(half2 v); 1414 #endif 1415 1416 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1417 extern half3 __attribute__((const, overloadable)) 1418 erfc(half3 v); 1419 #endif 1420 1421 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1422 extern half4 __attribute__((const, overloadable)) 1423 erfc(half4 v); 1424 #endif 1425 1426 /* 1427 * exp: e raised to a number 1428 * 1429 * Returns e raised to v, i.e. e ^ v. 1430 * 1431 * See also native_exp(). 1432 */ 1433 extern float __attribute__((const, overloadable)) 1434 exp(float v); 1435 1436 extern float2 __attribute__((const, overloadable)) 1437 exp(float2 v); 1438 1439 extern float3 __attribute__((const, overloadable)) 1440 exp(float3 v); 1441 1442 extern float4 __attribute__((const, overloadable)) 1443 exp(float4 v); 1444 1445 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1446 extern half __attribute__((const, overloadable)) 1447 exp(half v); 1448 #endif 1449 1450 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1451 extern half2 __attribute__((const, overloadable)) 1452 exp(half2 v); 1453 #endif 1454 1455 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1456 extern half3 __attribute__((const, overloadable)) 1457 exp(half3 v); 1458 #endif 1459 1460 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1461 extern half4 __attribute__((const, overloadable)) 1462 exp(half4 v); 1463 #endif 1464 1465 /* 1466 * exp10: 10 raised to a number 1467 * 1468 * Returns 10 raised to v, i.e. 10.f ^ v. 1469 * 1470 * See also native_exp10(). 1471 */ 1472 extern float __attribute__((const, overloadable)) 1473 exp10(float v); 1474 1475 extern float2 __attribute__((const, overloadable)) 1476 exp10(float2 v); 1477 1478 extern float3 __attribute__((const, overloadable)) 1479 exp10(float3 v); 1480 1481 extern float4 __attribute__((const, overloadable)) 1482 exp10(float4 v); 1483 1484 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1485 extern half __attribute__((const, overloadable)) 1486 exp10(half v); 1487 #endif 1488 1489 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1490 extern half2 __attribute__((const, overloadable)) 1491 exp10(half2 v); 1492 #endif 1493 1494 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1495 extern half3 __attribute__((const, overloadable)) 1496 exp10(half3 v); 1497 #endif 1498 1499 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1500 extern half4 __attribute__((const, overloadable)) 1501 exp10(half4 v); 1502 #endif 1503 1504 /* 1505 * exp2: 2 raised to a number 1506 * 1507 * Returns 2 raised to v, i.e. 2.f ^ v. 1508 * 1509 * See also native_exp2(). 1510 */ 1511 extern float __attribute__((const, overloadable)) 1512 exp2(float v); 1513 1514 extern float2 __attribute__((const, overloadable)) 1515 exp2(float2 v); 1516 1517 extern float3 __attribute__((const, overloadable)) 1518 exp2(float3 v); 1519 1520 extern float4 __attribute__((const, overloadable)) 1521 exp2(float4 v); 1522 1523 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1524 extern half __attribute__((const, overloadable)) 1525 exp2(half v); 1526 #endif 1527 1528 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1529 extern half2 __attribute__((const, overloadable)) 1530 exp2(half2 v); 1531 #endif 1532 1533 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1534 extern half3 __attribute__((const, overloadable)) 1535 exp2(half3 v); 1536 #endif 1537 1538 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1539 extern half4 __attribute__((const, overloadable)) 1540 exp2(half4 v); 1541 #endif 1542 1543 /* 1544 * expm1: e raised to a number minus one 1545 * 1546 * Returns e raised to v minus 1, i.e. (e ^ v) - 1. 1547 * 1548 * See also native_expm1(). 1549 */ 1550 extern float __attribute__((const, overloadable)) 1551 expm1(float v); 1552 1553 extern float2 __attribute__((const, overloadable)) 1554 expm1(float2 v); 1555 1556 extern float3 __attribute__((const, overloadable)) 1557 expm1(float3 v); 1558 1559 extern float4 __attribute__((const, overloadable)) 1560 expm1(float4 v); 1561 1562 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1563 extern half __attribute__((const, overloadable)) 1564 expm1(half v); 1565 #endif 1566 1567 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1568 extern half2 __attribute__((const, overloadable)) 1569 expm1(half2 v); 1570 #endif 1571 1572 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1573 extern half3 __attribute__((const, overloadable)) 1574 expm1(half3 v); 1575 #endif 1576 1577 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1578 extern half4 __attribute__((const, overloadable)) 1579 expm1(half4 v); 1580 #endif 1581 1582 /* 1583 * fabs: Absolute value of a float 1584 * 1585 * Returns the absolute value of the float v. 1586 * 1587 * For integers, use abs(). 1588 */ 1589 extern float __attribute__((const, overloadable)) 1590 fabs(float v); 1591 1592 extern float2 __attribute__((const, overloadable)) 1593 fabs(float2 v); 1594 1595 extern float3 __attribute__((const, overloadable)) 1596 fabs(float3 v); 1597 1598 extern float4 __attribute__((const, overloadable)) 1599 fabs(float4 v); 1600 1601 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1602 extern half __attribute__((const, overloadable)) 1603 fabs(half v); 1604 #endif 1605 1606 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1607 extern half2 __attribute__((const, overloadable)) 1608 fabs(half2 v); 1609 #endif 1610 1611 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1612 extern half3 __attribute__((const, overloadable)) 1613 fabs(half3 v); 1614 #endif 1615 1616 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1617 extern half4 __attribute__((const, overloadable)) 1618 fabs(half4 v); 1619 #endif 1620 1621 /* 1622 * fdim: Positive difference between two values 1623 * 1624 * Returns the positive difference between two values. 1625 * 1626 * If a > b, returns (a - b) otherwise returns 0f. 1627 */ 1628 extern float __attribute__((const, overloadable)) 1629 fdim(float a, float b); 1630 1631 extern float2 __attribute__((const, overloadable)) 1632 fdim(float2 a, float2 b); 1633 1634 extern float3 __attribute__((const, overloadable)) 1635 fdim(float3 a, float3 b); 1636 1637 extern float4 __attribute__((const, overloadable)) 1638 fdim(float4 a, float4 b); 1639 1640 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1641 extern half __attribute__((const, overloadable)) 1642 fdim(half a, half b); 1643 #endif 1644 1645 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1646 extern half2 __attribute__((const, overloadable)) 1647 fdim(half2 a, half2 b); 1648 #endif 1649 1650 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1651 extern half3 __attribute__((const, overloadable)) 1652 fdim(half3 a, half3 b); 1653 #endif 1654 1655 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1656 extern half4 __attribute__((const, overloadable)) 1657 fdim(half4 a, half4 b); 1658 #endif 1659 1660 /* 1661 * floor: Smallest integer not greater than a value 1662 * 1663 * Returns the smallest integer not greater than a value. 1664 * 1665 * For example, floor(1.2f) returns 1.f, and floor(-1.2f) returns -2.f. 1666 * 1667 * See also ceil(). 1668 */ 1669 extern float __attribute__((const, overloadable)) 1670 floor(float v); 1671 1672 extern float2 __attribute__((const, overloadable)) 1673 floor(float2 v); 1674 1675 extern float3 __attribute__((const, overloadable)) 1676 floor(float3 v); 1677 1678 extern float4 __attribute__((const, overloadable)) 1679 floor(float4 v); 1680 1681 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1682 extern half __attribute__((const, overloadable)) 1683 floor(half v); 1684 #endif 1685 1686 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1687 extern half2 __attribute__((const, overloadable)) 1688 floor(half2 v); 1689 #endif 1690 1691 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1692 extern half3 __attribute__((const, overloadable)) 1693 floor(half3 v); 1694 #endif 1695 1696 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1697 extern half4 __attribute__((const, overloadable)) 1698 floor(half4 v); 1699 #endif 1700 1701 /* 1702 * fma: Multiply and add 1703 * 1704 * Multiply and add. Returns (multiplicand1 * multiplicand2) + offset. 1705 * 1706 * This function is similar to mad(). fma() retains full precision of the multiplied result 1707 * and rounds only after the addition. mad() rounds after the multiplication and the addition. 1708 * This extra precision is not guaranteed in rs_fp_relaxed mode. 1709 */ 1710 extern float __attribute__((const, overloadable)) 1711 fma(float multiplicand1, float multiplicand2, float offset); 1712 1713 extern float2 __attribute__((const, overloadable)) 1714 fma(float2 multiplicand1, float2 multiplicand2, float2 offset); 1715 1716 extern float3 __attribute__((const, overloadable)) 1717 fma(float3 multiplicand1, float3 multiplicand2, float3 offset); 1718 1719 extern float4 __attribute__((const, overloadable)) 1720 fma(float4 multiplicand1, float4 multiplicand2, float4 offset); 1721 1722 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1723 extern half __attribute__((const, overloadable)) 1724 fma(half multiplicand1, half multiplicand2, half offset); 1725 #endif 1726 1727 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1728 extern half2 __attribute__((const, overloadable)) 1729 fma(half2 multiplicand1, half2 multiplicand2, half2 offset); 1730 #endif 1731 1732 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1733 extern half3 __attribute__((const, overloadable)) 1734 fma(half3 multiplicand1, half3 multiplicand2, half3 offset); 1735 #endif 1736 1737 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1738 extern half4 __attribute__((const, overloadable)) 1739 fma(half4 multiplicand1, half4 multiplicand2, half4 offset); 1740 #endif 1741 1742 /* 1743 * fmax: Maximum of two floats 1744 * 1745 * Returns the maximum of a and b, i.e. (a < b ? b : a). 1746 * 1747 * The max() function returns identical results but can be applied to more data types. 1748 */ 1749 extern float __attribute__((const, overloadable)) 1750 fmax(float a, float b); 1751 1752 extern float2 __attribute__((const, overloadable)) 1753 fmax(float2 a, float2 b); 1754 1755 extern float3 __attribute__((const, overloadable)) 1756 fmax(float3 a, float3 b); 1757 1758 extern float4 __attribute__((const, overloadable)) 1759 fmax(float4 a, float4 b); 1760 1761 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1762 extern half __attribute__((const, overloadable)) 1763 fmax(half a, half b); 1764 #endif 1765 1766 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1767 extern half2 __attribute__((const, overloadable)) 1768 fmax(half2 a, half2 b); 1769 #endif 1770 1771 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1772 extern half3 __attribute__((const, overloadable)) 1773 fmax(half3 a, half3 b); 1774 #endif 1775 1776 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1777 extern half4 __attribute__((const, overloadable)) 1778 fmax(half4 a, half4 b); 1779 #endif 1780 1781 extern float2 __attribute__((const, overloadable)) 1782 fmax(float2 a, float b); 1783 1784 extern float3 __attribute__((const, overloadable)) 1785 fmax(float3 a, float b); 1786 1787 extern float4 __attribute__((const, overloadable)) 1788 fmax(float4 a, float b); 1789 1790 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1791 extern half2 __attribute__((const, overloadable)) 1792 fmax(half2 a, half b); 1793 #endif 1794 1795 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1796 extern half3 __attribute__((const, overloadable)) 1797 fmax(half3 a, half b); 1798 #endif 1799 1800 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1801 extern half4 __attribute__((const, overloadable)) 1802 fmax(half4 a, half b); 1803 #endif 1804 1805 /* 1806 * fmin: Minimum of two floats 1807 * 1808 * Returns the minimum of a and b, i.e. (a > b ? b : a). 1809 * 1810 * The min() function returns identical results but can be applied to more data types. 1811 */ 1812 extern float __attribute__((const, overloadable)) 1813 fmin(float a, float b); 1814 1815 extern float2 __attribute__((const, overloadable)) 1816 fmin(float2 a, float2 b); 1817 1818 extern float3 __attribute__((const, overloadable)) 1819 fmin(float3 a, float3 b); 1820 1821 extern float4 __attribute__((const, overloadable)) 1822 fmin(float4 a, float4 b); 1823 1824 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1825 extern half __attribute__((const, overloadable)) 1826 fmin(half a, half b); 1827 #endif 1828 1829 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1830 extern half2 __attribute__((const, overloadable)) 1831 fmin(half2 a, half2 b); 1832 #endif 1833 1834 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1835 extern half3 __attribute__((const, overloadable)) 1836 fmin(half3 a, half3 b); 1837 #endif 1838 1839 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1840 extern half4 __attribute__((const, overloadable)) 1841 fmin(half4 a, half4 b); 1842 #endif 1843 1844 extern float2 __attribute__((const, overloadable)) 1845 fmin(float2 a, float b); 1846 1847 extern float3 __attribute__((const, overloadable)) 1848 fmin(float3 a, float b); 1849 1850 extern float4 __attribute__((const, overloadable)) 1851 fmin(float4 a, float b); 1852 1853 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1854 extern half2 __attribute__((const, overloadable)) 1855 fmin(half2 a, half b); 1856 #endif 1857 1858 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1859 extern half3 __attribute__((const, overloadable)) 1860 fmin(half3 a, half b); 1861 #endif 1862 1863 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1864 extern half4 __attribute__((const, overloadable)) 1865 fmin(half4 a, half b); 1866 #endif 1867 1868 /* 1869 * fmod: Modulo 1870 * 1871 * Returns the remainder of (numerator / denominator), where the quotient is rounded towards zero. 1872 * 1873 * The function remainder() is similar but rounds toward the closest interger. 1874 * For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f) 1875 * while remainder(-3.8f, 2.f) returns 0.2f (-3.8f - -2.f * 2.f). 1876 */ 1877 extern float __attribute__((const, overloadable)) 1878 fmod(float numerator, float denominator); 1879 1880 extern float2 __attribute__((const, overloadable)) 1881 fmod(float2 numerator, float2 denominator); 1882 1883 extern float3 __attribute__((const, overloadable)) 1884 fmod(float3 numerator, float3 denominator); 1885 1886 extern float4 __attribute__((const, overloadable)) 1887 fmod(float4 numerator, float4 denominator); 1888 1889 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1890 extern half __attribute__((const, overloadable)) 1891 fmod(half numerator, half denominator); 1892 #endif 1893 1894 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1895 extern half2 __attribute__((const, overloadable)) 1896 fmod(half2 numerator, half2 denominator); 1897 #endif 1898 1899 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1900 extern half3 __attribute__((const, overloadable)) 1901 fmod(half3 numerator, half3 denominator); 1902 #endif 1903 1904 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1905 extern half4 __attribute__((const, overloadable)) 1906 fmod(half4 numerator, half4 denominator); 1907 #endif 1908 1909 /* 1910 * fract: Positive fractional part 1911 * 1912 * Returns the positive fractional part of v, i.e. v - floor(v). 1913 * 1914 * For example, fract(1.3f, &val) returns 0.3f and sets val to 1.f. 1915 * fract(-1.3f, &val) returns 0.7f and sets val to -2.f. 1916 * 1917 * Parameters: 1918 * v: Input value. 1919 * floor: If floor is not null, *floor will be set to the floor of v. 1920 */ 1921 extern float __attribute__((overloadable)) 1922 fract(float v, float* floor); 1923 1924 extern float2 __attribute__((overloadable)) 1925 fract(float2 v, float2* floor); 1926 1927 extern float3 __attribute__((overloadable)) 1928 fract(float3 v, float3* floor); 1929 1930 extern float4 __attribute__((overloadable)) 1931 fract(float4 v, float4* floor); 1932 1933 #if !defined(RS_VERSION) || (RS_VERSION <= 23) 1934 static inline float __attribute__((const, overloadable)) 1935 fract(float v) { 1936 float unused; 1937 return fract(v, &unused); 1938 } 1939 #endif 1940 1941 #if !defined(RS_VERSION) || (RS_VERSION <= 23) 1942 static inline float2 __attribute__((const, overloadable)) 1943 fract(float2 v) { 1944 float2 unused; 1945 return fract(v, &unused); 1946 } 1947 #endif 1948 1949 #if !defined(RS_VERSION) || (RS_VERSION <= 23) 1950 static inline float3 __attribute__((const, overloadable)) 1951 fract(float3 v) { 1952 float3 unused; 1953 return fract(v, &unused); 1954 } 1955 #endif 1956 1957 #if !defined(RS_VERSION) || (RS_VERSION <= 23) 1958 static inline float4 __attribute__((const, overloadable)) 1959 fract(float4 v) { 1960 float4 unused; 1961 return fract(v, &unused); 1962 } 1963 #endif 1964 1965 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1966 extern float __attribute__((overloadable)) 1967 fract(float v); 1968 #endif 1969 1970 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1971 extern float2 __attribute__((overloadable)) 1972 fract(float2 v); 1973 #endif 1974 1975 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1976 extern float3 __attribute__((overloadable)) 1977 fract(float3 v); 1978 #endif 1979 1980 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1981 extern float4 __attribute__((overloadable)) 1982 fract(float4 v); 1983 #endif 1984 1985 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1986 extern half __attribute__((overloadable)) 1987 fract(half v, half* floor); 1988 #endif 1989 1990 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1991 extern half2 __attribute__((overloadable)) 1992 fract(half2 v, half2* floor); 1993 #endif 1994 1995 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 1996 extern half3 __attribute__((overloadable)) 1997 fract(half3 v, half3* floor); 1998 #endif 1999 2000 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2001 extern half4 __attribute__((overloadable)) 2002 fract(half4 v, half4* floor); 2003 #endif 2004 2005 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2006 extern half __attribute__((overloadable)) 2007 fract(half v); 2008 #endif 2009 2010 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2011 extern half2 __attribute__((overloadable)) 2012 fract(half2 v); 2013 #endif 2014 2015 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2016 extern half3 __attribute__((overloadable)) 2017 fract(half3 v); 2018 #endif 2019 2020 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2021 extern half4 __attribute__((overloadable)) 2022 fract(half4 v); 2023 #endif 2024 2025 /* 2026 * frexp: Binary mantissa and exponent 2027 * 2028 * Returns the binary mantissa and exponent of v, i.e. v == mantissa * 2 ^ exponent. 2029 * 2030 * The mantissa is always between 0.5 (inclusive) and 1.0 (exclusive). 2031 * 2032 * See ldexp() for the reverse operation. See also logb() and ilogb(). 2033 * 2034 * Parameters: 2035 * v: Input value. 2036 * exponent: If exponent is not null, *exponent will be set to the exponent of v. 2037 */ 2038 extern float __attribute__((overloadable)) 2039 frexp(float v, int* exponent); 2040 2041 extern float2 __attribute__((overloadable)) 2042 frexp(float2 v, int2* exponent); 2043 2044 extern float3 __attribute__((overloadable)) 2045 frexp(float3 v, int3* exponent); 2046 2047 extern float4 __attribute__((overloadable)) 2048 frexp(float4 v, int4* exponent); 2049 2050 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2051 extern half __attribute__((overloadable)) 2052 frexp(half v, int* exponent); 2053 #endif 2054 2055 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2056 extern half2 __attribute__((overloadable)) 2057 frexp(half2 v, int2* exponent); 2058 #endif 2059 2060 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2061 extern half3 __attribute__((overloadable)) 2062 frexp(half3 v, int3* exponent); 2063 #endif 2064 2065 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2066 extern half4 __attribute__((overloadable)) 2067 frexp(half4 v, int4* exponent); 2068 #endif 2069 2070 /* 2071 * half_recip: Reciprocal computed to 16 bit precision 2072 * 2073 * Returns the approximate reciprocal of a value. 2074 * 2075 * The precision is that of a 16 bit floating point value. 2076 * 2077 * See also native_recip(). 2078 */ 2079 #if (defined(RS_VERSION) && (RS_VERSION >= 17)) 2080 extern float __attribute__((const, overloadable)) 2081 half_recip(float v); 2082 #endif 2083 2084 #if (defined(RS_VERSION) && (RS_VERSION >= 17)) 2085 extern float2 __attribute__((const, overloadable)) 2086 half_recip(float2 v); 2087 #endif 2088 2089 #if (defined(RS_VERSION) && (RS_VERSION >= 17)) 2090 extern float3 __attribute__((const, overloadable)) 2091 half_recip(float3 v); 2092 #endif 2093 2094 #if (defined(RS_VERSION) && (RS_VERSION >= 17)) 2095 extern float4 __attribute__((const, overloadable)) 2096 half_recip(float4 v); 2097 #endif 2098 2099 /* 2100 * half_rsqrt: Reciprocal of a square root computed to 16 bit precision 2101 * 2102 * Returns the approximate value of (1.f / sqrt(value)). 2103 * 2104 * The precision is that of a 16 bit floating point value. 2105 * 2106 * See also rsqrt(), native_rsqrt(). 2107 */ 2108 #if (defined(RS_VERSION) && (RS_VERSION >= 17)) 2109 extern float __attribute__((const, overloadable)) 2110 half_rsqrt(float v); 2111 #endif 2112 2113 #if (defined(RS_VERSION) && (RS_VERSION >= 17)) 2114 extern float2 __attribute__((const, overloadable)) 2115 half_rsqrt(float2 v); 2116 #endif 2117 2118 #if (defined(RS_VERSION) && (RS_VERSION >= 17)) 2119 extern float3 __attribute__((const, overloadable)) 2120 half_rsqrt(float3 v); 2121 #endif 2122 2123 #if (defined(RS_VERSION) && (RS_VERSION >= 17)) 2124 extern float4 __attribute__((const, overloadable)) 2125 half_rsqrt(float4 v); 2126 #endif 2127 2128 /* 2129 * half_sqrt: Square root computed to 16 bit precision 2130 * 2131 * Returns the approximate square root of a value. 2132 * 2133 * The precision is that of a 16 bit floating point value. 2134 * 2135 * See also sqrt(), native_sqrt(). 2136 */ 2137 #if (defined(RS_VERSION) && (RS_VERSION >= 17)) 2138 extern float __attribute__((const, overloadable)) 2139 half_sqrt(float v); 2140 #endif 2141 2142 #if (defined(RS_VERSION) && (RS_VERSION >= 17)) 2143 extern float2 __attribute__((const, overloadable)) 2144 half_sqrt(float2 v); 2145 #endif 2146 2147 #if (defined(RS_VERSION) && (RS_VERSION >= 17)) 2148 extern float3 __attribute__((const, overloadable)) 2149 half_sqrt(float3 v); 2150 #endif 2151 2152 #if (defined(RS_VERSION) && (RS_VERSION >= 17)) 2153 extern float4 __attribute__((const, overloadable)) 2154 half_sqrt(float4 v); 2155 #endif 2156 2157 /* 2158 * hypot: Hypotenuse 2159 * 2160 * Returns the hypotenuse, i.e. sqrt(a * a + b * b). 2161 * 2162 * See also native_hypot(). 2163 */ 2164 extern float __attribute__((const, overloadable)) 2165 hypot(float a, float b); 2166 2167 extern float2 __attribute__((const, overloadable)) 2168 hypot(float2 a, float2 b); 2169 2170 extern float3 __attribute__((const, overloadable)) 2171 hypot(float3 a, float3 b); 2172 2173 extern float4 __attribute__((const, overloadable)) 2174 hypot(float4 a, float4 b); 2175 2176 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2177 extern half __attribute__((const, overloadable)) 2178 hypot(half a, half b); 2179 #endif 2180 2181 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2182 extern half2 __attribute__((const, overloadable)) 2183 hypot(half2 a, half2 b); 2184 #endif 2185 2186 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2187 extern half3 __attribute__((const, overloadable)) 2188 hypot(half3 a, half3 b); 2189 #endif 2190 2191 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2192 extern half4 __attribute__((const, overloadable)) 2193 hypot(half4 a, half4 b); 2194 #endif 2195 2196 /* 2197 * ilogb: Base two exponent 2198 * 2199 * Returns the base two exponent of a value, where the mantissa is between 2200 * 1.f (inclusive) and 2.f (exclusive). 2201 * 2202 * For example, ilogb(8.5f) returns 3. 2203 * 2204 * Because of the difference in mantissa, this number is one less than is returned by frexp(). 2205 * 2206 * logb() is similar but returns a float. 2207 */ 2208 extern int __attribute__((const, overloadable)) 2209 ilogb(float v); 2210 2211 extern int2 __attribute__((const, overloadable)) 2212 ilogb(float2 v); 2213 2214 extern int3 __attribute__((const, overloadable)) 2215 ilogb(float3 v); 2216 2217 extern int4 __attribute__((const, overloadable)) 2218 ilogb(float4 v); 2219 2220 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2221 extern int __attribute__((const, overloadable)) 2222 ilogb(half v); 2223 #endif 2224 2225 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2226 extern int2 __attribute__((const, overloadable)) 2227 ilogb(half2 v); 2228 #endif 2229 2230 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2231 extern int3 __attribute__((const, overloadable)) 2232 ilogb(half3 v); 2233 #endif 2234 2235 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2236 extern int4 __attribute__((const, overloadable)) 2237 ilogb(half4 v); 2238 #endif 2239 2240 /* 2241 * ldexp: Creates a floating point from mantissa and exponent 2242 * 2243 * Returns the floating point created from the mantissa and exponent, 2244 * i.e. (mantissa * 2 ^ exponent). 2245 * 2246 * See frexp() for the reverse operation. 2247 * 2248 * Parameters: 2249 * mantissa: Mantissa. 2250 * exponent: Exponent, a single component or matching vector. 2251 */ 2252 extern float __attribute__((const, overloadable)) 2253 ldexp(float mantissa, int exponent); 2254 2255 extern float2 __attribute__((const, overloadable)) 2256 ldexp(float2 mantissa, int2 exponent); 2257 2258 extern float3 __attribute__((const, overloadable)) 2259 ldexp(float3 mantissa, int3 exponent); 2260 2261 extern float4 __attribute__((const, overloadable)) 2262 ldexp(float4 mantissa, int4 exponent); 2263 2264 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2265 extern half __attribute__((const, overloadable)) 2266 ldexp(half mantissa, int exponent); 2267 #endif 2268 2269 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2270 extern half2 __attribute__((const, overloadable)) 2271 ldexp(half2 mantissa, int2 exponent); 2272 #endif 2273 2274 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2275 extern half3 __attribute__((const, overloadable)) 2276 ldexp(half3 mantissa, int3 exponent); 2277 #endif 2278 2279 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2280 extern half4 __attribute__((const, overloadable)) 2281 ldexp(half4 mantissa, int4 exponent); 2282 #endif 2283 2284 extern float2 __attribute__((const, overloadable)) 2285 ldexp(float2 mantissa, int exponent); 2286 2287 extern float3 __attribute__((const, overloadable)) 2288 ldexp(float3 mantissa, int exponent); 2289 2290 extern float4 __attribute__((const, overloadable)) 2291 ldexp(float4 mantissa, int exponent); 2292 2293 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2294 extern half2 __attribute__((const, overloadable)) 2295 ldexp(half2 mantissa, int exponent); 2296 #endif 2297 2298 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2299 extern half3 __attribute__((const, overloadable)) 2300 ldexp(half3 mantissa, int exponent); 2301 #endif 2302 2303 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2304 extern half4 __attribute__((const, overloadable)) 2305 ldexp(half4 mantissa, int exponent); 2306 #endif 2307 2308 /* 2309 * lgamma: Natural logarithm of the gamma function 2310 * 2311 * Returns the natural logarithm of the absolute value of the gamma function, 2312 * i.e. log(fabs(tgamma(v))). 2313 * 2314 * See also tgamma(). 2315 * 2316 * Parameters: 2317 * sign_of_gamma: If sign_of_gamma is not null, *sign_of_gamma will be set to -1.f if the gamma of v is negative, otherwise to 1.f. 2318 */ 2319 extern float __attribute__((const, overloadable)) 2320 lgamma(float v); 2321 2322 extern float2 __attribute__((const, overloadable)) 2323 lgamma(float2 v); 2324 2325 extern float3 __attribute__((const, overloadable)) 2326 lgamma(float3 v); 2327 2328 extern float4 __attribute__((const, overloadable)) 2329 lgamma(float4 v); 2330 2331 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2332 extern half __attribute__((const, overloadable)) 2333 lgamma(half v); 2334 #endif 2335 2336 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2337 extern half2 __attribute__((const, overloadable)) 2338 lgamma(half2 v); 2339 #endif 2340 2341 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2342 extern half3 __attribute__((const, overloadable)) 2343 lgamma(half3 v); 2344 #endif 2345 2346 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2347 extern half4 __attribute__((const, overloadable)) 2348 lgamma(half4 v); 2349 #endif 2350 2351 extern float __attribute__((overloadable)) 2352 lgamma(float v, int* sign_of_gamma); 2353 2354 extern float2 __attribute__((overloadable)) 2355 lgamma(float2 v, int2* sign_of_gamma); 2356 2357 extern float3 __attribute__((overloadable)) 2358 lgamma(float3 v, int3* sign_of_gamma); 2359 2360 extern float4 __attribute__((overloadable)) 2361 lgamma(float4 v, int4* sign_of_gamma); 2362 2363 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2364 extern half __attribute__((overloadable)) 2365 lgamma(half v, int* sign_of_gamma); 2366 #endif 2367 2368 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2369 extern half2 __attribute__((overloadable)) 2370 lgamma(half2 v, int2* sign_of_gamma); 2371 #endif 2372 2373 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2374 extern half3 __attribute__((overloadable)) 2375 lgamma(half3 v, int3* sign_of_gamma); 2376 #endif 2377 2378 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2379 extern half4 __attribute__((overloadable)) 2380 lgamma(half4 v, int4* sign_of_gamma); 2381 #endif 2382 2383 /* 2384 * log: Natural logarithm 2385 * 2386 * Returns the natural logarithm. 2387 * 2388 * See also native_log(). 2389 */ 2390 extern float __attribute__((const, overloadable)) 2391 log(float v); 2392 2393 extern float2 __attribute__((const, overloadable)) 2394 log(float2 v); 2395 2396 extern float3 __attribute__((const, overloadable)) 2397 log(float3 v); 2398 2399 extern float4 __attribute__((const, overloadable)) 2400 log(float4 v); 2401 2402 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2403 extern half __attribute__((const, overloadable)) 2404 log(half v); 2405 #endif 2406 2407 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2408 extern half2 __attribute__((const, overloadable)) 2409 log(half2 v); 2410 #endif 2411 2412 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2413 extern half3 __attribute__((const, overloadable)) 2414 log(half3 v); 2415 #endif 2416 2417 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2418 extern half4 __attribute__((const, overloadable)) 2419 log(half4 v); 2420 #endif 2421 2422 /* 2423 * log10: Base 10 logarithm 2424 * 2425 * Returns the base 10 logarithm. 2426 * 2427 * See also native_log10(). 2428 */ 2429 extern float __attribute__((const, overloadable)) 2430 log10(float v); 2431 2432 extern float2 __attribute__((const, overloadable)) 2433 log10(float2 v); 2434 2435 extern float3 __attribute__((const, overloadable)) 2436 log10(float3 v); 2437 2438 extern float4 __attribute__((const, overloadable)) 2439 log10(float4 v); 2440 2441 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2442 extern half __attribute__((const, overloadable)) 2443 log10(half v); 2444 #endif 2445 2446 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2447 extern half2 __attribute__((const, overloadable)) 2448 log10(half2 v); 2449 #endif 2450 2451 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2452 extern half3 __attribute__((const, overloadable)) 2453 log10(half3 v); 2454 #endif 2455 2456 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2457 extern half4 __attribute__((const, overloadable)) 2458 log10(half4 v); 2459 #endif 2460 2461 /* 2462 * log1p: Natural logarithm of a value plus 1 2463 * 2464 * Returns the natural logarithm of (v + 1.f). 2465 * 2466 * See also native_log1p(). 2467 */ 2468 extern float __attribute__((const, overloadable)) 2469 log1p(float v); 2470 2471 extern float2 __attribute__((const, overloadable)) 2472 log1p(float2 v); 2473 2474 extern float3 __attribute__((const, overloadable)) 2475 log1p(float3 v); 2476 2477 extern float4 __attribute__((const, overloadable)) 2478 log1p(float4 v); 2479 2480 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2481 extern half __attribute__((const, overloadable)) 2482 log1p(half v); 2483 #endif 2484 2485 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2486 extern half2 __attribute__((const, overloadable)) 2487 log1p(half2 v); 2488 #endif 2489 2490 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2491 extern half3 __attribute__((const, overloadable)) 2492 log1p(half3 v); 2493 #endif 2494 2495 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2496 extern half4 __attribute__((const, overloadable)) 2497 log1p(half4 v); 2498 #endif 2499 2500 /* 2501 * log2: Base 2 logarithm 2502 * 2503 * Returns the base 2 logarithm. 2504 * 2505 * See also native_log2(). 2506 */ 2507 extern float __attribute__((const, overloadable)) 2508 log2(float v); 2509 2510 extern float2 __attribute__((const, overloadable)) 2511 log2(float2 v); 2512 2513 extern float3 __attribute__((const, overloadable)) 2514 log2(float3 v); 2515 2516 extern float4 __attribute__((const, overloadable)) 2517 log2(float4 v); 2518 2519 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2520 extern half __attribute__((const, overloadable)) 2521 log2(half v); 2522 #endif 2523 2524 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2525 extern half2 __attribute__((const, overloadable)) 2526 log2(half2 v); 2527 #endif 2528 2529 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2530 extern half3 __attribute__((const, overloadable)) 2531 log2(half3 v); 2532 #endif 2533 2534 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2535 extern half4 __attribute__((const, overloadable)) 2536 log2(half4 v); 2537 #endif 2538 2539 /* 2540 * logb: Base two exponent 2541 * 2542 * Returns the base two exponent of a value, where the mantissa is between 2543 * 1.f (inclusive) and 2.f (exclusive). 2544 * 2545 * For example, logb(8.5f) returns 3.f. 2546 * 2547 * Because of the difference in mantissa, this number is one less than is returned by frexp(). 2548 * 2549 * ilogb() is similar but returns an integer. 2550 */ 2551 extern float __attribute__((const, overloadable)) 2552 logb(float v); 2553 2554 extern float2 __attribute__((const, overloadable)) 2555 logb(float2 v); 2556 2557 extern float3 __attribute__((const, overloadable)) 2558 logb(float3 v); 2559 2560 extern float4 __attribute__((const, overloadable)) 2561 logb(float4 v); 2562 2563 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2564 extern half __attribute__((const, overloadable)) 2565 logb(half v); 2566 #endif 2567 2568 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2569 extern half2 __attribute__((const, overloadable)) 2570 logb(half2 v); 2571 #endif 2572 2573 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2574 extern half3 __attribute__((const, overloadable)) 2575 logb(half3 v); 2576 #endif 2577 2578 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2579 extern half4 __attribute__((const, overloadable)) 2580 logb(half4 v); 2581 #endif 2582 2583 /* 2584 * mad: Multiply and add 2585 * 2586 * Multiply and add. Returns (multiplicand1 * multiplicand2) + offset. 2587 * 2588 * This function is similar to fma(). fma() retains full precision of the multiplied result 2589 * and rounds only after the addition. mad() rounds after the multiplication and the addition. 2590 * In rs_fp_relaxed mode, mad() may not do the rounding after multiplicaiton. 2591 */ 2592 extern float __attribute__((const, overloadable)) 2593 mad(float multiplicand1, float multiplicand2, float offset); 2594 2595 extern float2 __attribute__((const, overloadable)) 2596 mad(float2 multiplicand1, float2 multiplicand2, float2 offset); 2597 2598 extern float3 __attribute__((const, overloadable)) 2599 mad(float3 multiplicand1, float3 multiplicand2, float3 offset); 2600 2601 extern float4 __attribute__((const, overloadable)) 2602 mad(float4 multiplicand1, float4 multiplicand2, float4 offset); 2603 2604 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2605 extern half __attribute__((const, overloadable)) 2606 mad(half multiplicand1, half multiplicand2, half offset); 2607 #endif 2608 2609 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2610 extern half2 __attribute__((const, overloadable)) 2611 mad(half2 multiplicand1, half2 multiplicand2, half2 offset); 2612 #endif 2613 2614 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2615 extern half3 __attribute__((const, overloadable)) 2616 mad(half3 multiplicand1, half3 multiplicand2, half3 offset); 2617 #endif 2618 2619 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2620 extern half4 __attribute__((const, overloadable)) 2621 mad(half4 multiplicand1, half4 multiplicand2, half4 offset); 2622 #endif 2623 2624 /* 2625 * max: Maximum 2626 * 2627 * Returns the maximum value of two arguments. 2628 */ 2629 extern float __attribute__((const, overloadable)) 2630 max(float a, float b); 2631 2632 extern float2 __attribute__((const, overloadable)) 2633 max(float2 a, float2 b); 2634 2635 extern float3 __attribute__((const, overloadable)) 2636 max(float3 a, float3 b); 2637 2638 extern float4 __attribute__((const, overloadable)) 2639 max(float4 a, float4 b); 2640 2641 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2642 extern half __attribute__((const, overloadable)) 2643 max(half a, half b); 2644 #endif 2645 2646 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2647 extern half2 __attribute__((const, overloadable)) 2648 max(half2 a, half2 b); 2649 #endif 2650 2651 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2652 extern half3 __attribute__((const, overloadable)) 2653 max(half3 a, half3 b); 2654 #endif 2655 2656 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2657 extern half4 __attribute__((const, overloadable)) 2658 max(half4 a, half4 b); 2659 #endif 2660 2661 extern float2 __attribute__((const, overloadable)) 2662 max(float2 a, float b); 2663 2664 extern float3 __attribute__((const, overloadable)) 2665 max(float3 a, float b); 2666 2667 extern float4 __attribute__((const, overloadable)) 2668 max(float4 a, float b); 2669 2670 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2671 extern half2 __attribute__((const, overloadable)) 2672 max(half2 a, half b); 2673 #endif 2674 2675 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2676 extern half3 __attribute__((const, overloadable)) 2677 max(half3 a, half b); 2678 #endif 2679 2680 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 2681 extern half4 __attribute__((const, overloadable)) 2682 max(half4 a, half b); 2683 #endif 2684 2685 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2686 static inline char __attribute__((const, overloadable)) 2687 max(char a, char b) { 2688 return (a > b ? a : b); 2689 } 2690 #endif 2691 2692 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2693 static inline uchar __attribute__((const, overloadable)) 2694 max(uchar a, uchar b) { 2695 return (a > b ? a : b); 2696 } 2697 #endif 2698 2699 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2700 static inline short __attribute__((const, overloadable)) 2701 max(short a, short b) { 2702 return (a > b ? a : b); 2703 } 2704 #endif 2705 2706 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2707 static inline ushort __attribute__((const, overloadable)) 2708 max(ushort a, ushort b) { 2709 return (a > b ? a : b); 2710 } 2711 #endif 2712 2713 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2714 static inline int __attribute__((const, overloadable)) 2715 max(int a, int b) { 2716 return (a > b ? a : b); 2717 } 2718 #endif 2719 2720 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2721 static inline uint __attribute__((const, overloadable)) 2722 max(uint a, uint b) { 2723 return (a > b ? a : b); 2724 } 2725 #endif 2726 2727 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2728 static inline char2 __attribute__((const, overloadable)) 2729 max(char2 a, char2 b) { 2730 char2 tmp; 2731 tmp.x = (a.x > b.x ? a.x : b.x); 2732 tmp.y = (a.y > b.y ? a.y : b.y); 2733 return tmp; 2734 } 2735 #endif 2736 2737 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2738 static inline uchar2 __attribute__((const, overloadable)) 2739 max(uchar2 a, uchar2 b) { 2740 uchar2 tmp; 2741 tmp.x = (a.x > b.x ? a.x : b.x); 2742 tmp.y = (a.y > b.y ? a.y : b.y); 2743 return tmp; 2744 } 2745 #endif 2746 2747 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2748 static inline short2 __attribute__((const, overloadable)) 2749 max(short2 a, short2 b) { 2750 short2 tmp; 2751 tmp.x = (a.x > b.x ? a.x : b.x); 2752 tmp.y = (a.y > b.y ? a.y : b.y); 2753 return tmp; 2754 } 2755 #endif 2756 2757 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2758 static inline ushort2 __attribute__((const, overloadable)) 2759 max(ushort2 a, ushort2 b) { 2760 ushort2 tmp; 2761 tmp.x = (a.x > b.x ? a.x : b.x); 2762 tmp.y = (a.y > b.y ? a.y : b.y); 2763 return tmp; 2764 } 2765 #endif 2766 2767 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2768 static inline int2 __attribute__((const, overloadable)) 2769 max(int2 a, int2 b) { 2770 int2 tmp; 2771 tmp.x = (a.x > b.x ? a.x : b.x); 2772 tmp.y = (a.y > b.y ? a.y : b.y); 2773 return tmp; 2774 } 2775 #endif 2776 2777 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2778 static inline uint2 __attribute__((const, overloadable)) 2779 max(uint2 a, uint2 b) { 2780 uint2 tmp; 2781 tmp.x = (a.x > b.x ? a.x : b.x); 2782 tmp.y = (a.y > b.y ? a.y : b.y); 2783 return tmp; 2784 } 2785 #endif 2786 2787 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2788 static inline char3 __attribute__((const, overloadable)) 2789 max(char3 a, char3 b) { 2790 char3 tmp; 2791 tmp.x = (a.x > b.x ? a.x : b.x); 2792 tmp.y = (a.y > b.y ? a.y : b.y); 2793 tmp.z = (a.z > b.z ? a.z : b.z); 2794 return tmp; 2795 } 2796 #endif 2797 2798 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2799 static inline uchar3 __attribute__((const, overloadable)) 2800 max(uchar3 a, uchar3 b) { 2801 uchar3 tmp; 2802 tmp.x = (a.x > b.x ? a.x : b.x); 2803 tmp.y = (a.y > b.y ? a.y : b.y); 2804 tmp.z = (a.z > b.z ? a.z : b.z); 2805 return tmp; 2806 } 2807 #endif 2808 2809 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2810 static inline short3 __attribute__((const, overloadable)) 2811 max(short3 a, short3 b) { 2812 short3 tmp; 2813 tmp.x = (a.x > b.x ? a.x : b.x); 2814 tmp.y = (a.y > b.y ? a.y : b.y); 2815 tmp.z = (a.z > b.z ? a.z : b.z); 2816 return tmp; 2817 } 2818 #endif 2819 2820 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2821 static inline ushort3 __attribute__((const, overloadable)) 2822 max(ushort3 a, ushort3 b) { 2823 ushort3 tmp; 2824 tmp.x = (a.x > b.x ? a.x : b.x); 2825 tmp.y = (a.y > b.y ? a.y : b.y); 2826 tmp.z = (a.z > b.z ? a.z : b.z); 2827 return tmp; 2828 } 2829 #endif 2830 2831 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2832 static inline int3 __attribute__((const, overloadable)) 2833 max(int3 a, int3 b) { 2834 int3 tmp; 2835 tmp.x = (a.x > b.x ? a.x : b.x); 2836 tmp.y = (a.y > b.y ? a.y : b.y); 2837 tmp.z = (a.z > b.z ? a.z : b.z); 2838 return tmp; 2839 } 2840 #endif 2841 2842 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2843 static inline uint3 __attribute__((const, overloadable)) 2844 max(uint3 a, uint3 b) { 2845 uint3 tmp; 2846 tmp.x = (a.x > b.x ? a.x : b.x); 2847 tmp.y = (a.y > b.y ? a.y : b.y); 2848 tmp.z = (a.z > b.z ? a.z : b.z); 2849 return tmp; 2850 } 2851 #endif 2852 2853 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2854 static inline char4 __attribute__((const, overloadable)) 2855 max(char4 a, char4 b) { 2856 char4 tmp; 2857 tmp.x = (a.x > b.x ? a.x : b.x); 2858 tmp.y = (a.y > b.y ? a.y : b.y); 2859 tmp.z = (a.z > b.z ? a.z : b.z); 2860 tmp.w = (a.w > b.w ? a.w : b.w); 2861 return tmp; 2862 } 2863 #endif 2864 2865 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2866 static inline uchar4 __attribute__((const, overloadable)) 2867 max(uchar4 a, uchar4 b) { 2868 uchar4 tmp; 2869 tmp.x = (a.x > b.x ? a.x : b.x); 2870 tmp.y = (a.y > b.y ? a.y : b.y); 2871 tmp.z = (a.z > b.z ? a.z : b.z); 2872 tmp.w = (a.w > b.w ? a.w : b.w); 2873 return tmp; 2874 } 2875 #endif 2876 2877 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2878 static inline short4 __attribute__((const, overloadable)) 2879 max(short4 a, short4 b) { 2880 short4 tmp; 2881 tmp.x = (a.x > b.x ? a.x : b.x); 2882 tmp.y = (a.y > b.y ? a.y : b.y); 2883 tmp.z = (a.z > b.z ? a.z : b.z); 2884 tmp.w = (a.w > b.w ? a.w : b.w); 2885 return tmp; 2886 } 2887 #endif 2888 2889 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2890 static inline ushort4 __attribute__((const, overloadable)) 2891 max(ushort4 a, ushort4 b) { 2892 ushort4 tmp; 2893 tmp.x = (a.x > b.x ? a.x : b.x); 2894 tmp.y = (a.y > b.y ? a.y : b.y); 2895 tmp.z = (a.z > b.z ? a.z : b.z); 2896 tmp.w = (a.w > b.w ? a.w : b.w); 2897 return tmp; 2898 } 2899 #endif 2900 2901 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2902 static inline int4 __attribute__((const, overloadable)) 2903 max(int4 a, int4 b) { 2904 int4 tmp; 2905 tmp.x = (a.x > b.x ? a.x : b.x); 2906 tmp.y = (a.y > b.y ? a.y : b.y); 2907 tmp.z = (a.z > b.z ? a.z : b.z); 2908 tmp.w = (a.w > b.w ? a.w : b.w); 2909 return tmp; 2910 } 2911 #endif 2912 2913 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 2914 static inline uint4 __attribute__((const, overloadable)) 2915 max(uint4 a, uint4 b) { 2916 uint4 tmp; 2917 tmp.x = (a.x > b.x ? a.x : b.x); 2918 tmp.y = (a.y > b.y ? a.y : b.y); 2919 tmp.z = (a.z > b.z ? a.z : b.z); 2920 tmp.w = (a.w > b.w ? a.w : b.w); 2921 return tmp; 2922 } 2923 #endif 2924 2925 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2926 extern char __attribute__((const, overloadable)) 2927 max(char a, char b); 2928 #endif 2929 2930 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2931 extern char2 __attribute__((const, overloadable)) 2932 max(char2 a, char2 b); 2933 #endif 2934 2935 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2936 extern char3 __attribute__((const, overloadable)) 2937 max(char3 a, char3 b); 2938 #endif 2939 2940 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2941 extern char4 __attribute__((const, overloadable)) 2942 max(char4 a, char4 b); 2943 #endif 2944 2945 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2946 extern uchar __attribute__((const, overloadable)) 2947 max(uchar a, uchar b); 2948 #endif 2949 2950 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2951 extern uchar2 __attribute__((const, overloadable)) 2952 max(uchar2 a, uchar2 b); 2953 #endif 2954 2955 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2956 extern uchar3 __attribute__((const, overloadable)) 2957 max(uchar3 a, uchar3 b); 2958 #endif 2959 2960 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2961 extern uchar4 __attribute__((const, overloadable)) 2962 max(uchar4 a, uchar4 b); 2963 #endif 2964 2965 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2966 extern short __attribute__((const, overloadable)) 2967 max(short a, short b); 2968 #endif 2969 2970 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2971 extern short2 __attribute__((const, overloadable)) 2972 max(short2 a, short2 b); 2973 #endif 2974 2975 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2976 extern short3 __attribute__((const, overloadable)) 2977 max(short3 a, short3 b); 2978 #endif 2979 2980 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2981 extern short4 __attribute__((const, overloadable)) 2982 max(short4 a, short4 b); 2983 #endif 2984 2985 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2986 extern ushort __attribute__((const, overloadable)) 2987 max(ushort a, ushort b); 2988 #endif 2989 2990 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2991 extern ushort2 __attribute__((const, overloadable)) 2992 max(ushort2 a, ushort2 b); 2993 #endif 2994 2995 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 2996 extern ushort3 __attribute__((const, overloadable)) 2997 max(ushort3 a, ushort3 b); 2998 #endif 2999 3000 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3001 extern ushort4 __attribute__((const, overloadable)) 3002 max(ushort4 a, ushort4 b); 3003 #endif 3004 3005 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3006 extern int __attribute__((const, overloadable)) 3007 max(int a, int b); 3008 #endif 3009 3010 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3011 extern int2 __attribute__((const, overloadable)) 3012 max(int2 a, int2 b); 3013 #endif 3014 3015 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3016 extern int3 __attribute__((const, overloadable)) 3017 max(int3 a, int3 b); 3018 #endif 3019 3020 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3021 extern int4 __attribute__((const, overloadable)) 3022 max(int4 a, int4 b); 3023 #endif 3024 3025 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3026 extern uint __attribute__((const, overloadable)) 3027 max(uint a, uint b); 3028 #endif 3029 3030 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3031 extern uint2 __attribute__((const, overloadable)) 3032 max(uint2 a, uint2 b); 3033 #endif 3034 3035 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3036 extern uint3 __attribute__((const, overloadable)) 3037 max(uint3 a, uint3 b); 3038 #endif 3039 3040 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3041 extern uint4 __attribute__((const, overloadable)) 3042 max(uint4 a, uint4 b); 3043 #endif 3044 3045 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3046 extern long __attribute__((const, overloadable)) 3047 max(long a, long b); 3048 #endif 3049 3050 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3051 extern long2 __attribute__((const, overloadable)) 3052 max(long2 a, long2 b); 3053 #endif 3054 3055 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3056 extern long3 __attribute__((const, overloadable)) 3057 max(long3 a, long3 b); 3058 #endif 3059 3060 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3061 extern long4 __attribute__((const, overloadable)) 3062 max(long4 a, long4 b); 3063 #endif 3064 3065 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3066 extern ulong __attribute__((const, overloadable)) 3067 max(ulong a, ulong b); 3068 #endif 3069 3070 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3071 extern ulong2 __attribute__((const, overloadable)) 3072 max(ulong2 a, ulong2 b); 3073 #endif 3074 3075 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3076 extern ulong3 __attribute__((const, overloadable)) 3077 max(ulong3 a, ulong3 b); 3078 #endif 3079 3080 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3081 extern ulong4 __attribute__((const, overloadable)) 3082 max(ulong4 a, ulong4 b); 3083 #endif 3084 3085 /* 3086 * min: Minimum 3087 * 3088 * Returns the minimum value of two arguments. 3089 */ 3090 extern float __attribute__((const, overloadable)) 3091 min(float a, float b); 3092 3093 extern float2 __attribute__((const, overloadable)) 3094 min(float2 a, float2 b); 3095 3096 extern float3 __attribute__((const, overloadable)) 3097 min(float3 a, float3 b); 3098 3099 extern float4 __attribute__((const, overloadable)) 3100 min(float4 a, float4 b); 3101 3102 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3103 extern half __attribute__((const, overloadable)) 3104 min(half a, half b); 3105 #endif 3106 3107 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3108 extern half2 __attribute__((const, overloadable)) 3109 min(half2 a, half2 b); 3110 #endif 3111 3112 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3113 extern half3 __attribute__((const, overloadable)) 3114 min(half3 a, half3 b); 3115 #endif 3116 3117 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3118 extern half4 __attribute__((const, overloadable)) 3119 min(half4 a, half4 b); 3120 #endif 3121 3122 extern float2 __attribute__((const, overloadable)) 3123 min(float2 a, float b); 3124 3125 extern float3 __attribute__((const, overloadable)) 3126 min(float3 a, float b); 3127 3128 extern float4 __attribute__((const, overloadable)) 3129 min(float4 a, float b); 3130 3131 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3132 extern half2 __attribute__((const, overloadable)) 3133 min(half2 a, half b); 3134 #endif 3135 3136 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3137 extern half3 __attribute__((const, overloadable)) 3138 min(half3 a, half b); 3139 #endif 3140 3141 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3142 extern half4 __attribute__((const, overloadable)) 3143 min(half4 a, half b); 3144 #endif 3145 3146 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3147 static inline char __attribute__((const, overloadable)) 3148 min(char a, char b) { 3149 return (a < b ? a : b); 3150 } 3151 #endif 3152 3153 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3154 static inline uchar __attribute__((const, overloadable)) 3155 min(uchar a, uchar b) { 3156 return (a < b ? a : b); 3157 } 3158 #endif 3159 3160 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3161 static inline short __attribute__((const, overloadable)) 3162 min(short a, short b) { 3163 return (a < b ? a : b); 3164 } 3165 #endif 3166 3167 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3168 static inline ushort __attribute__((const, overloadable)) 3169 min(ushort a, ushort b) { 3170 return (a < b ? a : b); 3171 } 3172 #endif 3173 3174 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3175 static inline int __attribute__((const, overloadable)) 3176 min(int a, int b) { 3177 return (a < b ? a : b); 3178 } 3179 #endif 3180 3181 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3182 static inline uint __attribute__((const, overloadable)) 3183 min(uint a, uint b) { 3184 return (a < b ? a : b); 3185 } 3186 #endif 3187 3188 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3189 static inline char2 __attribute__((const, overloadable)) 3190 min(char2 a, char2 b) { 3191 char2 tmp; 3192 tmp.x = (a.x < b.x ? a.x : b.x); 3193 tmp.y = (a.y < b.y ? a.y : b.y); 3194 return tmp; 3195 } 3196 #endif 3197 3198 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3199 static inline uchar2 __attribute__((const, overloadable)) 3200 min(uchar2 a, uchar2 b) { 3201 uchar2 tmp; 3202 tmp.x = (a.x < b.x ? a.x : b.x); 3203 tmp.y = (a.y < b.y ? a.y : b.y); 3204 return tmp; 3205 } 3206 #endif 3207 3208 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3209 static inline short2 __attribute__((const, overloadable)) 3210 min(short2 a, short2 b) { 3211 short2 tmp; 3212 tmp.x = (a.x < b.x ? a.x : b.x); 3213 tmp.y = (a.y < b.y ? a.y : b.y); 3214 return tmp; 3215 } 3216 #endif 3217 3218 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3219 static inline ushort2 __attribute__((const, overloadable)) 3220 min(ushort2 a, ushort2 b) { 3221 ushort2 tmp; 3222 tmp.x = (a.x < b.x ? a.x : b.x); 3223 tmp.y = (a.y < b.y ? a.y : b.y); 3224 return tmp; 3225 } 3226 #endif 3227 3228 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3229 static inline int2 __attribute__((const, overloadable)) 3230 min(int2 a, int2 b) { 3231 int2 tmp; 3232 tmp.x = (a.x < b.x ? a.x : b.x); 3233 tmp.y = (a.y < b.y ? a.y : b.y); 3234 return tmp; 3235 } 3236 #endif 3237 3238 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3239 static inline uint2 __attribute__((const, overloadable)) 3240 min(uint2 a, uint2 b) { 3241 uint2 tmp; 3242 tmp.x = (a.x < b.x ? a.x : b.x); 3243 tmp.y = (a.y < b.y ? a.y : b.y); 3244 return tmp; 3245 } 3246 #endif 3247 3248 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3249 static inline char3 __attribute__((const, overloadable)) 3250 min(char3 a, char3 b) { 3251 char3 tmp; 3252 tmp.x = (a.x < b.x ? a.x : b.x); 3253 tmp.y = (a.y < b.y ? a.y : b.y); 3254 tmp.z = (a.z < b.z ? a.z : b.z); 3255 return tmp; 3256 } 3257 #endif 3258 3259 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3260 static inline uchar3 __attribute__((const, overloadable)) 3261 min(uchar3 a, uchar3 b) { 3262 uchar3 tmp; 3263 tmp.x = (a.x < b.x ? a.x : b.x); 3264 tmp.y = (a.y < b.y ? a.y : b.y); 3265 tmp.z = (a.z < b.z ? a.z : b.z); 3266 return tmp; 3267 } 3268 #endif 3269 3270 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3271 static inline short3 __attribute__((const, overloadable)) 3272 min(short3 a, short3 b) { 3273 short3 tmp; 3274 tmp.x = (a.x < b.x ? a.x : b.x); 3275 tmp.y = (a.y < b.y ? a.y : b.y); 3276 tmp.z = (a.z < b.z ? a.z : b.z); 3277 return tmp; 3278 } 3279 #endif 3280 3281 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3282 static inline ushort3 __attribute__((const, overloadable)) 3283 min(ushort3 a, ushort3 b) { 3284 ushort3 tmp; 3285 tmp.x = (a.x < b.x ? a.x : b.x); 3286 tmp.y = (a.y < b.y ? a.y : b.y); 3287 tmp.z = (a.z < b.z ? a.z : b.z); 3288 return tmp; 3289 } 3290 #endif 3291 3292 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3293 static inline int3 __attribute__((const, overloadable)) 3294 min(int3 a, int3 b) { 3295 int3 tmp; 3296 tmp.x = (a.x < b.x ? a.x : b.x); 3297 tmp.y = (a.y < b.y ? a.y : b.y); 3298 tmp.z = (a.z < b.z ? a.z : b.z); 3299 return tmp; 3300 } 3301 #endif 3302 3303 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3304 static inline uint3 __attribute__((const, overloadable)) 3305 min(uint3 a, uint3 b) { 3306 uint3 tmp; 3307 tmp.x = (a.x < b.x ? a.x : b.x); 3308 tmp.y = (a.y < b.y ? a.y : b.y); 3309 tmp.z = (a.z < b.z ? a.z : b.z); 3310 return tmp; 3311 } 3312 #endif 3313 3314 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3315 static inline char4 __attribute__((const, overloadable)) 3316 min(char4 a, char4 b) { 3317 char4 tmp; 3318 tmp.x = (a.x < b.x ? a.x : b.x); 3319 tmp.y = (a.y < b.y ? a.y : b.y); 3320 tmp.z = (a.z < b.z ? a.z : b.z); 3321 tmp.w = (a.w < b.w ? a.w : b.w); 3322 return tmp; 3323 } 3324 #endif 3325 3326 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3327 static inline uchar4 __attribute__((const, overloadable)) 3328 min(uchar4 a, uchar4 b) { 3329 uchar4 tmp; 3330 tmp.x = (a.x < b.x ? a.x : b.x); 3331 tmp.y = (a.y < b.y ? a.y : b.y); 3332 tmp.z = (a.z < b.z ? a.z : b.z); 3333 tmp.w = (a.w < b.w ? a.w : b.w); 3334 return tmp; 3335 } 3336 #endif 3337 3338 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3339 static inline short4 __attribute__((const, overloadable)) 3340 min(short4 a, short4 b) { 3341 short4 tmp; 3342 tmp.x = (a.x < b.x ? a.x : b.x); 3343 tmp.y = (a.y < b.y ? a.y : b.y); 3344 tmp.z = (a.z < b.z ? a.z : b.z); 3345 tmp.w = (a.w < b.w ? a.w : b.w); 3346 return tmp; 3347 } 3348 #endif 3349 3350 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3351 static inline ushort4 __attribute__((const, overloadable)) 3352 min(ushort4 a, ushort4 b) { 3353 ushort4 tmp; 3354 tmp.x = (a.x < b.x ? a.x : b.x); 3355 tmp.y = (a.y < b.y ? a.y : b.y); 3356 tmp.z = (a.z < b.z ? a.z : b.z); 3357 tmp.w = (a.w < b.w ? a.w : b.w); 3358 return tmp; 3359 } 3360 #endif 3361 3362 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3363 static inline int4 __attribute__((const, overloadable)) 3364 min(int4 a, int4 b) { 3365 int4 tmp; 3366 tmp.x = (a.x < b.x ? a.x : b.x); 3367 tmp.y = (a.y < b.y ? a.y : b.y); 3368 tmp.z = (a.z < b.z ? a.z : b.z); 3369 tmp.w = (a.w < b.w ? a.w : b.w); 3370 return tmp; 3371 } 3372 #endif 3373 3374 #if !defined(RS_VERSION) || (RS_VERSION <= 20) 3375 static inline uint4 __attribute__((const, overloadable)) 3376 min(uint4 a, uint4 b) { 3377 uint4 tmp; 3378 tmp.x = (a.x < b.x ? a.x : b.x); 3379 tmp.y = (a.y < b.y ? a.y : b.y); 3380 tmp.z = (a.z < b.z ? a.z : b.z); 3381 tmp.w = (a.w < b.w ? a.w : b.w); 3382 return tmp; 3383 } 3384 #endif 3385 3386 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3387 extern char __attribute__((const, overloadable)) 3388 min(char a, char b); 3389 #endif 3390 3391 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3392 extern char2 __attribute__((const, overloadable)) 3393 min(char2 a, char2 b); 3394 #endif 3395 3396 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3397 extern char3 __attribute__((const, overloadable)) 3398 min(char3 a, char3 b); 3399 #endif 3400 3401 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3402 extern char4 __attribute__((const, overloadable)) 3403 min(char4 a, char4 b); 3404 #endif 3405 3406 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3407 extern uchar __attribute__((const, overloadable)) 3408 min(uchar a, uchar b); 3409 #endif 3410 3411 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3412 extern uchar2 __attribute__((const, overloadable)) 3413 min(uchar2 a, uchar2 b); 3414 #endif 3415 3416 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3417 extern uchar3 __attribute__((const, overloadable)) 3418 min(uchar3 a, uchar3 b); 3419 #endif 3420 3421 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3422 extern uchar4 __attribute__((const, overloadable)) 3423 min(uchar4 a, uchar4 b); 3424 #endif 3425 3426 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3427 extern short __attribute__((const, overloadable)) 3428 min(short a, short b); 3429 #endif 3430 3431 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3432 extern short2 __attribute__((const, overloadable)) 3433 min(short2 a, short2 b); 3434 #endif 3435 3436 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3437 extern short3 __attribute__((const, overloadable)) 3438 min(short3 a, short3 b); 3439 #endif 3440 3441 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3442 extern short4 __attribute__((const, overloadable)) 3443 min(short4 a, short4 b); 3444 #endif 3445 3446 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3447 extern ushort __attribute__((const, overloadable)) 3448 min(ushort a, ushort b); 3449 #endif 3450 3451 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3452 extern ushort2 __attribute__((const, overloadable)) 3453 min(ushort2 a, ushort2 b); 3454 #endif 3455 3456 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3457 extern ushort3 __attribute__((const, overloadable)) 3458 min(ushort3 a, ushort3 b); 3459 #endif 3460 3461 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3462 extern ushort4 __attribute__((const, overloadable)) 3463 min(ushort4 a, ushort4 b); 3464 #endif 3465 3466 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3467 extern int __attribute__((const, overloadable)) 3468 min(int a, int b); 3469 #endif 3470 3471 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3472 extern int2 __attribute__((const, overloadable)) 3473 min(int2 a, int2 b); 3474 #endif 3475 3476 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3477 extern int3 __attribute__((const, overloadable)) 3478 min(int3 a, int3 b); 3479 #endif 3480 3481 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3482 extern int4 __attribute__((const, overloadable)) 3483 min(int4 a, int4 b); 3484 #endif 3485 3486 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3487 extern uint __attribute__((const, overloadable)) 3488 min(uint a, uint b); 3489 #endif 3490 3491 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3492 extern uint2 __attribute__((const, overloadable)) 3493 min(uint2 a, uint2 b); 3494 #endif 3495 3496 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3497 extern uint3 __attribute__((const, overloadable)) 3498 min(uint3 a, uint3 b); 3499 #endif 3500 3501 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3502 extern uint4 __attribute__((const, overloadable)) 3503 min(uint4 a, uint4 b); 3504 #endif 3505 3506 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3507 extern long __attribute__((const, overloadable)) 3508 min(long a, long b); 3509 #endif 3510 3511 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3512 extern long2 __attribute__((const, overloadable)) 3513 min(long2 a, long2 b); 3514 #endif 3515 3516 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3517 extern long3 __attribute__((const, overloadable)) 3518 min(long3 a, long3 b); 3519 #endif 3520 3521 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3522 extern long4 __attribute__((const, overloadable)) 3523 min(long4 a, long4 b); 3524 #endif 3525 3526 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3527 extern ulong __attribute__((const, overloadable)) 3528 min(ulong a, ulong b); 3529 #endif 3530 3531 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3532 extern ulong2 __attribute__((const, overloadable)) 3533 min(ulong2 a, ulong2 b); 3534 #endif 3535 3536 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3537 extern ulong3 __attribute__((const, overloadable)) 3538 min(ulong3 a, ulong3 b); 3539 #endif 3540 3541 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3542 extern ulong4 __attribute__((const, overloadable)) 3543 min(ulong4 a, ulong4 b); 3544 #endif 3545 3546 /* 3547 * mix: Mixes two values 3548 * 3549 * Returns start + ((stop - start) * fraction). 3550 * 3551 * This can be useful for mixing two values. For example, to create a new color that is 3552 * 40% color1 and 60% color2, use mix(color1, color2, 0.6f). 3553 */ 3554 extern float __attribute__((const, overloadable)) 3555 mix(float start, float stop, float fraction); 3556 3557 extern float2 __attribute__((const, overloadable)) 3558 mix(float2 start, float2 stop, float2 fraction); 3559 3560 extern float3 __attribute__((const, overloadable)) 3561 mix(float3 start, float3 stop, float3 fraction); 3562 3563 extern float4 __attribute__((const, overloadable)) 3564 mix(float4 start, float4 stop, float4 fraction); 3565 3566 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3567 extern half __attribute__((const, overloadable)) 3568 mix(half start, half stop, half fraction); 3569 #endif 3570 3571 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3572 extern half2 __attribute__((const, overloadable)) 3573 mix(half2 start, half2 stop, half2 fraction); 3574 #endif 3575 3576 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3577 extern half3 __attribute__((const, overloadable)) 3578 mix(half3 start, half3 stop, half3 fraction); 3579 #endif 3580 3581 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3582 extern half4 __attribute__((const, overloadable)) 3583 mix(half4 start, half4 stop, half4 fraction); 3584 #endif 3585 3586 extern float2 __attribute__((const, overloadable)) 3587 mix(float2 start, float2 stop, float fraction); 3588 3589 extern float3 __attribute__((const, overloadable)) 3590 mix(float3 start, float3 stop, float fraction); 3591 3592 extern float4 __attribute__((const, overloadable)) 3593 mix(float4 start, float4 stop, float fraction); 3594 3595 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3596 extern half2 __attribute__((const, overloadable)) 3597 mix(half2 start, half2 stop, half fraction); 3598 #endif 3599 3600 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3601 extern half3 __attribute__((const, overloadable)) 3602 mix(half3 start, half3 stop, half fraction); 3603 #endif 3604 3605 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3606 extern half4 __attribute__((const, overloadable)) 3607 mix(half4 start, half4 stop, half fraction); 3608 #endif 3609 3610 /* 3611 * modf: Integral and fractional components 3612 * 3613 * Returns the integral and fractional components of a number. 3614 * 3615 * Both components will have the same sign as x. For example, for an input of -3.72f, 3616 * *integral_part will be set to -3.f and .72f will be returned. 3617 * 3618 * Parameters: 3619 * v: Source value. 3620 * integral_part: *integral_part will be set to the integral portion of the number. 3621 * 3622 * Returns: Floating point portion of the value. 3623 */ 3624 extern float __attribute__((overloadable)) 3625 modf(float v, float* integral_part); 3626 3627 extern float2 __attribute__((overloadable)) 3628 modf(float2 v, float2* integral_part); 3629 3630 extern float3 __attribute__((overloadable)) 3631 modf(float3 v, float3* integral_part); 3632 3633 extern float4 __attribute__((overloadable)) 3634 modf(float4 v, float4* integral_part); 3635 3636 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3637 extern half __attribute__((overloadable)) 3638 modf(half v, half* integral_part); 3639 #endif 3640 3641 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3642 extern half2 __attribute__((overloadable)) 3643 modf(half2 v, half2* integral_part); 3644 #endif 3645 3646 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3647 extern half3 __attribute__((overloadable)) 3648 modf(half3 v, half3* integral_part); 3649 #endif 3650 3651 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3652 extern half4 __attribute__((overloadable)) 3653 modf(half4 v, half4* integral_part); 3654 #endif 3655 3656 /* 3657 * nan: Not a Number 3658 * 3659 * Returns a NaN value (Not a Number). 3660 * 3661 * Parameters: 3662 * v: Not used. 3663 */ 3664 extern float __attribute__((const, overloadable)) 3665 nan(uint v); 3666 3667 /* 3668 * nan_half: Not a Number 3669 * 3670 * Returns a half-precision floating point NaN value (Not a Number). 3671 */ 3672 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3673 extern half __attribute__((const, overloadable)) 3674 nan_half(void); 3675 #endif 3676 3677 /* 3678 * native_acos: Approximate inverse cosine 3679 * 3680 * Returns the approximate inverse cosine, in radians. 3681 * 3682 * This function yields undefined results from input values less than -1 or greater than 1. 3683 * 3684 * See also acos(). 3685 */ 3686 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3687 extern float __attribute__((const, overloadable)) 3688 native_acos(float v); 3689 #endif 3690 3691 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3692 extern float2 __attribute__((const, overloadable)) 3693 native_acos(float2 v); 3694 #endif 3695 3696 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3697 extern float3 __attribute__((const, overloadable)) 3698 native_acos(float3 v); 3699 #endif 3700 3701 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3702 extern float4 __attribute__((const, overloadable)) 3703 native_acos(float4 v); 3704 #endif 3705 3706 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3707 extern half __attribute__((const, overloadable)) 3708 native_acos(half v); 3709 #endif 3710 3711 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3712 extern half2 __attribute__((const, overloadable)) 3713 native_acos(half2 v); 3714 #endif 3715 3716 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3717 extern half3 __attribute__((const, overloadable)) 3718 native_acos(half3 v); 3719 #endif 3720 3721 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3722 extern half4 __attribute__((const, overloadable)) 3723 native_acos(half4 v); 3724 #endif 3725 3726 /* 3727 * native_acosh: Approximate inverse hyperbolic cosine 3728 * 3729 * Returns the approximate inverse hyperbolic cosine, in radians. 3730 * 3731 * See also acosh(). 3732 */ 3733 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3734 extern float __attribute__((const, overloadable)) 3735 native_acosh(float v); 3736 #endif 3737 3738 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3739 extern float2 __attribute__((const, overloadable)) 3740 native_acosh(float2 v); 3741 #endif 3742 3743 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3744 extern float3 __attribute__((const, overloadable)) 3745 native_acosh(float3 v); 3746 #endif 3747 3748 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3749 extern float4 __attribute__((const, overloadable)) 3750 native_acosh(float4 v); 3751 #endif 3752 3753 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3754 extern half __attribute__((const, overloadable)) 3755 native_acosh(half v); 3756 #endif 3757 3758 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3759 extern half2 __attribute__((const, overloadable)) 3760 native_acosh(half2 v); 3761 #endif 3762 3763 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3764 extern half3 __attribute__((const, overloadable)) 3765 native_acosh(half3 v); 3766 #endif 3767 3768 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3769 extern half4 __attribute__((const, overloadable)) 3770 native_acosh(half4 v); 3771 #endif 3772 3773 /* 3774 * native_acospi: Approximate inverse cosine divided by pi 3775 * 3776 * Returns the approximate inverse cosine in radians, divided by pi. 3777 * 3778 * To get an inverse cosine measured in degrees, use acospi(a) * 180.f. 3779 * 3780 * This function yields undefined results from input values less than -1 or greater than 1. 3781 * 3782 * See also acospi(). 3783 */ 3784 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3785 extern float __attribute__((const, overloadable)) 3786 native_acospi(float v); 3787 #endif 3788 3789 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3790 extern float2 __attribute__((const, overloadable)) 3791 native_acospi(float2 v); 3792 #endif 3793 3794 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3795 extern float3 __attribute__((const, overloadable)) 3796 native_acospi(float3 v); 3797 #endif 3798 3799 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3800 extern float4 __attribute__((const, overloadable)) 3801 native_acospi(float4 v); 3802 #endif 3803 3804 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3805 extern half __attribute__((const, overloadable)) 3806 native_acospi(half v); 3807 #endif 3808 3809 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3810 extern half2 __attribute__((const, overloadable)) 3811 native_acospi(half2 v); 3812 #endif 3813 3814 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3815 extern half3 __attribute__((const, overloadable)) 3816 native_acospi(half3 v); 3817 #endif 3818 3819 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3820 extern half4 __attribute__((const, overloadable)) 3821 native_acospi(half4 v); 3822 #endif 3823 3824 /* 3825 * native_asin: Approximate inverse sine 3826 * 3827 * Returns the approximate inverse sine, in radians. 3828 * 3829 * This function yields undefined results from input values less than -1 or greater than 1. 3830 * 3831 * See also asin(). 3832 */ 3833 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3834 extern float __attribute__((const, overloadable)) 3835 native_asin(float v); 3836 #endif 3837 3838 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3839 extern float2 __attribute__((const, overloadable)) 3840 native_asin(float2 v); 3841 #endif 3842 3843 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3844 extern float3 __attribute__((const, overloadable)) 3845 native_asin(float3 v); 3846 #endif 3847 3848 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3849 extern float4 __attribute__((const, overloadable)) 3850 native_asin(float4 v); 3851 #endif 3852 3853 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3854 extern half __attribute__((const, overloadable)) 3855 native_asin(half v); 3856 #endif 3857 3858 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3859 extern half2 __attribute__((const, overloadable)) 3860 native_asin(half2 v); 3861 #endif 3862 3863 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3864 extern half3 __attribute__((const, overloadable)) 3865 native_asin(half3 v); 3866 #endif 3867 3868 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3869 extern half4 __attribute__((const, overloadable)) 3870 native_asin(half4 v); 3871 #endif 3872 3873 /* 3874 * native_asinh: Approximate inverse hyperbolic sine 3875 * 3876 * Returns the approximate inverse hyperbolic sine, in radians. 3877 * 3878 * See also asinh(). 3879 */ 3880 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3881 extern float __attribute__((const, overloadable)) 3882 native_asinh(float v); 3883 #endif 3884 3885 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3886 extern float2 __attribute__((const, overloadable)) 3887 native_asinh(float2 v); 3888 #endif 3889 3890 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3891 extern float3 __attribute__((const, overloadable)) 3892 native_asinh(float3 v); 3893 #endif 3894 3895 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3896 extern float4 __attribute__((const, overloadable)) 3897 native_asinh(float4 v); 3898 #endif 3899 3900 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3901 extern half __attribute__((const, overloadable)) 3902 native_asinh(half v); 3903 #endif 3904 3905 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3906 extern half2 __attribute__((const, overloadable)) 3907 native_asinh(half2 v); 3908 #endif 3909 3910 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3911 extern half3 __attribute__((const, overloadable)) 3912 native_asinh(half3 v); 3913 #endif 3914 3915 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3916 extern half4 __attribute__((const, overloadable)) 3917 native_asinh(half4 v); 3918 #endif 3919 3920 /* 3921 * native_asinpi: Approximate inverse sine divided by pi 3922 * 3923 * Returns the approximate inverse sine in radians, divided by pi. 3924 * 3925 * To get an inverse sine measured in degrees, use asinpi(a) * 180.f. 3926 * 3927 * This function yields undefined results from input values less than -1 or greater than 1. 3928 * 3929 * See also asinpi(). 3930 */ 3931 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3932 extern float __attribute__((const, overloadable)) 3933 native_asinpi(float v); 3934 #endif 3935 3936 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3937 extern float2 __attribute__((const, overloadable)) 3938 native_asinpi(float2 v); 3939 #endif 3940 3941 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3942 extern float3 __attribute__((const, overloadable)) 3943 native_asinpi(float3 v); 3944 #endif 3945 3946 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3947 extern float4 __attribute__((const, overloadable)) 3948 native_asinpi(float4 v); 3949 #endif 3950 3951 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3952 extern half __attribute__((const, overloadable)) 3953 native_asinpi(half v); 3954 #endif 3955 3956 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3957 extern half2 __attribute__((const, overloadable)) 3958 native_asinpi(half2 v); 3959 #endif 3960 3961 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3962 extern half3 __attribute__((const, overloadable)) 3963 native_asinpi(half3 v); 3964 #endif 3965 3966 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3967 extern half4 __attribute__((const, overloadable)) 3968 native_asinpi(half4 v); 3969 #endif 3970 3971 /* 3972 * native_atan: Approximate inverse tangent 3973 * 3974 * Returns the approximate inverse tangent, in radians. 3975 * 3976 * See also atan(). 3977 */ 3978 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3979 extern float __attribute__((const, overloadable)) 3980 native_atan(float v); 3981 #endif 3982 3983 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3984 extern float2 __attribute__((const, overloadable)) 3985 native_atan(float2 v); 3986 #endif 3987 3988 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3989 extern float3 __attribute__((const, overloadable)) 3990 native_atan(float3 v); 3991 #endif 3992 3993 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 3994 extern float4 __attribute__((const, overloadable)) 3995 native_atan(float4 v); 3996 #endif 3997 3998 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 3999 extern half __attribute__((const, overloadable)) 4000 native_atan(half v); 4001 #endif 4002 4003 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4004 extern half2 __attribute__((const, overloadable)) 4005 native_atan(half2 v); 4006 #endif 4007 4008 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4009 extern half3 __attribute__((const, overloadable)) 4010 native_atan(half3 v); 4011 #endif 4012 4013 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4014 extern half4 __attribute__((const, overloadable)) 4015 native_atan(half4 v); 4016 #endif 4017 4018 /* 4019 * native_atan2: Approximate inverse tangent of a ratio 4020 * 4021 * Returns the approximate inverse tangent of (numerator / denominator), in radians. 4022 * 4023 * See also atan2(). 4024 * 4025 * Parameters: 4026 * numerator: Numerator. 4027 * denominator: Denominator. Can be 0. 4028 */ 4029 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4030 extern float __attribute__((const, overloadable)) 4031 native_atan2(float numerator, float denominator); 4032 #endif 4033 4034 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4035 extern float2 __attribute__((const, overloadable)) 4036 native_atan2(float2 numerator, float2 denominator); 4037 #endif 4038 4039 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4040 extern float3 __attribute__((const, overloadable)) 4041 native_atan2(float3 numerator, float3 denominator); 4042 #endif 4043 4044 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4045 extern float4 __attribute__((const, overloadable)) 4046 native_atan2(float4 numerator, float4 denominator); 4047 #endif 4048 4049 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4050 extern half __attribute__((const, overloadable)) 4051 native_atan2(half numerator, half denominator); 4052 #endif 4053 4054 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4055 extern half2 __attribute__((const, overloadable)) 4056 native_atan2(half2 numerator, half2 denominator); 4057 #endif 4058 4059 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4060 extern half3 __attribute__((const, overloadable)) 4061 native_atan2(half3 numerator, half3 denominator); 4062 #endif 4063 4064 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4065 extern half4 __attribute__((const, overloadable)) 4066 native_atan2(half4 numerator, half4 denominator); 4067 #endif 4068 4069 /* 4070 * native_atan2pi: Approximate inverse tangent of a ratio, divided by pi 4071 * 4072 * Returns the approximate inverse tangent of (numerator / denominator), 4073 * in radians, divided by pi. 4074 * 4075 * To get an inverse tangent measured in degrees, use atan2pi(n, d) * 180.f. 4076 * 4077 * See also atan2pi(). 4078 * 4079 * Parameters: 4080 * numerator: Numerator. 4081 * denominator: Denominator. Can be 0. 4082 */ 4083 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4084 extern float __attribute__((const, overloadable)) 4085 native_atan2pi(float numerator, float denominator); 4086 #endif 4087 4088 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4089 extern float2 __attribute__((const, overloadable)) 4090 native_atan2pi(float2 numerator, float2 denominator); 4091 #endif 4092 4093 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4094 extern float3 __attribute__((const, overloadable)) 4095 native_atan2pi(float3 numerator, float3 denominator); 4096 #endif 4097 4098 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4099 extern float4 __attribute__((const, overloadable)) 4100 native_atan2pi(float4 numerator, float4 denominator); 4101 #endif 4102 4103 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4104 extern half __attribute__((const, overloadable)) 4105 native_atan2pi(half numerator, half denominator); 4106 #endif 4107 4108 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4109 extern half2 __attribute__((const, overloadable)) 4110 native_atan2pi(half2 numerator, half2 denominator); 4111 #endif 4112 4113 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4114 extern half3 __attribute__((const, overloadable)) 4115 native_atan2pi(half3 numerator, half3 denominator); 4116 #endif 4117 4118 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4119 extern half4 __attribute__((const, overloadable)) 4120 native_atan2pi(half4 numerator, half4 denominator); 4121 #endif 4122 4123 /* 4124 * native_atanh: Approximate inverse hyperbolic tangent 4125 * 4126 * Returns the approximate inverse hyperbolic tangent, in radians. 4127 * 4128 * See also atanh(). 4129 */ 4130 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4131 extern float __attribute__((const, overloadable)) 4132 native_atanh(float v); 4133 #endif 4134 4135 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4136 extern float2 __attribute__((const, overloadable)) 4137 native_atanh(float2 v); 4138 #endif 4139 4140 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4141 extern float3 __attribute__((const, overloadable)) 4142 native_atanh(float3 v); 4143 #endif 4144 4145 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4146 extern float4 __attribute__((const, overloadable)) 4147 native_atanh(float4 v); 4148 #endif 4149 4150 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4151 extern half __attribute__((const, overloadable)) 4152 native_atanh(half v); 4153 #endif 4154 4155 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4156 extern half2 __attribute__((const, overloadable)) 4157 native_atanh(half2 v); 4158 #endif 4159 4160 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4161 extern half3 __attribute__((const, overloadable)) 4162 native_atanh(half3 v); 4163 #endif 4164 4165 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4166 extern half4 __attribute__((const, overloadable)) 4167 native_atanh(half4 v); 4168 #endif 4169 4170 /* 4171 * native_atanpi: Approximate inverse tangent divided by pi 4172 * 4173 * Returns the approximate inverse tangent in radians, divided by pi. 4174 * 4175 * To get an inverse tangent measured in degrees, use atanpi(a) * 180.f. 4176 * 4177 * See also atanpi(). 4178 */ 4179 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4180 extern float __attribute__((const, overloadable)) 4181 native_atanpi(float v); 4182 #endif 4183 4184 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4185 extern float2 __attribute__((const, overloadable)) 4186 native_atanpi(float2 v); 4187 #endif 4188 4189 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4190 extern float3 __attribute__((const, overloadable)) 4191 native_atanpi(float3 v); 4192 #endif 4193 4194 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4195 extern float4 __attribute__((const, overloadable)) 4196 native_atanpi(float4 v); 4197 #endif 4198 4199 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4200 extern half __attribute__((const, overloadable)) 4201 native_atanpi(half v); 4202 #endif 4203 4204 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4205 extern half2 __attribute__((const, overloadable)) 4206 native_atanpi(half2 v); 4207 #endif 4208 4209 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4210 extern half3 __attribute__((const, overloadable)) 4211 native_atanpi(half3 v); 4212 #endif 4213 4214 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4215 extern half4 __attribute__((const, overloadable)) 4216 native_atanpi(half4 v); 4217 #endif 4218 4219 /* 4220 * native_cbrt: Approximate cube root 4221 * 4222 * Returns the approximate cubic root. 4223 * 4224 * See also cbrt(). 4225 */ 4226 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4227 extern float __attribute__((const, overloadable)) 4228 native_cbrt(float v); 4229 #endif 4230 4231 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4232 extern float2 __attribute__((const, overloadable)) 4233 native_cbrt(float2 v); 4234 #endif 4235 4236 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4237 extern float3 __attribute__((const, overloadable)) 4238 native_cbrt(float3 v); 4239 #endif 4240 4241 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4242 extern float4 __attribute__((const, overloadable)) 4243 native_cbrt(float4 v); 4244 #endif 4245 4246 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4247 extern half __attribute__((const, overloadable)) 4248 native_cbrt(half v); 4249 #endif 4250 4251 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4252 extern half2 __attribute__((const, overloadable)) 4253 native_cbrt(half2 v); 4254 #endif 4255 4256 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4257 extern half3 __attribute__((const, overloadable)) 4258 native_cbrt(half3 v); 4259 #endif 4260 4261 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4262 extern half4 __attribute__((const, overloadable)) 4263 native_cbrt(half4 v); 4264 #endif 4265 4266 /* 4267 * native_cos: Approximate cosine 4268 * 4269 * Returns the approximate cosine of an angle measured in radians. 4270 * 4271 * See also cos(). 4272 */ 4273 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4274 extern float __attribute__((const, overloadable)) 4275 native_cos(float v); 4276 #endif 4277 4278 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4279 extern float2 __attribute__((const, overloadable)) 4280 native_cos(float2 v); 4281 #endif 4282 4283 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4284 extern float3 __attribute__((const, overloadable)) 4285 native_cos(float3 v); 4286 #endif 4287 4288 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4289 extern float4 __attribute__((const, overloadable)) 4290 native_cos(float4 v); 4291 #endif 4292 4293 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4294 extern half __attribute__((const, overloadable)) 4295 native_cos(half v); 4296 #endif 4297 4298 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4299 extern half2 __attribute__((const, overloadable)) 4300 native_cos(half2 v); 4301 #endif 4302 4303 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4304 extern half3 __attribute__((const, overloadable)) 4305 native_cos(half3 v); 4306 #endif 4307 4308 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4309 extern half4 __attribute__((const, overloadable)) 4310 native_cos(half4 v); 4311 #endif 4312 4313 /* 4314 * native_cosh: Approximate hypebolic cosine 4315 * 4316 * Returns the approximate hypebolic cosine. 4317 * 4318 * See also cosh(). 4319 */ 4320 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4321 extern float __attribute__((const, overloadable)) 4322 native_cosh(float v); 4323 #endif 4324 4325 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4326 extern float2 __attribute__((const, overloadable)) 4327 native_cosh(float2 v); 4328 #endif 4329 4330 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4331 extern float3 __attribute__((const, overloadable)) 4332 native_cosh(float3 v); 4333 #endif 4334 4335 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4336 extern float4 __attribute__((const, overloadable)) 4337 native_cosh(float4 v); 4338 #endif 4339 4340 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4341 extern half __attribute__((const, overloadable)) 4342 native_cosh(half v); 4343 #endif 4344 4345 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4346 extern half2 __attribute__((const, overloadable)) 4347 native_cosh(half2 v); 4348 #endif 4349 4350 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4351 extern half3 __attribute__((const, overloadable)) 4352 native_cosh(half3 v); 4353 #endif 4354 4355 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4356 extern half4 __attribute__((const, overloadable)) 4357 native_cosh(half4 v); 4358 #endif 4359 4360 /* 4361 * native_cospi: Approximate cosine of a number multiplied by pi 4362 * 4363 * Returns the approximate cosine of (v * pi), where (v * pi) is measured in radians. 4364 * 4365 * To get the cosine of a value measured in degrees, call cospi(v / 180.f). 4366 * 4367 * See also cospi(). 4368 */ 4369 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4370 extern float __attribute__((const, overloadable)) 4371 native_cospi(float v); 4372 #endif 4373 4374 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4375 extern float2 __attribute__((const, overloadable)) 4376 native_cospi(float2 v); 4377 #endif 4378 4379 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4380 extern float3 __attribute__((const, overloadable)) 4381 native_cospi(float3 v); 4382 #endif 4383 4384 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4385 extern float4 __attribute__((const, overloadable)) 4386 native_cospi(float4 v); 4387 #endif 4388 4389 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4390 extern half __attribute__((const, overloadable)) 4391 native_cospi(half v); 4392 #endif 4393 4394 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4395 extern half2 __attribute__((const, overloadable)) 4396 native_cospi(half2 v); 4397 #endif 4398 4399 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4400 extern half3 __attribute__((const, overloadable)) 4401 native_cospi(half3 v); 4402 #endif 4403 4404 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4405 extern half4 __attribute__((const, overloadable)) 4406 native_cospi(half4 v); 4407 #endif 4408 4409 /* 4410 * native_divide: Approximate division 4411 * 4412 * Computes the approximate division of two values. 4413 */ 4414 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4415 extern float __attribute__((const, overloadable)) 4416 native_divide(float left_vector, float right_vector); 4417 #endif 4418 4419 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4420 extern float2 __attribute__((const, overloadable)) 4421 native_divide(float2 left_vector, float2 right_vector); 4422 #endif 4423 4424 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4425 extern float3 __attribute__((const, overloadable)) 4426 native_divide(float3 left_vector, float3 right_vector); 4427 #endif 4428 4429 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4430 extern float4 __attribute__((const, overloadable)) 4431 native_divide(float4 left_vector, float4 right_vector); 4432 #endif 4433 4434 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4435 extern half __attribute__((const, overloadable)) 4436 native_divide(half left_vector, half right_vector); 4437 #endif 4438 4439 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4440 extern half2 __attribute__((const, overloadable)) 4441 native_divide(half2 left_vector, half2 right_vector); 4442 #endif 4443 4444 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4445 extern half3 __attribute__((const, overloadable)) 4446 native_divide(half3 left_vector, half3 right_vector); 4447 #endif 4448 4449 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4450 extern half4 __attribute__((const, overloadable)) 4451 native_divide(half4 left_vector, half4 right_vector); 4452 #endif 4453 4454 /* 4455 * native_exp: Approximate e raised to a number 4456 * 4457 * Fast approximate exp. 4458 * 4459 * It is valid for inputs from -86.f to 86.f. The precision is no worse than what would be 4460 * expected from using 16 bit floating point values. 4461 * 4462 * See also exp(). 4463 */ 4464 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4465 extern float __attribute__((const, overloadable)) 4466 native_exp(float v); 4467 #endif 4468 4469 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4470 extern float2 __attribute__((const, overloadable)) 4471 native_exp(float2 v); 4472 #endif 4473 4474 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4475 extern float3 __attribute__((const, overloadable)) 4476 native_exp(float3 v); 4477 #endif 4478 4479 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4480 extern float4 __attribute__((const, overloadable)) 4481 native_exp(float4 v); 4482 #endif 4483 4484 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4485 extern half __attribute__((const, overloadable)) 4486 native_exp(half v); 4487 #endif 4488 4489 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4490 extern half2 __attribute__((const, overloadable)) 4491 native_exp(half2 v); 4492 #endif 4493 4494 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4495 extern half3 __attribute__((const, overloadable)) 4496 native_exp(half3 v); 4497 #endif 4498 4499 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4500 extern half4 __attribute__((const, overloadable)) 4501 native_exp(half4 v); 4502 #endif 4503 4504 /* 4505 * native_exp10: Approximate 10 raised to a number 4506 * 4507 * Fast approximate exp10. 4508 * 4509 * It is valid for inputs from -37.f to 37.f. The precision is no worse than what would be 4510 * expected from using 16 bit floating point values. 4511 * 4512 * See also exp10(). 4513 */ 4514 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4515 extern float __attribute__((const, overloadable)) 4516 native_exp10(float v); 4517 #endif 4518 4519 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4520 extern float2 __attribute__((const, overloadable)) 4521 native_exp10(float2 v); 4522 #endif 4523 4524 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4525 extern float3 __attribute__((const, overloadable)) 4526 native_exp10(float3 v); 4527 #endif 4528 4529 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4530 extern float4 __attribute__((const, overloadable)) 4531 native_exp10(float4 v); 4532 #endif 4533 4534 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4535 extern half __attribute__((const, overloadable)) 4536 native_exp10(half v); 4537 #endif 4538 4539 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4540 extern half2 __attribute__((const, overloadable)) 4541 native_exp10(half2 v); 4542 #endif 4543 4544 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4545 extern half3 __attribute__((const, overloadable)) 4546 native_exp10(half3 v); 4547 #endif 4548 4549 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4550 extern half4 __attribute__((const, overloadable)) 4551 native_exp10(half4 v); 4552 #endif 4553 4554 /* 4555 * native_exp2: Approximate 2 raised to a number 4556 * 4557 * Fast approximate exp2. 4558 * 4559 * It is valid for inputs from -125.f to 125.f. The precision is no worse than what would be 4560 * expected from using 16 bit floating point values. 4561 * 4562 * See also exp2(). 4563 */ 4564 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4565 extern float __attribute__((const, overloadable)) 4566 native_exp2(float v); 4567 #endif 4568 4569 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4570 extern float2 __attribute__((const, overloadable)) 4571 native_exp2(float2 v); 4572 #endif 4573 4574 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4575 extern float3 __attribute__((const, overloadable)) 4576 native_exp2(float3 v); 4577 #endif 4578 4579 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4580 extern float4 __attribute__((const, overloadable)) 4581 native_exp2(float4 v); 4582 #endif 4583 4584 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4585 extern half __attribute__((const, overloadable)) 4586 native_exp2(half v); 4587 #endif 4588 4589 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4590 extern half2 __attribute__((const, overloadable)) 4591 native_exp2(half2 v); 4592 #endif 4593 4594 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4595 extern half3 __attribute__((const, overloadable)) 4596 native_exp2(half3 v); 4597 #endif 4598 4599 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4600 extern half4 __attribute__((const, overloadable)) 4601 native_exp2(half4 v); 4602 #endif 4603 4604 /* 4605 * native_expm1: Approximate e raised to a number minus one 4606 * 4607 * Returns the approximate (e ^ v) - 1. 4608 * 4609 * See also expm1(). 4610 */ 4611 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4612 extern float __attribute__((const, overloadable)) 4613 native_expm1(float v); 4614 #endif 4615 4616 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4617 extern float2 __attribute__((const, overloadable)) 4618 native_expm1(float2 v); 4619 #endif 4620 4621 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4622 extern float3 __attribute__((const, overloadable)) 4623 native_expm1(float3 v); 4624 #endif 4625 4626 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4627 extern float4 __attribute__((const, overloadable)) 4628 native_expm1(float4 v); 4629 #endif 4630 4631 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4632 extern half __attribute__((const, overloadable)) 4633 native_expm1(half v); 4634 #endif 4635 4636 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4637 extern half2 __attribute__((const, overloadable)) 4638 native_expm1(half2 v); 4639 #endif 4640 4641 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4642 extern half3 __attribute__((const, overloadable)) 4643 native_expm1(half3 v); 4644 #endif 4645 4646 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4647 extern half4 __attribute__((const, overloadable)) 4648 native_expm1(half4 v); 4649 #endif 4650 4651 /* 4652 * native_hypot: Approximate hypotenuse 4653 * 4654 * Returns the approximate native_sqrt(a * a + b * b) 4655 * 4656 * See also hypot(). 4657 */ 4658 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4659 extern float __attribute__((const, overloadable)) 4660 native_hypot(float a, float b); 4661 #endif 4662 4663 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4664 extern float2 __attribute__((const, overloadable)) 4665 native_hypot(float2 a, float2 b); 4666 #endif 4667 4668 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4669 extern float3 __attribute__((const, overloadable)) 4670 native_hypot(float3 a, float3 b); 4671 #endif 4672 4673 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4674 extern float4 __attribute__((const, overloadable)) 4675 native_hypot(float4 a, float4 b); 4676 #endif 4677 4678 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4679 extern half __attribute__((const, overloadable)) 4680 native_hypot(half a, half b); 4681 #endif 4682 4683 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4684 extern half2 __attribute__((const, overloadable)) 4685 native_hypot(half2 a, half2 b); 4686 #endif 4687 4688 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4689 extern half3 __attribute__((const, overloadable)) 4690 native_hypot(half3 a, half3 b); 4691 #endif 4692 4693 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4694 extern half4 __attribute__((const, overloadable)) 4695 native_hypot(half4 a, half4 b); 4696 #endif 4697 4698 /* 4699 * native_log: Approximate natural logarithm 4700 * 4701 * Fast approximate log. 4702 * 4703 * It is not accurate for values very close to zero. 4704 * 4705 * See also log(). 4706 */ 4707 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4708 extern float __attribute__((const, overloadable)) 4709 native_log(float v); 4710 #endif 4711 4712 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4713 extern float2 __attribute__((const, overloadable)) 4714 native_log(float2 v); 4715 #endif 4716 4717 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4718 extern float3 __attribute__((const, overloadable)) 4719 native_log(float3 v); 4720 #endif 4721 4722 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4723 extern float4 __attribute__((const, overloadable)) 4724 native_log(float4 v); 4725 #endif 4726 4727 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4728 extern half __attribute__((const, overloadable)) 4729 native_log(half v); 4730 #endif 4731 4732 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4733 extern half2 __attribute__((const, overloadable)) 4734 native_log(half2 v); 4735 #endif 4736 4737 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4738 extern half3 __attribute__((const, overloadable)) 4739 native_log(half3 v); 4740 #endif 4741 4742 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4743 extern half4 __attribute__((const, overloadable)) 4744 native_log(half4 v); 4745 #endif 4746 4747 /* 4748 * native_log10: Approximate base 10 logarithm 4749 * 4750 * Fast approximate log10. 4751 * 4752 * It is not accurate for values very close to zero. 4753 * 4754 * See also log10(). 4755 */ 4756 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4757 extern float __attribute__((const, overloadable)) 4758 native_log10(float v); 4759 #endif 4760 4761 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4762 extern float2 __attribute__((const, overloadable)) 4763 native_log10(float2 v); 4764 #endif 4765 4766 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4767 extern float3 __attribute__((const, overloadable)) 4768 native_log10(float3 v); 4769 #endif 4770 4771 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4772 extern float4 __attribute__((const, overloadable)) 4773 native_log10(float4 v); 4774 #endif 4775 4776 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4777 extern half __attribute__((const, overloadable)) 4778 native_log10(half v); 4779 #endif 4780 4781 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4782 extern half2 __attribute__((const, overloadable)) 4783 native_log10(half2 v); 4784 #endif 4785 4786 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4787 extern half3 __attribute__((const, overloadable)) 4788 native_log10(half3 v); 4789 #endif 4790 4791 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4792 extern half4 __attribute__((const, overloadable)) 4793 native_log10(half4 v); 4794 #endif 4795 4796 /* 4797 * native_log1p: Approximate natural logarithm of a value plus 1 4798 * 4799 * Returns the approximate natural logarithm of (v + 1.0f) 4800 * 4801 * See also log1p(). 4802 */ 4803 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4804 extern float __attribute__((const, overloadable)) 4805 native_log1p(float v); 4806 #endif 4807 4808 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4809 extern float2 __attribute__((const, overloadable)) 4810 native_log1p(float2 v); 4811 #endif 4812 4813 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4814 extern float3 __attribute__((const, overloadable)) 4815 native_log1p(float3 v); 4816 #endif 4817 4818 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4819 extern float4 __attribute__((const, overloadable)) 4820 native_log1p(float4 v); 4821 #endif 4822 4823 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4824 extern half __attribute__((const, overloadable)) 4825 native_log1p(half v); 4826 #endif 4827 4828 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4829 extern half2 __attribute__((const, overloadable)) 4830 native_log1p(half2 v); 4831 #endif 4832 4833 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4834 extern half3 __attribute__((const, overloadable)) 4835 native_log1p(half3 v); 4836 #endif 4837 4838 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4839 extern half4 __attribute__((const, overloadable)) 4840 native_log1p(half4 v); 4841 #endif 4842 4843 /* 4844 * native_log2: Approximate base 2 logarithm 4845 * 4846 * Fast approximate log2. 4847 * 4848 * It is not accurate for values very close to zero. 4849 * 4850 * See also log2(). 4851 */ 4852 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4853 extern float __attribute__((const, overloadable)) 4854 native_log2(float v); 4855 #endif 4856 4857 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4858 extern float2 __attribute__((const, overloadable)) 4859 native_log2(float2 v); 4860 #endif 4861 4862 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4863 extern float3 __attribute__((const, overloadable)) 4864 native_log2(float3 v); 4865 #endif 4866 4867 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4868 extern float4 __attribute__((const, overloadable)) 4869 native_log2(float4 v); 4870 #endif 4871 4872 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4873 extern half __attribute__((const, overloadable)) 4874 native_log2(half v); 4875 #endif 4876 4877 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4878 extern half2 __attribute__((const, overloadable)) 4879 native_log2(half2 v); 4880 #endif 4881 4882 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4883 extern half3 __attribute__((const, overloadable)) 4884 native_log2(half3 v); 4885 #endif 4886 4887 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4888 extern half4 __attribute__((const, overloadable)) 4889 native_log2(half4 v); 4890 #endif 4891 4892 /* 4893 * native_powr: Approximate positive base raised to an exponent 4894 * 4895 * Fast approximate (base ^ exponent). 4896 * 4897 * See also powr(). 4898 * 4899 * Parameters: 4900 * base: Must be between 0.f and 256.f. The function is not accurate for values very close to zero. 4901 * exponent: Must be between -15.f and 15.f. 4902 */ 4903 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4904 extern float __attribute__((const, overloadable)) 4905 native_powr(float base, float exponent); 4906 #endif 4907 4908 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4909 extern float2 __attribute__((const, overloadable)) 4910 native_powr(float2 base, float2 exponent); 4911 #endif 4912 4913 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4914 extern float3 __attribute__((const, overloadable)) 4915 native_powr(float3 base, float3 exponent); 4916 #endif 4917 4918 #if (defined(RS_VERSION) && (RS_VERSION >= 18)) 4919 extern float4 __attribute__((const, overloadable)) 4920 native_powr(float4 base, float4 exponent); 4921 #endif 4922 4923 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4924 extern half __attribute__((const, overloadable)) 4925 native_powr(half base, half exponent); 4926 #endif 4927 4928 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4929 extern half2 __attribute__((const, overloadable)) 4930 native_powr(half2 base, half2 exponent); 4931 #endif 4932 4933 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4934 extern half3 __attribute__((const, overloadable)) 4935 native_powr(half3 base, half3 exponent); 4936 #endif 4937 4938 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4939 extern half4 __attribute__((const, overloadable)) 4940 native_powr(half4 base, half4 exponent); 4941 #endif 4942 4943 /* 4944 * native_recip: Approximate reciprocal 4945 * 4946 * Returns the approximate approximate reciprocal of a value. 4947 * 4948 * See also half_recip(). 4949 */ 4950 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4951 extern float __attribute__((const, overloadable)) 4952 native_recip(float v); 4953 #endif 4954 4955 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4956 extern float2 __attribute__((const, overloadable)) 4957 native_recip(float2 v); 4958 #endif 4959 4960 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4961 extern float3 __attribute__((const, overloadable)) 4962 native_recip(float3 v); 4963 #endif 4964 4965 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4966 extern float4 __attribute__((const, overloadable)) 4967 native_recip(float4 v); 4968 #endif 4969 4970 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4971 extern half __attribute__((const, overloadable)) 4972 native_recip(half v); 4973 #endif 4974 4975 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4976 extern half2 __attribute__((const, overloadable)) 4977 native_recip(half2 v); 4978 #endif 4979 4980 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4981 extern half3 __attribute__((const, overloadable)) 4982 native_recip(half3 v); 4983 #endif 4984 4985 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 4986 extern half4 __attribute__((const, overloadable)) 4987 native_recip(half4 v); 4988 #endif 4989 4990 /* 4991 * native_rootn: Approximate nth root 4992 * 4993 * Compute the approximate Nth root of a value. 4994 * 4995 * See also rootn(). 4996 */ 4997 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 4998 extern float __attribute__((const, overloadable)) 4999 native_rootn(float v, int n); 5000 #endif 5001 5002 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5003 extern float2 __attribute__((const, overloadable)) 5004 native_rootn(float2 v, int2 n); 5005 #endif 5006 5007 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5008 extern float3 __attribute__((const, overloadable)) 5009 native_rootn(float3 v, int3 n); 5010 #endif 5011 5012 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5013 extern float4 __attribute__((const, overloadable)) 5014 native_rootn(float4 v, int4 n); 5015 #endif 5016 5017 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5018 extern half __attribute__((const, overloadable)) 5019 native_rootn(half v, int n); 5020 #endif 5021 5022 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5023 extern half2 __attribute__((const, overloadable)) 5024 native_rootn(half2 v, int2 n); 5025 #endif 5026 5027 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5028 extern half3 __attribute__((const, overloadable)) 5029 native_rootn(half3 v, int3 n); 5030 #endif 5031 5032 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5033 extern half4 __attribute__((const, overloadable)) 5034 native_rootn(half4 v, int4 n); 5035 #endif 5036 5037 /* 5038 * native_rsqrt: Approximate reciprocal of a square root 5039 * 5040 * Returns approximate (1 / sqrt(v)). 5041 * 5042 * See also rsqrt(), half_rsqrt(). 5043 */ 5044 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5045 extern float __attribute__((const, overloadable)) 5046 native_rsqrt(float v); 5047 #endif 5048 5049 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5050 extern float2 __attribute__((const, overloadable)) 5051 native_rsqrt(float2 v); 5052 #endif 5053 5054 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5055 extern float3 __attribute__((const, overloadable)) 5056 native_rsqrt(float3 v); 5057 #endif 5058 5059 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5060 extern float4 __attribute__((const, overloadable)) 5061 native_rsqrt(float4 v); 5062 #endif 5063 5064 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5065 extern half __attribute__((const, overloadable)) 5066 native_rsqrt(half v); 5067 #endif 5068 5069 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5070 extern half2 __attribute__((const, overloadable)) 5071 native_rsqrt(half2 v); 5072 #endif 5073 5074 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5075 extern half3 __attribute__((const, overloadable)) 5076 native_rsqrt(half3 v); 5077 #endif 5078 5079 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5080 extern half4 __attribute__((const, overloadable)) 5081 native_rsqrt(half4 v); 5082 #endif 5083 5084 /* 5085 * native_sin: Approximate sine 5086 * 5087 * Returns the approximate sine of an angle measured in radians. 5088 * 5089 * See also sin(). 5090 */ 5091 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5092 extern float __attribute__((const, overloadable)) 5093 native_sin(float v); 5094 #endif 5095 5096 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5097 extern float2 __attribute__((const, overloadable)) 5098 native_sin(float2 v); 5099 #endif 5100 5101 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5102 extern float3 __attribute__((const, overloadable)) 5103 native_sin(float3 v); 5104 #endif 5105 5106 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5107 extern float4 __attribute__((const, overloadable)) 5108 native_sin(float4 v); 5109 #endif 5110 5111 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5112 extern half __attribute__((const, overloadable)) 5113 native_sin(half v); 5114 #endif 5115 5116 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5117 extern half2 __attribute__((const, overloadable)) 5118 native_sin(half2 v); 5119 #endif 5120 5121 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5122 extern half3 __attribute__((const, overloadable)) 5123 native_sin(half3 v); 5124 #endif 5125 5126 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5127 extern half4 __attribute__((const, overloadable)) 5128 native_sin(half4 v); 5129 #endif 5130 5131 /* 5132 * native_sincos: Approximate sine and cosine 5133 * 5134 * Returns the approximate sine and cosine of a value. 5135 * 5136 * See also sincos(). 5137 * 5138 * Parameters: 5139 * v: Incoming value in radians. 5140 * cos: *cos will be set to the cosine value. 5141 * 5142 * Returns: Sine. 5143 */ 5144 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5145 extern float __attribute__((overloadable)) 5146 native_sincos(float v, float* cos); 5147 #endif 5148 5149 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5150 extern float2 __attribute__((overloadable)) 5151 native_sincos(float2 v, float2* cos); 5152 #endif 5153 5154 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5155 extern float3 __attribute__((overloadable)) 5156 native_sincos(float3 v, float3* cos); 5157 #endif 5158 5159 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5160 extern float4 __attribute__((overloadable)) 5161 native_sincos(float4 v, float4* cos); 5162 #endif 5163 5164 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5165 extern half __attribute__((overloadable)) 5166 native_sincos(half v, half* cos); 5167 #endif 5168 5169 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5170 extern half2 __attribute__((overloadable)) 5171 native_sincos(half2 v, half2* cos); 5172 #endif 5173 5174 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5175 extern half3 __attribute__((overloadable)) 5176 native_sincos(half3 v, half3* cos); 5177 #endif 5178 5179 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5180 extern half4 __attribute__((overloadable)) 5181 native_sincos(half4 v, half4* cos); 5182 #endif 5183 5184 /* 5185 * native_sinh: Approximate hyperbolic sine 5186 * 5187 * Returns the approximate hyperbolic sine of a value specified in radians. 5188 * 5189 * See also sinh(). 5190 */ 5191 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5192 extern float __attribute__((const, overloadable)) 5193 native_sinh(float v); 5194 #endif 5195 5196 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5197 extern float2 __attribute__((const, overloadable)) 5198 native_sinh(float2 v); 5199 #endif 5200 5201 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5202 extern float3 __attribute__((const, overloadable)) 5203 native_sinh(float3 v); 5204 #endif 5205 5206 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5207 extern float4 __attribute__((const, overloadable)) 5208 native_sinh(float4 v); 5209 #endif 5210 5211 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5212 extern half __attribute__((const, overloadable)) 5213 native_sinh(half v); 5214 #endif 5215 5216 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5217 extern half2 __attribute__((const, overloadable)) 5218 native_sinh(half2 v); 5219 #endif 5220 5221 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5222 extern half3 __attribute__((const, overloadable)) 5223 native_sinh(half3 v); 5224 #endif 5225 5226 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5227 extern half4 __attribute__((const, overloadable)) 5228 native_sinh(half4 v); 5229 #endif 5230 5231 /* 5232 * native_sinpi: Approximate sine of a number multiplied by pi 5233 * 5234 * Returns the approximate sine of (v * pi), where (v * pi) is measured in radians. 5235 * 5236 * To get the sine of a value measured in degrees, call sinpi(v / 180.f). 5237 * 5238 * See also sinpi(). 5239 */ 5240 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5241 extern float __attribute__((const, overloadable)) 5242 native_sinpi(float v); 5243 #endif 5244 5245 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5246 extern float2 __attribute__((const, overloadable)) 5247 native_sinpi(float2 v); 5248 #endif 5249 5250 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5251 extern float3 __attribute__((const, overloadable)) 5252 native_sinpi(float3 v); 5253 #endif 5254 5255 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5256 extern float4 __attribute__((const, overloadable)) 5257 native_sinpi(float4 v); 5258 #endif 5259 5260 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5261 extern half __attribute__((const, overloadable)) 5262 native_sinpi(half v); 5263 #endif 5264 5265 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5266 extern half2 __attribute__((const, overloadable)) 5267 native_sinpi(half2 v); 5268 #endif 5269 5270 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5271 extern half3 __attribute__((const, overloadable)) 5272 native_sinpi(half3 v); 5273 #endif 5274 5275 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5276 extern half4 __attribute__((const, overloadable)) 5277 native_sinpi(half4 v); 5278 #endif 5279 5280 /* 5281 * native_sqrt: Approximate square root 5282 * 5283 * Returns the approximate sqrt(v). 5284 * 5285 * See also sqrt(), half_sqrt(). 5286 */ 5287 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5288 extern float __attribute__((const, overloadable)) 5289 native_sqrt(float v); 5290 #endif 5291 5292 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5293 extern float2 __attribute__((const, overloadable)) 5294 native_sqrt(float2 v); 5295 #endif 5296 5297 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5298 extern float3 __attribute__((const, overloadable)) 5299 native_sqrt(float3 v); 5300 #endif 5301 5302 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5303 extern float4 __attribute__((const, overloadable)) 5304 native_sqrt(float4 v); 5305 #endif 5306 5307 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5308 extern half __attribute__((const, overloadable)) 5309 native_sqrt(half v); 5310 #endif 5311 5312 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5313 extern half2 __attribute__((const, overloadable)) 5314 native_sqrt(half2 v); 5315 #endif 5316 5317 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5318 extern half3 __attribute__((const, overloadable)) 5319 native_sqrt(half3 v); 5320 #endif 5321 5322 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5323 extern half4 __attribute__((const, overloadable)) 5324 native_sqrt(half4 v); 5325 #endif 5326 5327 /* 5328 * native_tan: Approximate tangent 5329 * 5330 * Returns the approximate tangent of an angle measured in radians. 5331 */ 5332 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5333 extern float __attribute__((const, overloadable)) 5334 native_tan(float v); 5335 #endif 5336 5337 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5338 extern float2 __attribute__((const, overloadable)) 5339 native_tan(float2 v); 5340 #endif 5341 5342 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5343 extern float3 __attribute__((const, overloadable)) 5344 native_tan(float3 v); 5345 #endif 5346 5347 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5348 extern float4 __attribute__((const, overloadable)) 5349 native_tan(float4 v); 5350 #endif 5351 5352 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5353 extern half __attribute__((const, overloadable)) 5354 native_tan(half v); 5355 #endif 5356 5357 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5358 extern half2 __attribute__((const, overloadable)) 5359 native_tan(half2 v); 5360 #endif 5361 5362 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5363 extern half3 __attribute__((const, overloadable)) 5364 native_tan(half3 v); 5365 #endif 5366 5367 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5368 extern half4 __attribute__((const, overloadable)) 5369 native_tan(half4 v); 5370 #endif 5371 5372 /* 5373 * native_tanh: Approximate hyperbolic tangent 5374 * 5375 * Returns the approximate hyperbolic tangent of a value. 5376 * 5377 * See also tanh(). 5378 */ 5379 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5380 extern float __attribute__((const, overloadable)) 5381 native_tanh(float v); 5382 #endif 5383 5384 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5385 extern float2 __attribute__((const, overloadable)) 5386 native_tanh(float2 v); 5387 #endif 5388 5389 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5390 extern float3 __attribute__((const, overloadable)) 5391 native_tanh(float3 v); 5392 #endif 5393 5394 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5395 extern float4 __attribute__((const, overloadable)) 5396 native_tanh(float4 v); 5397 #endif 5398 5399 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5400 extern half __attribute__((const, overloadable)) 5401 native_tanh(half v); 5402 #endif 5403 5404 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5405 extern half2 __attribute__((const, overloadable)) 5406 native_tanh(half2 v); 5407 #endif 5408 5409 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5410 extern half3 __attribute__((const, overloadable)) 5411 native_tanh(half3 v); 5412 #endif 5413 5414 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5415 extern half4 __attribute__((const, overloadable)) 5416 native_tanh(half4 v); 5417 #endif 5418 5419 /* 5420 * native_tanpi: Approximate tangent of a number multiplied by pi 5421 * 5422 * Returns the approximate tangent of (v * pi), where (v * pi) is measured in radians. 5423 * 5424 * To get the tangent of a value measured in degrees, call tanpi(v / 180.f). 5425 * 5426 * See also tanpi(). 5427 */ 5428 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5429 extern float __attribute__((const, overloadable)) 5430 native_tanpi(float v); 5431 #endif 5432 5433 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5434 extern float2 __attribute__((const, overloadable)) 5435 native_tanpi(float2 v); 5436 #endif 5437 5438 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5439 extern float3 __attribute__((const, overloadable)) 5440 native_tanpi(float3 v); 5441 #endif 5442 5443 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 5444 extern float4 __attribute__((const, overloadable)) 5445 native_tanpi(float4 v); 5446 #endif 5447 5448 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5449 extern half __attribute__((const, overloadable)) 5450 native_tanpi(half v); 5451 #endif 5452 5453 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5454 extern half2 __attribute__((const, overloadable)) 5455 native_tanpi(half2 v); 5456 #endif 5457 5458 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5459 extern half3 __attribute__((const, overloadable)) 5460 native_tanpi(half3 v); 5461 #endif 5462 5463 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5464 extern half4 __attribute__((const, overloadable)) 5465 native_tanpi(half4 v); 5466 #endif 5467 5468 /* 5469 * nextafter: Next floating point number 5470 * 5471 * Returns the next representable floating point number from v towards target. 5472 * 5473 * In rs_fp_relaxed mode, a denormalized input value may not yield the next denormalized 5474 * value, as support of denormalized values is optional in relaxed mode. 5475 */ 5476 extern float __attribute__((const, overloadable)) 5477 nextafter(float v, float target); 5478 5479 extern float2 __attribute__((const, overloadable)) 5480 nextafter(float2 v, float2 target); 5481 5482 extern float3 __attribute__((const, overloadable)) 5483 nextafter(float3 v, float3 target); 5484 5485 extern float4 __attribute__((const, overloadable)) 5486 nextafter(float4 v, float4 target); 5487 5488 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5489 extern half __attribute__((const, overloadable)) 5490 nextafter(half v, half target); 5491 #endif 5492 5493 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5494 extern half2 __attribute__((const, overloadable)) 5495 nextafter(half2 v, half2 target); 5496 #endif 5497 5498 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5499 extern half3 __attribute__((const, overloadable)) 5500 nextafter(half3 v, half3 target); 5501 #endif 5502 5503 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5504 extern half4 __attribute__((const, overloadable)) 5505 nextafter(half4 v, half4 target); 5506 #endif 5507 5508 /* 5509 * pow: Base raised to an exponent 5510 * 5511 * Returns base raised to the power exponent, i.e. base ^ exponent. 5512 * 5513 * pown() and powr() are similar. pown() takes an integer exponent. powr() assumes the 5514 * base to be non-negative. 5515 */ 5516 extern float __attribute__((const, overloadable)) 5517 pow(float base, float exponent); 5518 5519 extern float2 __attribute__((const, overloadable)) 5520 pow(float2 base, float2 exponent); 5521 5522 extern float3 __attribute__((const, overloadable)) 5523 pow(float3 base, float3 exponent); 5524 5525 extern float4 __attribute__((const, overloadable)) 5526 pow(float4 base, float4 exponent); 5527 5528 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5529 extern half __attribute__((const, overloadable)) 5530 pow(half base, half exponent); 5531 #endif 5532 5533 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5534 extern half2 __attribute__((const, overloadable)) 5535 pow(half2 base, half2 exponent); 5536 #endif 5537 5538 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5539 extern half3 __attribute__((const, overloadable)) 5540 pow(half3 base, half3 exponent); 5541 #endif 5542 5543 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5544 extern half4 __attribute__((const, overloadable)) 5545 pow(half4 base, half4 exponent); 5546 #endif 5547 5548 /* 5549 * pown: Base raised to an integer exponent 5550 * 5551 * Returns base raised to the power exponent, i.e. base ^ exponent. 5552 * 5553 * pow() and powr() are similar. The both take a float exponent. powr() also assumes the 5554 * base to be non-negative. 5555 */ 5556 extern float __attribute__((const, overloadable)) 5557 pown(float base, int exponent); 5558 5559 extern float2 __attribute__((const, overloadable)) 5560 pown(float2 base, int2 exponent); 5561 5562 extern float3 __attribute__((const, overloadable)) 5563 pown(float3 base, int3 exponent); 5564 5565 extern float4 __attribute__((const, overloadable)) 5566 pown(float4 base, int4 exponent); 5567 5568 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5569 extern half __attribute__((const, overloadable)) 5570 pown(half base, int exponent); 5571 #endif 5572 5573 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5574 extern half2 __attribute__((const, overloadable)) 5575 pown(half2 base, int2 exponent); 5576 #endif 5577 5578 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5579 extern half3 __attribute__((const, overloadable)) 5580 pown(half3 base, int3 exponent); 5581 #endif 5582 5583 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5584 extern half4 __attribute__((const, overloadable)) 5585 pown(half4 base, int4 exponent); 5586 #endif 5587 5588 /* 5589 * powr: Positive base raised to an exponent 5590 * 5591 * Returns base raised to the power exponent, i.e. base ^ exponent. base must be >= 0. 5592 * 5593 * pow() and pown() are similar. They both make no assumptions about the base. 5594 * pow() takes a float exponent while pown() take an integer. 5595 * 5596 * See also native_powr(). 5597 */ 5598 extern float __attribute__((const, overloadable)) 5599 powr(float base, float exponent); 5600 5601 extern float2 __attribute__((const, overloadable)) 5602 powr(float2 base, float2 exponent); 5603 5604 extern float3 __attribute__((const, overloadable)) 5605 powr(float3 base, float3 exponent); 5606 5607 extern float4 __attribute__((const, overloadable)) 5608 powr(float4 base, float4 exponent); 5609 5610 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5611 extern half __attribute__((const, overloadable)) 5612 powr(half base, half exponent); 5613 #endif 5614 5615 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5616 extern half2 __attribute__((const, overloadable)) 5617 powr(half2 base, half2 exponent); 5618 #endif 5619 5620 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5621 extern half3 __attribute__((const, overloadable)) 5622 powr(half3 base, half3 exponent); 5623 #endif 5624 5625 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5626 extern half4 __attribute__((const, overloadable)) 5627 powr(half4 base, half4 exponent); 5628 #endif 5629 5630 /* 5631 * radians: Converts degrees into radians 5632 * 5633 * Converts from degrees to radians. 5634 */ 5635 extern float __attribute__((const, overloadable)) 5636 radians(float v); 5637 5638 extern float2 __attribute__((const, overloadable)) 5639 radians(float2 v); 5640 5641 extern float3 __attribute__((const, overloadable)) 5642 radians(float3 v); 5643 5644 extern float4 __attribute__((const, overloadable)) 5645 radians(float4 v); 5646 5647 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5648 extern half __attribute__((const, overloadable)) 5649 radians(half v); 5650 #endif 5651 5652 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5653 extern half2 __attribute__((const, overloadable)) 5654 radians(half2 v); 5655 #endif 5656 5657 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5658 extern half3 __attribute__((const, overloadable)) 5659 radians(half3 v); 5660 #endif 5661 5662 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5663 extern half4 __attribute__((const, overloadable)) 5664 radians(half4 v); 5665 #endif 5666 5667 /* 5668 * remainder: Remainder of a division 5669 * 5670 * Returns the remainder of (numerator / denominator), where the quotient is rounded towards 5671 * the nearest integer. 5672 * 5673 * The function fmod() is similar but rounds toward the closest interger. 5674 * For example, fmod(-3.8f, 2.f) returns -1.8f (-3.8f - -1.f * 2.f) 5675 * while remainder(-3.8f, 2.f) returns 0.2f (-3.8f - -2.f * 2.f). 5676 */ 5677 extern float __attribute__((const, overloadable)) 5678 remainder(float numerator, float denominator); 5679 5680 extern float2 __attribute__((const, overloadable)) 5681 remainder(float2 numerator, float2 denominator); 5682 5683 extern float3 __attribute__((const, overloadable)) 5684 remainder(float3 numerator, float3 denominator); 5685 5686 extern float4 __attribute__((const, overloadable)) 5687 remainder(float4 numerator, float4 denominator); 5688 5689 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5690 extern half __attribute__((const, overloadable)) 5691 remainder(half numerator, half denominator); 5692 #endif 5693 5694 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5695 extern half2 __attribute__((const, overloadable)) 5696 remainder(half2 numerator, half2 denominator); 5697 #endif 5698 5699 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5700 extern half3 __attribute__((const, overloadable)) 5701 remainder(half3 numerator, half3 denominator); 5702 #endif 5703 5704 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5705 extern half4 __attribute__((const, overloadable)) 5706 remainder(half4 numerator, half4 denominator); 5707 #endif 5708 5709 /* 5710 * remquo: Remainder and quotient of a division 5711 * 5712 * Returns the quotient and the remainder of (numerator / denominator). 5713 * 5714 * Only the sign and lowest three bits of the quotient are guaranteed to be accurate. 5715 * 5716 * This function is useful for implementing periodic functions. The low three bits of the 5717 * quotient gives the quadrant and the remainder the distance within the quadrant. 5718 * For example, an implementation of sin(x) could call remquo(x, PI / 2.f, &quadrant) 5719 * to reduce very large value of x to something within a limited range. 5720 * 5721 * Example: remquo(-23.5f, 8.f, ") sets the lowest three bits of quot to 3 5722 * and the sign negative. It returns 0.5f. 5723 * 5724 * Parameters: 5725 * numerator: Numerator. 5726 * denominator: Denominator. 5727 * quotient: *quotient will be set to the integer quotient. 5728 * 5729 * Returns: Remainder, precise only for the low three bits. 5730 */ 5731 extern float __attribute__((overloadable)) 5732 remquo(float numerator, float denominator, int* quotient); 5733 5734 extern float2 __attribute__((overloadable)) 5735 remquo(float2 numerator, float2 denominator, int2* quotient); 5736 5737 extern float3 __attribute__((overloadable)) 5738 remquo(float3 numerator, float3 denominator, int3* quotient); 5739 5740 extern float4 __attribute__((overloadable)) 5741 remquo(float4 numerator, float4 denominator, int4* quotient); 5742 5743 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5744 extern half __attribute__((overloadable)) 5745 remquo(half numerator, half denominator, int* quotient); 5746 #endif 5747 5748 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5749 extern half2 __attribute__((overloadable)) 5750 remquo(half2 numerator, half2 denominator, int2* quotient); 5751 #endif 5752 5753 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5754 extern half3 __attribute__((overloadable)) 5755 remquo(half3 numerator, half3 denominator, int3* quotient); 5756 #endif 5757 5758 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5759 extern half4 __attribute__((overloadable)) 5760 remquo(half4 numerator, half4 denominator, int4* quotient); 5761 #endif 5762 5763 /* 5764 * rint: Round to even 5765 * 5766 * Rounds to the nearest integral value. 5767 * 5768 * rint() rounds half values to even. For example, rint(0.5f) returns 0.f and 5769 * rint(1.5f) returns 2.f. Similarly, rint(-0.5f) returns -0.f and 5770 * rint(-1.5f) returns -2.f. 5771 * 5772 * round() is similar but rounds away from zero. trunc() truncates the decimal fraction. 5773 */ 5774 extern float __attribute__((const, overloadable)) 5775 rint(float v); 5776 5777 extern float2 __attribute__((const, overloadable)) 5778 rint(float2 v); 5779 5780 extern float3 __attribute__((const, overloadable)) 5781 rint(float3 v); 5782 5783 extern float4 __attribute__((const, overloadable)) 5784 rint(float4 v); 5785 5786 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5787 extern half __attribute__((const, overloadable)) 5788 rint(half v); 5789 #endif 5790 5791 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5792 extern half2 __attribute__((const, overloadable)) 5793 rint(half2 v); 5794 #endif 5795 5796 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5797 extern half3 __attribute__((const, overloadable)) 5798 rint(half3 v); 5799 #endif 5800 5801 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5802 extern half4 __attribute__((const, overloadable)) 5803 rint(half4 v); 5804 #endif 5805 5806 /* 5807 * rootn: Nth root 5808 * 5809 * Compute the Nth root of a value. 5810 * 5811 * See also native_rootn(). 5812 */ 5813 extern float __attribute__((const, overloadable)) 5814 rootn(float v, int n); 5815 5816 extern float2 __attribute__((const, overloadable)) 5817 rootn(float2 v, int2 n); 5818 5819 extern float3 __attribute__((const, overloadable)) 5820 rootn(float3 v, int3 n); 5821 5822 extern float4 __attribute__((const, overloadable)) 5823 rootn(float4 v, int4 n); 5824 5825 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5826 extern half __attribute__((const, overloadable)) 5827 rootn(half v, int n); 5828 #endif 5829 5830 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5831 extern half2 __attribute__((const, overloadable)) 5832 rootn(half2 v, int2 n); 5833 #endif 5834 5835 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5836 extern half3 __attribute__((const, overloadable)) 5837 rootn(half3 v, int3 n); 5838 #endif 5839 5840 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5841 extern half4 __attribute__((const, overloadable)) 5842 rootn(half4 v, int4 n); 5843 #endif 5844 5845 /* 5846 * round: Round away from zero 5847 * 5848 * Round to the nearest integral value. 5849 * 5850 * round() rounds half values away from zero. For example, round(0.5f) returns 1.f 5851 * and round(1.5f) returns 2.f. Similarly, round(-0.5f) returns -1.f 5852 * and round(-1.5f) returns -2.f. 5853 * 5854 * rint() is similar but rounds half values toward even. trunc() truncates the decimal fraction. 5855 */ 5856 extern float __attribute__((const, overloadable)) 5857 round(float v); 5858 5859 extern float2 __attribute__((const, overloadable)) 5860 round(float2 v); 5861 5862 extern float3 __attribute__((const, overloadable)) 5863 round(float3 v); 5864 5865 extern float4 __attribute__((const, overloadable)) 5866 round(float4 v); 5867 5868 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5869 extern half __attribute__((const, overloadable)) 5870 round(half v); 5871 #endif 5872 5873 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5874 extern half2 __attribute__((const, overloadable)) 5875 round(half2 v); 5876 #endif 5877 5878 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5879 extern half3 __attribute__((const, overloadable)) 5880 round(half3 v); 5881 #endif 5882 5883 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5884 extern half4 __attribute__((const, overloadable)) 5885 round(half4 v); 5886 #endif 5887 5888 /* 5889 * rsqrt: Reciprocal of a square root 5890 * 5891 * Returns (1 / sqrt(v)). 5892 * 5893 * See also half_rsqrt(), native_rsqrt(). 5894 */ 5895 extern float __attribute__((const, overloadable)) 5896 rsqrt(float v); 5897 5898 extern float2 __attribute__((const, overloadable)) 5899 rsqrt(float2 v); 5900 5901 extern float3 __attribute__((const, overloadable)) 5902 rsqrt(float3 v); 5903 5904 extern float4 __attribute__((const, overloadable)) 5905 rsqrt(float4 v); 5906 5907 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5908 extern half __attribute__((const, overloadable)) 5909 rsqrt(half v); 5910 #endif 5911 5912 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5913 extern half2 __attribute__((const, overloadable)) 5914 rsqrt(half2 v); 5915 #endif 5916 5917 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5918 extern half3 __attribute__((const, overloadable)) 5919 rsqrt(half3 v); 5920 #endif 5921 5922 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5923 extern half4 __attribute__((const, overloadable)) 5924 rsqrt(half4 v); 5925 #endif 5926 5927 /* 5928 * sign: Sign of a value 5929 * 5930 * Returns the sign of a value. 5931 * 5932 * if (v < 0) return -1.f; 5933 * else if (v > 0) return 1.f; 5934 * else return 0.f; 5935 */ 5936 extern float __attribute__((const, overloadable)) 5937 sign(float v); 5938 5939 extern float2 __attribute__((const, overloadable)) 5940 sign(float2 v); 5941 5942 extern float3 __attribute__((const, overloadable)) 5943 sign(float3 v); 5944 5945 extern float4 __attribute__((const, overloadable)) 5946 sign(float4 v); 5947 5948 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5949 extern half __attribute__((const, overloadable)) 5950 sign(half v); 5951 #endif 5952 5953 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5954 extern half2 __attribute__((const, overloadable)) 5955 sign(half2 v); 5956 #endif 5957 5958 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5959 extern half3 __attribute__((const, overloadable)) 5960 sign(half3 v); 5961 #endif 5962 5963 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5964 extern half4 __attribute__((const, overloadable)) 5965 sign(half4 v); 5966 #endif 5967 5968 /* 5969 * sin: Sine 5970 * 5971 * Returns the sine of an angle measured in radians. 5972 * 5973 * See also native_sin(). 5974 */ 5975 extern float __attribute__((const, overloadable)) 5976 sin(float v); 5977 5978 extern float2 __attribute__((const, overloadable)) 5979 sin(float2 v); 5980 5981 extern float3 __attribute__((const, overloadable)) 5982 sin(float3 v); 5983 5984 extern float4 __attribute__((const, overloadable)) 5985 sin(float4 v); 5986 5987 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5988 extern half __attribute__((const, overloadable)) 5989 sin(half v); 5990 #endif 5991 5992 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5993 extern half2 __attribute__((const, overloadable)) 5994 sin(half2 v); 5995 #endif 5996 5997 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 5998 extern half3 __attribute__((const, overloadable)) 5999 sin(half3 v); 6000 #endif 6001 6002 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6003 extern half4 __attribute__((const, overloadable)) 6004 sin(half4 v); 6005 #endif 6006 6007 /* 6008 * sincos: Sine and cosine 6009 * 6010 * Returns the sine and cosine of a value. 6011 * 6012 * See also native_sincos(). 6013 * 6014 * Parameters: 6015 * v: Incoming value in radians. 6016 * cos: *cos will be set to the cosine value. 6017 * 6018 * Returns: Sine of v. 6019 */ 6020 extern float __attribute__((overloadable)) 6021 sincos(float v, float* cos); 6022 6023 extern float2 __attribute__((overloadable)) 6024 sincos(float2 v, float2* cos); 6025 6026 extern float3 __attribute__((overloadable)) 6027 sincos(float3 v, float3* cos); 6028 6029 extern float4 __attribute__((overloadable)) 6030 sincos(float4 v, float4* cos); 6031 6032 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6033 extern half __attribute__((overloadable)) 6034 sincos(half v, half* cos); 6035 #endif 6036 6037 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6038 extern half2 __attribute__((overloadable)) 6039 sincos(half2 v, half2* cos); 6040 #endif 6041 6042 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6043 extern half3 __attribute__((overloadable)) 6044 sincos(half3 v, half3* cos); 6045 #endif 6046 6047 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6048 extern half4 __attribute__((overloadable)) 6049 sincos(half4 v, half4* cos); 6050 #endif 6051 6052 /* 6053 * sinh: Hyperbolic sine 6054 * 6055 * Returns the hyperbolic sine of v, where v is measured in radians. 6056 * 6057 * See also native_sinh(). 6058 */ 6059 extern float __attribute__((const, overloadable)) 6060 sinh(float v); 6061 6062 extern float2 __attribute__((const, overloadable)) 6063 sinh(float2 v); 6064 6065 extern float3 __attribute__((const, overloadable)) 6066 sinh(float3 v); 6067 6068 extern float4 __attribute__((const, overloadable)) 6069 sinh(float4 v); 6070 6071 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6072 extern half __attribute__((const, overloadable)) 6073 sinh(half v); 6074 #endif 6075 6076 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6077 extern half2 __attribute__((const, overloadable)) 6078 sinh(half2 v); 6079 #endif 6080 6081 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6082 extern half3 __attribute__((const, overloadable)) 6083 sinh(half3 v); 6084 #endif 6085 6086 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6087 extern half4 __attribute__((const, overloadable)) 6088 sinh(half4 v); 6089 #endif 6090 6091 /* 6092 * sinpi: Sine of a number multiplied by pi 6093 * 6094 * Returns the sine of (v * pi), where (v * pi) is measured in radians. 6095 * 6096 * To get the sine of a value measured in degrees, call sinpi(v / 180.f). 6097 * 6098 * See also native_sinpi(). 6099 */ 6100 extern float __attribute__((const, overloadable)) 6101 sinpi(float v); 6102 6103 extern float2 __attribute__((const, overloadable)) 6104 sinpi(float2 v); 6105 6106 extern float3 __attribute__((const, overloadable)) 6107 sinpi(float3 v); 6108 6109 extern float4 __attribute__((const, overloadable)) 6110 sinpi(float4 v); 6111 6112 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6113 extern half __attribute__((const, overloadable)) 6114 sinpi(half v); 6115 #endif 6116 6117 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6118 extern half2 __attribute__((const, overloadable)) 6119 sinpi(half2 v); 6120 #endif 6121 6122 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6123 extern half3 __attribute__((const, overloadable)) 6124 sinpi(half3 v); 6125 #endif 6126 6127 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6128 extern half4 __attribute__((const, overloadable)) 6129 sinpi(half4 v); 6130 #endif 6131 6132 /* 6133 * sqrt: Square root 6134 * 6135 * Returns the square root of a value. 6136 * 6137 * See also half_sqrt(), native_sqrt(). 6138 */ 6139 extern float __attribute__((const, overloadable)) 6140 sqrt(float v); 6141 6142 extern float2 __attribute__((const, overloadable)) 6143 sqrt(float2 v); 6144 6145 extern float3 __attribute__((const, overloadable)) 6146 sqrt(float3 v); 6147 6148 extern float4 __attribute__((const, overloadable)) 6149 sqrt(float4 v); 6150 6151 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6152 extern half __attribute__((const, overloadable)) 6153 sqrt(half v); 6154 #endif 6155 6156 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6157 extern half2 __attribute__((const, overloadable)) 6158 sqrt(half2 v); 6159 #endif 6160 6161 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6162 extern half3 __attribute__((const, overloadable)) 6163 sqrt(half3 v); 6164 #endif 6165 6166 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6167 extern half4 __attribute__((const, overloadable)) 6168 sqrt(half4 v); 6169 #endif 6170 6171 /* 6172 * step: 0 if less than a value, 0 otherwise 6173 * 6174 * Returns 0.f if v < edge, 1.f otherwise. 6175 * 6176 * This can be useful to create conditional computations without using loops and branching 6177 * instructions. For example, instead of computing (a[i] < b[i]) ? 0.f : atan2(a[i], b[i]) 6178 * for the corresponding elements of a vector, you could instead use step(a, b) * atan2(a, b). 6179 */ 6180 extern float __attribute__((const, overloadable)) 6181 step(float edge, float v); 6182 6183 extern float2 __attribute__((const, overloadable)) 6184 step(float2 edge, float2 v); 6185 6186 extern float3 __attribute__((const, overloadable)) 6187 step(float3 edge, float3 v); 6188 6189 extern float4 __attribute__((const, overloadable)) 6190 step(float4 edge, float4 v); 6191 6192 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6193 extern half __attribute__((const, overloadable)) 6194 step(half edge, half v); 6195 #endif 6196 6197 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6198 extern half2 __attribute__((const, overloadable)) 6199 step(half2 edge, half2 v); 6200 #endif 6201 6202 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6203 extern half3 __attribute__((const, overloadable)) 6204 step(half3 edge, half3 v); 6205 #endif 6206 6207 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6208 extern half4 __attribute__((const, overloadable)) 6209 step(half4 edge, half4 v); 6210 #endif 6211 6212 extern float2 __attribute__((const, overloadable)) 6213 step(float2 edge, float v); 6214 6215 extern float3 __attribute__((const, overloadable)) 6216 step(float3 edge, float v); 6217 6218 extern float4 __attribute__((const, overloadable)) 6219 step(float4 edge, float v); 6220 6221 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6222 extern half2 __attribute__((const, overloadable)) 6223 step(half2 edge, half v); 6224 #endif 6225 6226 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6227 extern half3 __attribute__((const, overloadable)) 6228 step(half3 edge, half v); 6229 #endif 6230 6231 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6232 extern half4 __attribute__((const, overloadable)) 6233 step(half4 edge, half v); 6234 #endif 6235 6236 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 6237 extern float2 __attribute__((const, overloadable)) 6238 step(float edge, float2 v); 6239 #endif 6240 6241 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 6242 extern float3 __attribute__((const, overloadable)) 6243 step(float edge, float3 v); 6244 #endif 6245 6246 #if (defined(RS_VERSION) && (RS_VERSION >= 21)) 6247 extern float4 __attribute__((const, overloadable)) 6248 step(float edge, float4 v); 6249 #endif 6250 6251 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6252 extern half2 __attribute__((const, overloadable)) 6253 step(half edge, half2 v); 6254 #endif 6255 6256 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6257 extern half3 __attribute__((const, overloadable)) 6258 step(half edge, half3 v); 6259 #endif 6260 6261 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6262 extern half4 __attribute__((const, overloadable)) 6263 step(half edge, half4 v); 6264 #endif 6265 6266 /* 6267 * tan: Tangent 6268 * 6269 * Returns the tangent of an angle measured in radians. 6270 * 6271 * See also native_tan(). 6272 */ 6273 extern float __attribute__((const, overloadable)) 6274 tan(float v); 6275 6276 extern float2 __attribute__((const, overloadable)) 6277 tan(float2 v); 6278 6279 extern float3 __attribute__((const, overloadable)) 6280 tan(float3 v); 6281 6282 extern float4 __attribute__((const, overloadable)) 6283 tan(float4 v); 6284 6285 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6286 extern half __attribute__((const, overloadable)) 6287 tan(half v); 6288 #endif 6289 6290 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6291 extern half2 __attribute__((const, overloadable)) 6292 tan(half2 v); 6293 #endif 6294 6295 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6296 extern half3 __attribute__((const, overloadable)) 6297 tan(half3 v); 6298 #endif 6299 6300 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6301 extern half4 __attribute__((const, overloadable)) 6302 tan(half4 v); 6303 #endif 6304 6305 /* 6306 * tanh: Hyperbolic tangent 6307 * 6308 * Returns the hyperbolic tangent of a value. 6309 * 6310 * See also native_tanh(). 6311 */ 6312 extern float __attribute__((const, overloadable)) 6313 tanh(float v); 6314 6315 extern float2 __attribute__((const, overloadable)) 6316 tanh(float2 v); 6317 6318 extern float3 __attribute__((const, overloadable)) 6319 tanh(float3 v); 6320 6321 extern float4 __attribute__((const, overloadable)) 6322 tanh(float4 v); 6323 6324 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6325 extern half __attribute__((const, overloadable)) 6326 tanh(half v); 6327 #endif 6328 6329 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6330 extern half2 __attribute__((const, overloadable)) 6331 tanh(half2 v); 6332 #endif 6333 6334 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6335 extern half3 __attribute__((const, overloadable)) 6336 tanh(half3 v); 6337 #endif 6338 6339 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6340 extern half4 __attribute__((const, overloadable)) 6341 tanh(half4 v); 6342 #endif 6343 6344 /* 6345 * tanpi: Tangent of a number multiplied by pi 6346 * 6347 * Returns the tangent of (v * pi), where (v * pi) is measured in radians. 6348 * 6349 * To get the tangent of a value measured in degrees, call tanpi(v / 180.f). 6350 * 6351 * See also native_tanpi(). 6352 */ 6353 extern float __attribute__((const, overloadable)) 6354 tanpi(float v); 6355 6356 extern float2 __attribute__((const, overloadable)) 6357 tanpi(float2 v); 6358 6359 extern float3 __attribute__((const, overloadable)) 6360 tanpi(float3 v); 6361 6362 extern float4 __attribute__((const, overloadable)) 6363 tanpi(float4 v); 6364 6365 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6366 extern half __attribute__((const, overloadable)) 6367 tanpi(half v); 6368 #endif 6369 6370 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6371 extern half2 __attribute__((const, overloadable)) 6372 tanpi(half2 v); 6373 #endif 6374 6375 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6376 extern half3 __attribute__((const, overloadable)) 6377 tanpi(half3 v); 6378 #endif 6379 6380 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6381 extern half4 __attribute__((const, overloadable)) 6382 tanpi(half4 v); 6383 #endif 6384 6385 /* 6386 * tgamma: Gamma function 6387 * 6388 * Returns the gamma function of a value. 6389 * 6390 * See also lgamma(). 6391 */ 6392 extern float __attribute__((const, overloadable)) 6393 tgamma(float v); 6394 6395 extern float2 __attribute__((const, overloadable)) 6396 tgamma(float2 v); 6397 6398 extern float3 __attribute__((const, overloadable)) 6399 tgamma(float3 v); 6400 6401 extern float4 __attribute__((const, overloadable)) 6402 tgamma(float4 v); 6403 6404 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6405 extern half __attribute__((const, overloadable)) 6406 tgamma(half v); 6407 #endif 6408 6409 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6410 extern half2 __attribute__((const, overloadable)) 6411 tgamma(half2 v); 6412 #endif 6413 6414 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6415 extern half3 __attribute__((const, overloadable)) 6416 tgamma(half3 v); 6417 #endif 6418 6419 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6420 extern half4 __attribute__((const, overloadable)) 6421 tgamma(half4 v); 6422 #endif 6423 6424 /* 6425 * trunc: Truncates a floating point 6426 * 6427 * Rounds to integral using truncation. 6428 * 6429 * For example, trunc(1.7f) returns 1.f and trunc(-1.7f) returns -1.f. 6430 * 6431 * See rint() and round() for other rounding options. 6432 */ 6433 extern float __attribute__((const, overloadable)) 6434 trunc(float v); 6435 6436 extern float2 __attribute__((const, overloadable)) 6437 trunc(float2 v); 6438 6439 extern float3 __attribute__((const, overloadable)) 6440 trunc(float3 v); 6441 6442 extern float4 __attribute__((const, overloadable)) 6443 trunc(float4 v); 6444 6445 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6446 extern half __attribute__((const, overloadable)) 6447 trunc(half v); 6448 #endif 6449 6450 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6451 extern half2 __attribute__((const, overloadable)) 6452 trunc(half2 v); 6453 #endif 6454 6455 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6456 extern half3 __attribute__((const, overloadable)) 6457 trunc(half3 v); 6458 #endif 6459 6460 #if (defined(RS_VERSION) && (RS_VERSION >= 24)) 6461 extern half4 __attribute__((const, overloadable)) 6462 trunc(half4 v); 6463 #endif 6464 6465 /* 6466 * rsClamp: Restrain a value to a range 6467 * 6468 * DEPRECATED. Do not use. 6469 * 6470 * Clamp a value between low and high. 6471 * 6472 * Parameters: 6473 * amount: Value to clamp. 6474 * low: Lower bound. 6475 * high: Upper bound. 6476 */ 6477 extern char __attribute__((const, overloadable 6478 #if (defined(RS_VERSION) && (RS_VERSION >= 22)) 6479 , deprecated("Use clamp() instead.") 6480 #endif 6481 )) 6482 rsClamp(char amount, char low, char high); 6483 6484 extern uchar __attribute__((const, overloadable 6485 #if (defined(RS_VERSION) && (RS_VERSION >= 22)) 6486 , deprecated("Use clamp() instead.") 6487 #endif 6488 )) 6489 rsClamp(uchar amount, uchar low, uchar high); 6490 6491 extern short __attribute__((const, overloadable 6492 #if (defined(RS_VERSION) && (RS_VERSION >= 22)) 6493 , deprecated("Use clamp() instead.") 6494 #endif 6495 )) 6496 rsClamp(short amount, short low, short high); 6497 6498 extern ushort __attribute__((const, overloadable 6499 #if (defined(RS_VERSION) && (RS_VERSION >= 22)) 6500 , deprecated("Use clamp() instead.") 6501 #endif 6502 )) 6503 rsClamp(ushort amount, ushort low, ushort high); 6504 6505 extern int __attribute__((const, overloadable 6506 #if (defined(RS_VERSION) && (RS_VERSION >= 22)) 6507 , deprecated("Use clamp() instead.") 6508 #endif 6509 )) 6510 rsClamp(int amount, int low, int high); 6511 6512 extern uint __attribute__((const, overloadable 6513 #if (defined(RS_VERSION) && (RS_VERSION >= 22)) 6514 , deprecated("Use clamp() instead.") 6515 #endif 6516 )) 6517 rsClamp(uint amount, uint low, uint high); 6518 6519 /* 6520 * rsFrac: Returns the fractional part of a float 6521 * 6522 * DEPRECATED. Do not use. 6523 * 6524 * Returns the fractional part of a float 6525 */ 6526 extern float __attribute__((const, overloadable 6527 #if (defined(RS_VERSION) && (RS_VERSION >= 22)) 6528 , deprecated("Use fract() instead.") 6529 #endif 6530 )) 6531 rsFrac(float v); 6532 6533 /* 6534 * rsRand: Pseudo-random number 6535 * 6536 * Return a random value between 0 (or min_value) and max_malue. 6537 */ 6538 extern int __attribute__((overloadable)) 6539 rsRand(int max_value); 6540 6541 extern int __attribute__((overloadable)) 6542 rsRand(int min_value, int max_value); 6543 6544 extern float __attribute__((overloadable)) 6545 rsRand(float max_value); 6546 6547 extern float __attribute__((overloadable)) 6548 rsRand(float min_value, float max_value); 6549 6550 #endif // RENDERSCRIPT_RS_MATH_RSH 6551