forked from bartvdbraak/blender
Cycles: Workaround incorrect SSS with CUDA toolkit 8.0.61
This commit is contained in:
parent
a14fb77fee
commit
85a5fbf2ce
@ -202,8 +202,9 @@ ccl_device_intersect bool scene_intersect(KernelGlobals *kg,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __SUBSURFACE__
|
#ifdef __SUBSURFACE__
|
||||||
|
/* Note: ray is passed by value to work around a possible CUDA compiler bug. */
|
||||||
ccl_device_intersect void scene_intersect_subsurface(KernelGlobals *kg,
|
ccl_device_intersect void scene_intersect_subsurface(KernelGlobals *kg,
|
||||||
const Ray *ray,
|
const Ray ray,
|
||||||
SubsurfaceIntersection *ss_isect,
|
SubsurfaceIntersection *ss_isect,
|
||||||
int subsurface_object,
|
int subsurface_object,
|
||||||
uint *lcg_state,
|
uint *lcg_state,
|
||||||
@ -212,7 +213,7 @@ ccl_device_intersect void scene_intersect_subsurface(KernelGlobals *kg,
|
|||||||
#ifdef __OBJECT_MOTION__
|
#ifdef __OBJECT_MOTION__
|
||||||
if(kernel_data.bvh.have_motion) {
|
if(kernel_data.bvh.have_motion) {
|
||||||
return bvh_intersect_subsurface_motion(kg,
|
return bvh_intersect_subsurface_motion(kg,
|
||||||
ray,
|
&ray,
|
||||||
ss_isect,
|
ss_isect,
|
||||||
subsurface_object,
|
subsurface_object,
|
||||||
lcg_state,
|
lcg_state,
|
||||||
@ -220,7 +221,7 @@ ccl_device_intersect void scene_intersect_subsurface(KernelGlobals *kg,
|
|||||||
}
|
}
|
||||||
#endif /* __OBJECT_MOTION__ */
|
#endif /* __OBJECT_MOTION__ */
|
||||||
return bvh_intersect_subsurface(kg,
|
return bvh_intersect_subsurface(kg,
|
||||||
ray,
|
&ray,
|
||||||
ss_isect,
|
ss_isect,
|
||||||
subsurface_object,
|
subsurface_object,
|
||||||
lcg_state,
|
lcg_state,
|
||||||
|
@ -293,7 +293,7 @@ ccl_device_inline int subsurface_scatter_multi_intersect(
|
|||||||
/* intersect with the same object. if multiple intersections are found it
|
/* intersect with the same object. if multiple intersections are found it
|
||||||
* will use at most BSSRDF_MAX_HITS hits, a random subset of all hits */
|
* will use at most BSSRDF_MAX_HITS hits, a random subset of all hits */
|
||||||
scene_intersect_subsurface(kg,
|
scene_intersect_subsurface(kg,
|
||||||
ray,
|
*ray,
|
||||||
ss_isect,
|
ss_isect,
|
||||||
sd->object,
|
sd->object,
|
||||||
lcg_state,
|
lcg_state,
|
||||||
@ -448,7 +448,7 @@ ccl_device void subsurface_scatter_step(KernelGlobals *kg, ShaderData *sd, PathS
|
|||||||
/* intersect with the same object. if multiple intersections are
|
/* intersect with the same object. if multiple intersections are
|
||||||
* found it will randomly pick one of them */
|
* found it will randomly pick one of them */
|
||||||
SubsurfaceIntersection ss_isect;
|
SubsurfaceIntersection ss_isect;
|
||||||
scene_intersect_subsurface(kg, &ray, &ss_isect, sd->object, lcg_state, 1);
|
scene_intersect_subsurface(kg, ray, &ss_isect, sd->object, lcg_state, 1);
|
||||||
|
|
||||||
/* evaluate bssrdf */
|
/* evaluate bssrdf */
|
||||||
if(ss_isect.num_hits > 0) {
|
if(ss_isect.num_hits > 0) {
|
||||||
|
Loading…
Reference in New Issue
Block a user