Cycles: Fix/workaround for toggling world MIS causing CUDA to fail

Seems it's just another issue with the compiler, worked around by explicitly
telling not to inline some function.

In theory we can unify this with CPU, but we're quite close to the release
so better be safe than sorry.
This commit is contained in:
Sergey Sharybin 2015-03-03 18:48:37 +05:00
parent 19656233dd
commit ed5df50192
Notes: blender-bot 2023-02-14 10:01:20 +01:00
Referenced by issue #43980, MouseLook (actuator) triggers MouseMovement (sensor) on other objects permanently
Referenced by issue #43974, Alpha output of movie clip node crashes blender when connected to viewer node with backdrop enabled
Referenced by issue #43953, openGL render renders transparent with alpha set to Sky in the Render/Shading menu
Referenced by issue #42015, cycles bake NormalMap problem
1 changed files with 19 additions and 2 deletions

View File

@ -37,7 +37,16 @@ typedef struct LightSample {
#ifdef __BACKGROUND_MIS__
ccl_device float3 background_light_sample(KernelGlobals *kg, float randu, float randv, float *pdf)
/* TODO(sergey): In theory it should be all fine to use noinline for all
* devices, but we're so close to the release so better not screw things
* up for CPU at least.
*/
#ifdef __KERNEL_GPU__
ccl_device_noinline
#else
ccl_device
#endif
float3 background_light_sample(KernelGlobals *kg, float randu, float randv, float *pdf)
{
/* for the following, the CDF values are actually a pair of floats, with the
* function value as X and the actual CDF as Y. The last entry's function
@ -113,7 +122,15 @@ ccl_device float3 background_light_sample(KernelGlobals *kg, float randu, float
return -equirectangular_to_direction(u, v);
}
ccl_device float background_light_pdf(KernelGlobals *kg, float3 direction)
/* TODO(sergey): Same as above, after the release we should consider using
* 'noinline' for all devices.
*/
#ifdef __KERNEL_GPU__
ccl_device_noinline
#else
ccl_device
#endif
float background_light_pdf(KernelGlobals *kg, float3 direction)
{
float2 uv = direction_to_equirectangular(direction);
int res = kernel_data.integrator.pdf_background_res;