Fix: cycles light sampling crash, happens on rare occasions due to float

rounding errors.
This commit is contained in:
Brecht Van Lommel 2012-11-26 11:05:22 +00:00
parent a91814e94d
commit 58ee2bdfc0
2 changed files with 4 additions and 5 deletions

@ -49,7 +49,7 @@ if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc', '
# optimized kernel
if env['WITH_BF_RAYOPTIMIZATION']:
optim_cxxflags = []
optim_cxxflags = Split(env['CXXFLAGS'])
if env['OURPLATFORM'] == 'win32-vc':
optim_cxxflags.append('/arch:SSE2 -D_CRT_SECURE_NO_WARNINGS /fp:fast /EHsc'.split())

@ -350,10 +350,9 @@ __device int light_distribution_sample(KernelGlobals *kg, float randt)
}
}
first = max(0, first-1);
kernel_assert(first >= 0 && first < kernel_data.integrator.num_distribution);
return first;
/* clamping should not be needed but float rounding errors seem to
* make this fail on rare occasions */
return clamp(first-1, 0, kernel_data.integrator.num_distribution-1);
}
/* Generic Light */