18# include <hip/hip_vector_types.h>
21#if !defined(__KERNEL_METAL__)
35# define M_PI_F (3.1415926535897932f)
38# define M_PI_2_F (1.5707963267948966f)
41# define M_PI_4_F (0.7853981633974830f)
44# define M_1_PI_F (0.3183098861837067f)
47# define M_2_PI_F (0.6366197723675813f)
50# define M_1_2PI_F (0.1591549430918953f)
53# define M_1_4PI_F (0.0795774715459476f)
56# define M_SQRT_PI_8_F (0.6266570686577501f)
59# define M_LN_2PI_F (1.8378770664093454f)
64# define M_2PI_F (6.2831853071795864f)
67# define M_4PI_F (12.566370614359172f)
70# define M_PI_4F 0.78539816339744830962f
75# define M_SQRT2_F (1.4142135623730950f)
78# define M_CBRT2_F 1.2599210498948732f
81# define M_SQRT1_2F 0.70710678118654752440f
84# define M_SQRT3_F (1.7320508075688772f)
87# define M_LN2_F (0.6931471805599453f)
90# define M_LN10_F (2.3025850929940457f)
95#if !defined(__HIP__) && !defined(__KERNEL_ONEAPI__)
99 return (a >
b) ? a :
b;
104 return (a <
b) ? a :
b;
110#if !defined(__KERNEL_GPU__) || defined(__KERNEL_ONEAPI__)
111# ifndef __KERNEL_ONEAPI__
116# define isfinite(x) sycl::isfinite((x))
117# define isnan(x) sycl::isnan((x))
122 return (x > 0) ?
x : -
x;
127 return (a >
b) ? a :
b;
132 return (a <
b) ? a :
b;
137 return (a >
b) ? a :
b;
142 return (a <
b) ? a :
b;
147 return (a >
b) ? a :
b;
152 return (a <
b) ? a :
b;
165 return (a >
b) ? a :
b;
171 return (a <
b) ? a :
b;
176 return (a >
b) ? a :
b;
181 return (a <
b) ? a :
b;
186 return (a >
b) ? a :
b;
191 return (a <
b) ? a :
b;
221#if !defined(__KERNEL_METAL__) && !defined(__KERNEL_ONEAPI__)
298# ifdef __KERNEL_SSE__
299 return int4(_mm_castps_si128(f.m128));
308# ifdef __KERNEL_SSE__
309 return float4(_mm_castsi128_ps(i.m128));
317#if defined(__KERNEL_METAL__)
345 return (a << 16) |
b;
362 return (x << 1) > 0xff000000u;
369 return (f == f) && (x == 0 || x == (1u << 31) || (f != 2.0f * f)) && !((x << 1) > 0xff000000u);
378#if !defined(__KERNEL_METAL__)
381 return min(
max(a, mn), mx);
386 return min(
max(a, mn), mx);
391 return a + t * (
b - a);
400 else if (x >= edge1) {
404 float t = (x - edge0) / (edge1 - edge0);
405 result = (3.0f - 2.0f * t) * (t * t);
412#if defined(__KERNEL_CUDA__)
415 return __saturatef(a);
417#elif !defined(__KERNEL_METAL__)
420 return clamp(a, 0.0f, 1.0f);
454 float range = max -
min;
455 return (range != 0.0f) ? value - (range *
floorf((value -
min) / range)) :
min;
460 return (
b != 0.0f) ?
fabsf(
fractf((a -
b) / (
b * 2.0f)) *
b * 2.0f -
b) : 0.0f;
467 return fminf(a,
b) - h * h * h * k * (1.0f / 6.0f);
476 return (f < 0.0f) ? -1.0f : 1.0f;
494 return (x == 0.0f && y == 0.0f) ? 0.0f :
atan2f(y, x);
517 return (3.0f * ff - 2.0f * ff * f);
522 return (x % m + m) % m;
552 return (x - a) / (
b - a);
559 (((d + 3.0f * (
b - c) - a) * x + (2.0f * a - 5.0f *
b + 4.0f * c - d)) * x +
598 if (
fabsf(
N.y) >= 0.999f) {
603 if (
fabsf(
N.z) >= 0.999f) {
610 if (
N.x !=
N.y ||
N.x !=
N.z)
647 x = (
b.x != 0.0f) ? a.
x /
b.x : 0.0f;
648 y = (
b.y != 0.0f) ? a.y /
b.y : 0.0f;
649 z = (
b.z != 0.0f) ? a.z /
b.z : 0.0f;
657 else if (
b.z == 0.0f) {
665 else if (
b.y == 0.0f) {
674 else if (
b.z == 0.0f) {
685 float costheta =
cosf(angle);
686 float sintheta =
sinf(angle);
689 r.
x = ((costheta + (1 - costheta) * axis.x * axis.x) * p.
x) +
690 (((1 - costheta) * axis.x * axis.y - axis.z * sintheta) * p.
y) +
691 (((1 - costheta) * axis.x * axis.z + axis.y * sintheta) * p.
z);
693 r.
y = (((1 - costheta) * axis.x * axis.y + axis.z * sintheta) * p.
x) +
694 ((costheta + (1 - costheta) * axis.y * axis.y) * p.
y) +
695 (((1 - costheta) * axis.y * axis.z - axis.x * sintheta) * p.
z);
697 r.
z = (((1 - costheta) * axis.x * axis.z - axis.y * sintheta) * p.
x) +
698 (((1 - costheta) * axis.y * axis.z + axis.x * sintheta) * p.
y) +
699 ((costheta + (1 - costheta) * axis.z * axis.z) * p.
z);
713#if defined(__KERNEL_METAL__)
714 return (f > 0.0f) ? rsqrt(f) : 0.0f;
716 return (f > 0.0f) ? 1.0f /
sqrtf(f) : 0.0f;
738 if (
fmodf(-y, 2.0f) == 0.0f)
760 return (
b != 0.0f) ? a /
b : 0.0f;
774 return (
b != 0.0f) ?
fmodf(a,
b) : 0.0f;
779 return (
b != 0.0f) ? a -
floorf(a /
b) *
b : 0.0f;
800 return s_sq > 0.0004f ? 1.0f -
safe_sqrtf(1.0f - s_sq) : 0.5f * s_sq;
806 return angle > 0.02f ? 1.0f -
cosf(angle) : 0.5f *
sqr(angle);
819#ifdef __KERNEL_METAL__
824 const float _1_180 = 1.0f / 180.0f;
825 const float log2pi = 1.83787706641f;
826 const float logx =
log(x);
827 return (log2pi - logx +
828 x * (logx * 2.0f +
log(x *
sinh(1.0f / x) + (_1_180 /
pow(x, 6.0f))) - 2.0f)) *
845 return bits * (1.0f / (
float)0xFFFFFFFF);
848#if !defined(__KERNEL_GPU__)
849# if defined(__GNUC__)
852 return __builtin_popcount(x);
859 i = i - ((i >> 1) & 0x55555555);
860 i = (i & 0x33333333) + ((i >> 2) & 0x33333333);
861 i = (((i + (i >> 4)) & 0xF0F0F0F) * 0x1010101) >> 24;
865#elif defined(__KERNEL_ONEAPI__)
866# define popcount(x) sycl::popcount(x)
867#elif defined(__KERNEL_HIP__)
869# define popcount(x) __popcll(x)
870#elif !defined(__KERNEL_METAL__)
871# define popcount(x) __popc(x)
876#if defined(__KERNEL_CUDA__) || defined(__KERNEL_OPTIX__) || defined(__KERNEL_HIP__)
878#elif defined(__KERNEL_METAL__)
880#elif defined(__KERNEL_ONEAPI__)
885 unsigned long leading_zero = 0;
886 _BitScanReverse(&leading_zero, x);
887 return (31 - leading_zero);
889 return __builtin_clz(x);
896#if defined(__KERNEL_CUDA__) || defined(__KERNEL_OPTIX__) || defined(__KERNEL_HIP__)
897 return (__ffs(x) - 1);
898#elif defined(__KERNEL_METAL__)
900#elif defined(__KERNEL_ONEAPI__)
905 unsigned long ctz = 0;
906 _BitScanForward(&ctz, x);
909 return __builtin_ctz(x);
916#if defined(__KERNEL_CUDA__) || defined(__KERNEL_OPTIX__) || defined(__KERNEL_HIP__)
918#elif defined(__KERNEL_METAL__)
919 return (x != 0) ? ctz(x) + 1 : 0;
924 return __builtin_ffs(x);
936 v = (co.
z + 1.0f) * 0.5f;
946 float l =
dot(co, co);
953 u = (0.5f -
atan2f(co.
x, co.
y) * M_1_2PI_F);
972 if (
fabsf(a -
b) < abs_diff) {
976 if ((a < 0.0f) != (
b < 0.0f)) {
1011#ifndef __has_builtin
1012# define __has_builtin(v) 0
1019#if defined(__KERNEL_CUDA__)
1021#elif defined(__KERNEL_METAL__)
1022 return reverse_bits(x);
1023#elif defined(__aarch64__) || (defined(_M_ARM64) && !defined(_MSC_VER))
1025 __asm__(
"rbit %w0, %w1" :
"=r"(
x) :
"r"(
x));
1027#elif defined(__arm__) && ((__ARM_ARCH > 7) || __ARM_ARCH == 6 && __ARM_ARCH_ISA_THUMB >= 2)
1030 __asm__(
"rbit %0, %1" :
"=r"(
x) :
"r"(
x));
1032#elif __has_builtin(__builtin_bitreverse32)
1033 return __builtin_bitreverse32(x);
1036 x = ((x & 0x55555555) << 1) | ((x & 0xAAAAAAAA) >> 1);
1038 x = ((x & 0x33333333) << 2) | ((x & 0xCCCCCCCC) >> 2);
1040 x = ((x & 0x0F0F0F0F) << 4) | ((x & 0xF0F0F0F0) >> 4);
1043 return _byteswap_ulong(x);
1044# elif defined(__INTEL_COMPILER)
1048 return __builtin_bswap32(x);
1057 first->x =
fmaxf(first->x, second.
x);
1058 first->y =
fminf(first->y, second.
y);
1060 return first->x < first->y;
1070 const bool valid_linear = (a == 0.0f) && (
b != 0.0f);
1073 const float discriminant =
sqr(
b) - 4.0f * a * c;
1075 const bool valid_quadratic = (a != 0.0f) && (discriminant > -1e-5f);
1077 if (valid_quadratic) {
1083 const float r1 = temp / a;
1084 const float r2 = c / temp;
1090 return (valid_linear || valid_quadratic);
ATTR_WARN_UNUSED_RESULT const BMVert * v2
ATTR_WARN_UNUSED_RESULT const BMLoop * l
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE const btScalar & z() const
Return the z value.
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
SIMD_FORCE_INLINE btVector3 & normalize()
Normalize this vector x^2 + y^2 + z^2 = 1.
local_group_size(16, 16) .push_constant(Type b
pow(value.r - subtrahend, 2.0)") .do_static_compilation(true)
additional_info("compositor_sum_squared_difference_float_shared") .push_constant(Type output_img float dot(value.rgb, luminance_coefficients)") .define("LOAD(value)"
#define ccl_device_forceinline
#define ccl_device_inline
#define CCL_NAMESPACE_END
draw_view in_light_buf[] float
ccl_device_inline float cross(const float2 a, const float2 b)
ccl_device_inline float3 log(float3 v)
INLINE Rall1d< T, V, S > sinh(const Rall1d< T, V, S > &arg)
unsigned __int64 uint64_t
#define FOREACH_SPECTRUM_CHANNEL(counter)
#define GET_SPECTRUM_CHANNEL(v, i)
SPECTRUM_DATA_TYPE Spectrum
ccl_device float safe_divide(float a, float b)
ccl_device float safe_floored_modulo(float a, float b)
ccl_device_inline float inverse_lerp(float a, float b, float x)
ccl_device_inline float ensure_finite(float v)
ccl_device_inline int4 __float4_as_int4(float4 f)
ccl_device_inline int abs(int x)
ccl_device_inline float safe_sqrtf(float f)
ccl_device_inline uint uint16_unpack_from_uint_1(const uint i)
ccl_device_inline float pow22(float a)
ccl_device_inline int float_to_int(float f)
ccl_device_inline int ceil_to_int(float f)
ccl_device_inline float pow20(float a)
ccl_device_inline float compatible_signf(float f)
ccl_device_inline T min4(const T &a, const T &b, const T &c, const T &d)
ccl_device_inline float smoothstep(float edge0, float edge1, float x)
ccl_device_inline uint popcount(uint x)
ccl_device_inline uint count_leading_zeros(uint x)
ccl_device_inline float3 safe_divide_even_color(float3 a, float3 b)
ccl_device_inline bool intervals_intersect(ccl_private float2 *first, const float2 second)
CCL_NAMESPACE_END CCL_NAMESPACE_BEGIN ccl_device_inline float triangle_area(ccl_private const float3 &v1, ccl_private const float3 &v2, ccl_private const float3 &v3)
ccl_device_inline float compatible_atan2(const float y, const float x)
ccl_device_inline Spectrum safe_invert_color(Spectrum a)
ccl_device_inline int mod(int x, int m)
ccl_device_inline float tan_angle(float3 a, float3 b)
ccl_device float safe_modulo(float a, float b)
ccl_device_inline float sqr(float a)
ccl_device_inline float pingpongf(float a, float b)
ccl_device_inline uint pointer_pack_to_uint_1(T *ptr)
ccl_device_inline float sin_from_cos(const float c)
ccl_device_inline uint32_t reverse_integer_bits(uint32_t x)
ccl_device_inline uint count_trailing_zeros(uint x)
ccl_device_inline float sin_sqr_to_one_minus_cos(const float s_sq)
ccl_device_inline float inversesqrtf(float f)
ccl_device float safe_acosf(float a)
ccl_device float compatible_powf(float x, float y)
ccl_device_inline float smoothminf(float a, float b, float k)
ccl_device_inline float2 map_to_sphere(const float3 co)
ccl_device_inline uint uint16_pack_to_uint(const uint a, const uint b)
ccl_device_inline bool isfinite_safe(float f)
ccl_device_inline bool solve_quadratic(const float a, const float b, const float c, ccl_private float &x1, ccl_private float &x2)
ccl_device_inline uint pointer_pack_to_uint_0(T *ptr)
ccl_device_inline float4 float3_to_float4(const float3 a)
ccl_device_inline float precise_angle(float3 a, float3 b)
ccl_device_inline T * pointer_unpack_from_uint(const uint a, const uint b)
ccl_device_inline float2 map_to_tube(const float3 co)
ccl_device_inline uint next_power_of_two(uint x)
ccl_device_inline float floorfrac(float x, ccl_private int *i)
ccl_device_inline T max4(const T &a, const T &b, const T &c, const T &d)
ccl_device_inline uint as_uint(int i)
ccl_device_inline float nonzerof(float f, float eps)
ccl_device float safe_powf(float a, float b)
ccl_device_inline uint prev_power_of_two(uint x)
ccl_device float safe_logf(float a, float b)
ccl_device_inline float fractf(float x)
ccl_device_inline bool compare_floats(float a, float b, float abs_diff, int ulp_diff)
ccl_device_inline int floor_to_int(float f)
ccl_device_inline bool isnan_safe(float f)
ccl_device_inline float beta(float x, float y)
ccl_device_inline uint uint16_unpack_from_uint_0(const uint i)
ccl_device_inline float3 float2_to_float3(const float2 a)
ccl_device_inline float signf(float f)
ccl_device_inline void make_orthonormals(const float3 N, ccl_private float3 *a, ccl_private float3 *b)
ccl_device_inline float xor_signmask(float x, int y)
ccl_device_inline float cubic_interp(float a, float b, float c, float d, float x)
ccl_device_inline uint find_first_set(uint x)
ccl_device_inline float3 float4_to_float3(const float4 a)
ccl_device_inline int as_int(uint i)
ccl_device float bits_to_01(uint bits)
ccl_device_inline float3 rotate_around_axis(float3 p, float3 axis, float angle)
ccl_device_inline float4 __int4_as_float4(int4 i)
ccl_device_inline float wrapf(float value, float max, float min)
ccl_device float safe_asinf(float a)
ccl_device_inline float2 float3_to_float2(const float3 a)
ccl_device_inline float smoothstepf(float f)
ccl_device_inline Spectrum safe_divide_color(Spectrum a, Spectrum b)
ccl_device_inline float one_minus_cos(const float angle)
ccl_device_inline float cos_from_sin(const float s)
ccl_device_inline int clamp(int a, int mn, int mx)