14 return ((val <= 0.0f) ?
16 ((val > (1.0f - 0.5f / 255.0f)) ? 255 : (
uchar)((255.0f * val) + 0.5f)));
21 return val * (1.0f / 255.0f);
54 return make_float3(c.
x * (1.0f / 255.0f), c.
y * (1.0f / 255.0f), c.
z * (1.0f / 255.0f));
60 c.
x * (1.0f / 255.0f), c.
y * (1.0f / 255.0f), c.
z * (1.0f / 255.0f), c.
w * (1.0f / 255.0f));
66 return (c < 0.0f) ? 0.0f : c * (1.0f / 12.92f);
68 return powf((c + 0.055f) * (1.0f / 1.055f), 2.4f);
74 return (c < 0.0f) ? 0.0f : c * 12.92f;
76 return 1.055f *
powf(c, 1.0f / 2.4f) - 0.055f;
105 c = (cmax3 - rgb) / cdelta;
110 else if (rgb.
y == cmax) {
111 h = 2.0f + c.
x - c.
z;
114 h = 4.0f + c.
y - c.
x;
156 q =
v * (1.0f - (s * f));
157 t =
v * (1.0f - (s * (1.0f - f)));
162 else if (
i == 1.0f) {
165 else if (
i == 2.0f) {
168 else if (
i == 3.0f) {
171 else if (
i == 4.0f) {
195 l =
min(1.0f, (cmax + cmin) / 2.0f);
201 const float cdelta = cmax - cmin;
202 s =
l > 0.5f ? cdelta / (2.0f - cmax - cmin) : cdelta / (cmax + cmin);
204 h = (rgb.
y - rgb.
z) / cdelta + (rgb.
y < rgb.
z ? 6.0f : 0.0f);
206 else if (cmax == rgb.
y) {
207 h = (rgb.
z - rgb.
x) / cdelta + 2.0f;
210 h = (rgb.
x - rgb.
y) / cdelta + 4.0f;
232 nr =
fabsf(h * 6.0f - 3.0f) - 1.0f;
233 ng = 2.0f -
fabsf(h * 6.0f - 2.0f);
234 nb = 2.0f -
fabsf(h * 6.0f - 4.0f);
236 nr =
clamp(nr, 0.0f, 1.0f);
237 nb =
clamp(nb, 0.0f, 1.0f);
238 ng =
clamp(ng, 0.0f, 1.0f);
240 chroma = (1.0f -
fabsf(2.0f *
l - 1.0f)) * s;
242 return make_float3((nr - 0.5f) * chroma +
l, (ng - 0.5f) * chroma +
l, (nb - 0.5f) * chroma +
l);
257 if (
y != 0.0f &&
Y != 0.0f) {
258 Z = (1.0f -
x -
y) /
y *
Y;
267#ifdef __KERNEL_SSE2__
288 const float4 approx2 = old_result * old_result;
289 const float4 approx4 = approx2 * approx2;
304 float4 x = fastpow_sse2<0x3F4CCCCD, 0x4F55A7FB>(
306 const float4 arg2 = arg * arg;
307 const float4 arg4 = arg2 * arg2;
310 x = improve_5throot_solution_sse2(
x, arg4);
312 x = improve_5throot_solution_sse2(
x, arg4);
314 x = improve_5throot_solution_sse2(
x, arg4);
324 const float4 gte = fastpow24_sse2(gtebase);
325 return select(cmp, lt, gte);
349#ifdef __KERNEL_SSE2__
351 r = color_srgb_to_linear_sse2(r);
405 x = (
b.x != 0.0f) ? a.
x /
b.x : 0.0f;
406 y = (
b.y != 0.0f) ? a.
y /
b.y : 0.0f;
407 z = (
b.z != 0.0f) ? a.
z /
b.z : 0.0f;
415 else if (
b.z == 0.0f) {
423 else if (
b.y == 0.0f) {
432 else if (
b.z == 0.0f) {
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.
ccl_device_inline float4 color_uchar4_to_float4(const uchar4 c)
ccl_device_inline Spectrum safe_divide_color(Spectrum a, Spectrum b, const float fallback=0.0f)
ccl_device float3 xyY_to_xyz(const float x, const float y, float Y)
ccl_device float byte_to_float(const uchar val)
ccl_device float3 color_highlight_compress(float3 color, ccl_private float3 *variance)
ccl_device float3 hsv_to_rgb(const float3 hsv)
ccl_device_inline Spectrum safe_invert_color(Spectrum a)
ccl_device float3 color_linear_to_srgb_v3(const float3 c)
CCL_NAMESPACE_BEGIN ccl_device uchar float_to_byte(const float val)
ccl_device_inline float3 safe_divide_even_color(const float3 a, const float3 b)
ccl_device float color_srgb_to_linear(const float c)
ccl_device float4 color_srgb_to_linear_v4(const float4 c)
ccl_device float3 color_highlight_uncompress(const float3 color)
ccl_device uchar4 color_float_to_byte(const float3 c)
ccl_device float3 color_srgb_to_linear_v3(const float3 c)
ccl_device_inline float3 color_byte_to_float(const uchar4 c)
ccl_device uchar4 color_float4_to_uchar4(const float4 c)
ccl_device float4 color_linear_to_srgb_v4(const float4 c)
ccl_device float3 rgb_to_hsl(const float3 rgb)
ccl_device float3 rgb_to_hsv(const float3 rgb)
ccl_device float color_linear_to_srgb(const float c)
ccl_device float3 hsl_to_rgb(const float3 hsl)
#define ccl_device_inline
#define FOREACH_SPECTRUM_CHANNEL(counter)
#define GET_SPECTRUM_CHANNEL(v, i)
#define CCL_NAMESPACE_END
constexpr T clamp(T, U, U) RET
CCL_NAMESPACE_BEGIN ccl_device_inline float madd(const float a, const float b, const float c)
ccl_device_inline float3 one_float3()