Merge branch 'master' into blender2.8
authorBrecht Van Lommel <brechtvanlommel@gmail.com>
Fri, 15 Jun 2018 14:32:31 +0000 (16:32 +0200)
committerBrecht Van Lommel <brechtvanlommel@gmail.com>
Fri, 15 Jun 2018 14:32:31 +0000 (16:32 +0200)
intern/cycles/kernel/kernel_color.h
intern/cycles/kernel/kernel_types.h
intern/cycles/render/shader.cpp

index d1c3dac..990e798 100644 (file)
@@ -23,16 +23,16 @@ CCL_NAMESPACE_BEGIN
 
 ccl_device float3 xyz_to_rgb(KernelGlobals *kg, float3 xyz)
 {
-    return make_float3(dot(kernel_data.film.xyz_to_r, xyz),
-                       dot(kernel_data.film.xyz_to_g, xyz),
-                       dot(kernel_data.film.xyz_to_b, xyz));
+    return make_float3(dot(float4_to_float3(kernel_data.film.xyz_to_r), xyz),
+                       dot(float4_to_float3(kernel_data.film.xyz_to_g), xyz),
+                       dot(float4_to_float3(kernel_data.film.xyz_to_b), xyz));
 }
 
 ccl_device float linear_rgb_to_gray(KernelGlobals *kg, float3 c)
 {
-    return dot(c, kernel_data.film.rgb_to_y);
+    return dot(c, float4_to_float3(kernel_data.film.rgb_to_y));
 }
 
 CCL_NAMESPACE_END
 
-#endif /* __KERNEL_COLOR_H__ */
\ No newline at end of file
+#endif /* __KERNEL_COLOR_H__ */
index e8cbd33..8df7c36 100644 (file)
@@ -1274,10 +1274,12 @@ typedef struct KernelFilm {
 
        int pad1, pad2, pad3;
 
-       float3 xyz_to_r;
-       float3 xyz_to_g;
-       float3 xyz_to_b;
-       float3 rgb_to_y;
+       /* XYZ to rendering color space transform. float4 instead of float3 to
+        * ensure consistent padding/alignment across devices. */
+       float4 xyz_to_r;
+       float4 xyz_to_g;
+       float4 xyz_to_b;
+       float4 rgb_to_y;
 
 #ifdef __KERNEL_DEBUG__
        int pass_bvh_traversed_nodes;
index f8bd148..69f84a6 100644 (file)
@@ -562,10 +562,10 @@ void ShaderManager::device_update_common(Device *device,
        /* film */
        KernelFilm *kfilm = &dscene->data.film;
        /* color space, needs to be here because e.g. displacement shaders could depend on it */
-       kfilm->xyz_to_r = xyz_to_r;
-       kfilm->xyz_to_g = xyz_to_g;
-       kfilm->xyz_to_b = xyz_to_b;
-       kfilm->rgb_to_y = rgb_to_y;
+       kfilm->xyz_to_r = float3_to_float4(xyz_to_r);
+       kfilm->xyz_to_g = float3_to_float4(xyz_to_g);
+       kfilm->xyz_to_b = float3_to_float4(xyz_to_b);
+       kfilm->rgb_to_y = float3_to_float4(rgb_to_y);
 }
 
 void ShaderManager::device_free_common(Device *, DeviceScene *dscene, Scene *scene)