Fix #32205: Holdout shader + transparent background stays black with Alpha = 1
authorSergey Sharybin <sergey.vfx@gmail.com>
Wed, 1 Aug 2012 12:59:47 +0000 (12:59 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Wed, 1 Aug 2012 12:59:47 +0000 (12:59 +0000)
It was read of initialized memory around holdout_weight in cases when
holdout material is used. Seems that it should be assigned to result
of shader_holdout_eval here.

If Brecht could double check this it'll be great.

This could potentially fix #32224: Holdout Error with CUDA Cycles Render

intern/cycles/kernel/kernel_path.h

index 98ab9169c21351a4602db1dabab1fe5556446ab9..f5188345948de24bf972a01173c1c252fa1ef118 100644 (file)
@@ -288,7 +288,7 @@ __device float4 kernel_path_progressive(KernelGlobals *kg, RNG *rng, int sample,
                                if(sd.flag & SD_HOLDOUT_MASK)
                                        holdout_weight = make_float3(1.0f, 1.0f, 1.0f);
                                else
-                                       shader_holdout_eval(kg, &sd);
+                                       holdout_weight = shader_holdout_eval(kg, &sd);
 
                                /* any throughput is ok, should all be identical here */
                                L_transparent += average(holdout_weight*throughput);
@@ -655,7 +655,7 @@ __device float4 kernel_path_non_progressive(KernelGlobals *kg, RNG *rng, int sam
                                if(sd.flag & SD_HOLDOUT_MASK)
                                        holdout_weight = make_float3(1.0f, 1.0f, 1.0f);
                                else
-                                       shader_holdout_eval(kg, &sd);
+                                       holdout_weight = shader_holdout_eval(kg, &sd);
 
                                /* any throughput is ok, should all be identical here */
                                L_transparent += average(holdout_weight*throughput);