Cycles: Add utility function to convert float4 color from srgb to linear
It will use SSE2 optimized version when is possible.
This commit is contained in:
@@ -158,16 +158,7 @@ ccl_device float3 xyz_to_rgb(float x, float y, float z)
|
||||
}
|
||||
|
||||
#ifndef __KERNEL_OPENCL__
|
||||
|
||||
ccl_device float3 color_srgb_to_scene_linear(float3 c)
|
||||
{
|
||||
return make_float3(
|
||||
color_srgb_to_scene_linear(c.x),
|
||||
color_srgb_to_scene_linear(c.y),
|
||||
color_srgb_to_scene_linear(c.z));
|
||||
}
|
||||
|
||||
#ifdef __KERNEL_SSE2__
|
||||
# ifdef __KERNEL_SSE2__
|
||||
/*
|
||||
* Calculate initial guess for arg^exp based on float representation
|
||||
* This method gives a constant bias, which can be easily compensated by multiplication with bias_coeff.
|
||||
@@ -222,17 +213,40 @@ ccl_device ssef color_srgb_to_scene_linear(const ssef &c)
|
||||
ssef gte = fastpow24(gtebase);
|
||||
return select(cmp, lt, gte);
|
||||
}
|
||||
# endif /* __KERNEL_SSE2__ */
|
||||
|
||||
ccl_device float3 color_srgb_to_scene_linear(float3 c)
|
||||
{
|
||||
return make_float3(color_srgb_to_scene_linear(c.x),
|
||||
color_srgb_to_scene_linear(c.y),
|
||||
color_srgb_to_scene_linear(c.z));
|
||||
}
|
||||
|
||||
ccl_device float4 color_srgb_to_scene_linear(float4 c)
|
||||
{
|
||||
#ifdef __KERNEL_SSE2__
|
||||
ssef r_ssef;
|
||||
float4 &r = (float4 &)r_ssef;
|
||||
r = c;
|
||||
r_ssef = color_srgb_to_scene_linear(r_ssef);
|
||||
r.w = c.w;
|
||||
return r;
|
||||
#else
|
||||
return make_float4(color_srgb_to_scene_linear(c.x),
|
||||
color_srgb_to_scene_linear(c.y),
|
||||
color_srgb_to_scene_linear(c.z),
|
||||
c.w);
|
||||
#endif
|
||||
}
|
||||
|
||||
ccl_device float3 color_scene_linear_to_srgb(float3 c)
|
||||
{
|
||||
return make_float3(
|
||||
color_scene_linear_to_srgb(c.x),
|
||||
color_scene_linear_to_srgb(c.y),
|
||||
color_scene_linear_to_srgb(c.z));
|
||||
return make_float3(color_scene_linear_to_srgb(c.x),
|
||||
color_scene_linear_to_srgb(c.y),
|
||||
color_scene_linear_to_srgb(c.z));
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif /* __KERNEL_OPENCL__ */
|
||||
|
||||
ccl_device float linear_rgb_to_gray(float3 c)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user