From d69c80f717e9dc9efc1325653b0c87fbb2254af9 Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Sat, 9 May 2015 18:57:51 +0500 Subject: Cycles: Presumably correct workaround for addrspace in camera motion blur --- intern/cycles/kernel/kernel_camera.h | 44 +++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 18 deletions(-) (limited to 'intern/cycles/kernel/kernel_camera.h') 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 - -- cgit v1.2.3