Merge branch 'blender-v3.2-release'

This commit is contained in:
Brecht Van Lommel 2022-05-05 21:01:54 +02:00
commit 108963d508
Notes: blender-bot 2023-02-14 06:00:50 +01:00
Referenced by issue #97894, Crash adding Curve-To-Mesh on hair curves
1 changed files with 22 additions and 11 deletions

View File

@ -387,6 +387,21 @@ ccl_device_forceinline int integrate_surface_volume_only_bounce(IntegratorState
}
#endif
ccl_device_forceinline bool integrate_surface_terminate(IntegratorState state, const uint32_t path_flag)
{
const float probability = (path_flag & PATH_RAY_TERMINATE_ON_NEXT_SURFACE) ?
0.0f :
INTEGRATOR_STATE(state, path, continuation_probability);
if (probability == 0.0f) {
return true;
}
else if (probability != 1.0f) {
INTEGRATOR_STATE_WRITE(state, path, throughput) /= probability;
}
return false;
}
#if defined(__AO__)
ccl_device_forceinline void integrate_surface_ao(KernelGlobals kg,
IntegratorState state,
@ -478,12 +493,12 @@ ccl_device bool integrate_surface(KernelGlobals kg,
int continue_path_label = 0;
const uint32_t path_flag = INTEGRATOR_STATE(state, path, flag);
/* Skip most work for volume bounding surface. */
#ifdef __VOLUME__
if (!(sd.flag & SD_HAS_ONLY_VOLUME)) {
#endif
const uint32_t path_flag = INTEGRATOR_STATE(state, path, flag);
#ifdef __SUBSURFACE__
/* Can skip shader evaluation for BSSRDF exit point without bump mapping. */
if (!(path_flag & PATH_RAY_SUBSURFACE) || ((sd.flag & SD_HAS_BSSRDF_BUMP)))
@ -542,16 +557,8 @@ ccl_device bool integrate_surface(KernelGlobals kg,
* throughput by the probability at the right moment.
*
* Also ensure we don't do it twice for SSS at both the entry and exit point. */
if (!(path_flag & PATH_RAY_SUBSURFACE)) {
const float probability = (path_flag & PATH_RAY_TERMINATE_ON_NEXT_SURFACE) ?
0.0f :
INTEGRATOR_STATE(state, path, continuation_probability);
if (probability == 0.0f) {
if (!(path_flag & PATH_RAY_SUBSURFACE) && integrate_surface_terminate(state, path_flag)) {
return false;
}
else if (probability != 1.0f) {
INTEGRATOR_STATE_WRITE(state, path, throughput) /= probability;
}
}
#ifdef __DENOISING_FEATURES__
@ -575,6 +582,10 @@ ccl_device bool integrate_surface(KernelGlobals kg,
#ifdef __VOLUME__
}
else {
if (integrate_surface_terminate(state, path_flag)) {
return false;
}
PROFILING_EVENT(PROFILING_SHADE_SURFACE_INDIRECT_LIGHT);
continue_path_label = integrate_surface_volume_only_bounce(state, &sd);
}