[Bf-blender-cvs] [2d1eef87f6b] soc-2018-hair-shader: Fix discrepancy between RNG in CPU and GPU

L. E. Segovia noreply at git.blender.org
Wed Jun 13 15:19:54 CEST 2018


Commit: 2d1eef87f6b61a4a2c8ff476d290c9d841661f6b
Author: L. E. Segovia
Date:   Wed Jun 13 13:19:21 2018 +0000
Branches: soc-2018-hair-shader
https://developer.blender.org/rB2d1eef87f6b61a4a2c8ff476d290c9d841661f6b

Fix discrepancy between RNG in CPU and GPU

The second random sample is reordered between devices,
which causes a divergence if using both at the same time.
Thanks to nirved on irc for finding this out!

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

M	intern/cycles/kernel/closure/bsdf_hair_principled.h

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

diff --git a/intern/cycles/kernel/closure/bsdf_hair_principled.h b/intern/cycles/kernel/closure/bsdf_hair_principled.h
index f8f76cc9007..58cbaeb99e5 100644
--- a/intern/cycles/kernel/closure/bsdf_hair_principled.h
+++ b/intern/cycles/kernel/closure/bsdf_hair_principled.h
@@ -357,7 +357,8 @@ ccl_device int bsdf_principled_hair_sample(KernelGlobals *kg, const ShaderClosur
 
 	float2 u[2];
 	u[0] = make_float2(randu, randv);
-	u[1] = make_float2(lcg_step_float_addrspace(&sd->lcg_state), lcg_step_float_addrspace(&sd->lcg_state));
+	u[1].x = lcg_step_float_addrspace(&sd->lcg_state);
+	u[1].y = lcg_step_float_addrspace(&sd->lcg_state);
 	//printf("Enter sample data: ");
 	//scanf("%d %d %d %d %d %d %d %d", &wo.x, &wo.y, &wo.z, &bsdf->extra->geom.w, &u[0].x, &u[0].y, &u[1].x, &u[1].y);



More information about the Bf-blender-cvs mailing list