[Bf-blender-cvs] [e616cd5706e] master: Cycles: Add utility function to convert float4 color from srgb to linear

Sergey Sharybin noreply at git.blender.org
Wed May 3 11:28:39 CEST 2017


Commit: e616cd5706ef359aaed481db2e4d31a3fe16cd3b
Author: Sergey Sharybin
Date:   Wed May 3 11:19:40 2017 +0200
Branches: master
https://developer.blender.org/rBe616cd5706ef359aaed481db2e4d31a3fe16cd3b

Cycles: Add utility function to convert float4 color from srgb to linear

It will use SSE2 optimized version when is possible.

===================================================================

M	intern/cycles/util/util_color.h

===================================================================

diff --git a/intern/cycles/util/util_color.h b/intern/cycles/util/util_color.h
index 4d673dc34d8..114f0f9bf79 100644
--- a/intern/cycles/util/util_color.h
+++ b/intern/cycles/util/util_color.h
@@ -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)
 {




More information about the Bf-blender-cvs mailing list