diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-05-09 16:57:51 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-05-09 17:04:19 +0300 |
commit | d69c80f717e9dc9efc1325653b0c87fbb2254af9 (patch) | |
tree | 20b12b6e896f3e49192aed36ceb3e33443c4ebcd /intern/cycles/kernel/kernel_camera.h | |
parent | c9133778cf7e5ba488891fcb04bcb52e557d4d51 (diff) |
Cycles: Presumably correct workaround for addrspace in camera motion blur
Diffstat (limited to 'intern/cycles/kernel/kernel_camera.h')
-rw-r--r-- | intern/cycles/kernel/kernel_camera.h | 44 |
1 files changed, 26 insertions, 18 deletions
diff --git a/intern/cycles/kernel/kernel_camera.h b/intern/cycles/kernel/kernel_camera.h index ded222e20ff..1e81210007c 100644 --- a/intern/cycles/kernel/kernel_camera.h +++ b/intern/cycles/kernel/kernel_camera.h @@ -16,17 +16,6 @@ CCL_NAMESPACE_BEGIN -/* Workaround for explicit conversion from constant to private memory - * pointer when using OpenCL. - * - * TODO(sergey): Find a real solution for this. - */ -#ifdef __KERNEL_OPENCL__ -# define __motion_as_decoupled_const_ptr(motion) ((motion)) -#else -# define __motion_as_decoupled_const_ptr(motion) ((const DecompMotionTransform*)(motion)) -#endif - /* Perspective Camera */ ccl_device float2 camera_sample_aperture(KernelGlobals *kg, float u, float v) @@ -80,9 +69,16 @@ ccl_device void camera_sample_perspective(KernelGlobals *kg, float raster_x, flo #ifdef __CAMERA_MOTION__ if(kernel_data.cam.have_motion) { +#ifdef __KERNEL_OPENCL__ + const MotionTransform tfm = kernel_data.cam.motion; transform_motion_interpolate(&cameratoworld, - __motion_as_decoupled_const_ptr(&kernel_data.cam.motion), + ((const DecompMotionTransform*)&tfm), ray->time); +#else + transform_motion_interpolate(&cameratoworld, + ((const DecompMotionTransform*)&kernel_data.cam.motion), + ray->time); +#endif } #endif @@ -144,9 +140,16 @@ ccl_device void camera_sample_orthographic(KernelGlobals *kg, float raster_x, fl #ifdef __CAMERA_MOTION__ if(kernel_data.cam.have_motion) { +#ifdef __KERNEL_OPENCL__ + const MotionTransform tfm = kernel_data.cam.motion; transform_motion_interpolate(&cameratoworld, - __motion_as_decoupled_const_ptr(&kernel_data.cam.motion), + (const DecompMotionTransform*)&tfm, ray->time); +#else + transform_motion_interpolate(&cameratoworld, + (const DecompMotionTransform*)&kernel_data.cam.motion, + ray->time); +#endif } #endif @@ -220,11 +223,19 @@ ccl_device void camera_sample_panorama(KernelGlobals *kg, float raster_x, float Transform cameratoworld = kernel_data.cam.cameratoworld; #ifdef __CAMERA_MOTION__ - if(kernel_data.cam.have_motion) + if(kernel_data.cam.have_motion) { +#ifdef __KERNEL_OPENCL__ + const MotionTransform tfm = kernel_data.cam.motion; + transform_motion_interpolate(&cameratoworld, + (const DecompMotionTransform*)&tfm, + ray->time); +#else transform_motion_interpolate(&cameratoworld, - __motion_as_decoupled_const_ptr(&kernel_data.cam.motion), + (const DecompMotionTransform*)&kernel_data.cam.motion, ray->time); #endif + } +#endif ray->P = transform_point(&cameratoworld, ray->P); ray->D = transform_direction(&cameratoworld, ray->D); @@ -329,7 +340,4 @@ ccl_device_inline float3 camera_world_to_ndc(KernelGlobals *kg, ShaderData *sd, } } -#undef __motion_as_decoupled_const_ptr - CCL_NAMESPACE_END - |