Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Werner <stefan.werner@tangent-animation.com>2017-12-02 05:28:13 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2018-01-11 04:58:29 +0300
commit25b794a39d8cff87b6df2338d020e8d4ba90eeef (patch)
tree8a981b760e13061e8a8b9f142f2331822c73de2d /intern/cycles/kernel
parentac2ebf9c54a9081662ab17f04240c00d9e5ac799 (diff)
Cycles: support animated object scale in motion blur.
This was disabled previously due to CUDA compiler bugs, see T32900. Differential Revision: https://developer.blender.org/D2937
Diffstat (limited to 'intern/cycles/kernel')
-rw-r--r--intern/cycles/kernel/geom/geom_attribute.h2
-rw-r--r--intern/cycles/kernel/geom/geom_object.h34
-rw-r--r--intern/cycles/kernel/kernel_camera.h12
-rw-r--r--intern/cycles/kernel/kernel_types.h2
4 files changed, 28 insertions, 22 deletions
diff --git a/intern/cycles/kernel/geom/geom_attribute.h b/intern/cycles/kernel/geom/geom_attribute.h
index 18f5c813cc8..c72595eed10 100644
--- a/intern/cycles/kernel/geom/geom_attribute.h
+++ b/intern/cycles/kernel/geom/geom_attribute.h
@@ -53,7 +53,7 @@ ccl_device_inline AttributeDescriptor attribute_not_found()
ccl_device_inline uint object_attribute_map_offset(KernelGlobals *kg, int object)
{
- int offset = object*OBJECT_SIZE + 11;
+ int offset = object*OBJECT_SIZE + 15;
float4 f = kernel_tex_fetch(__objects, offset);
return __float_as_uint(f.y);
}
diff --git a/intern/cycles/kernel/geom/geom_object.h b/intern/cycles/kernel/geom/geom_object.h
index a276096a745..d77c40f2348 100644
--- a/intern/cycles/kernel/geom/geom_object.h
+++ b/intern/cycles/kernel/geom/geom_object.h
@@ -28,11 +28,12 @@ CCL_NAMESPACE_BEGIN
enum ObjectTransform {
OBJECT_TRANSFORM = 0,
- OBJECT_TRANSFORM_MOTION_PRE = 0,
OBJECT_INVERSE_TRANSFORM = 4,
- OBJECT_TRANSFORM_MOTION_POST = 4,
- OBJECT_PROPERTIES = 8,
- OBJECT_DUPLI = 9
+ OBJECT_TRANSFORM_MOTION_PRE = 0,
+ OBJECT_TRANSFORM_MOTION_MID = 4,
+ OBJECT_TRANSFORM_MOTION_POST = 8,
+ OBJECT_PROPERTIES = 12,
+ OBJECT_DUPLI = 13
};
enum ObjectVectorTransform {
@@ -90,19 +91,24 @@ ccl_device_inline Transform object_fetch_vector_transform(KernelGlobals *kg, int
#ifdef __OBJECT_MOTION__
ccl_device_inline Transform object_fetch_transform_motion(KernelGlobals *kg, int object, float time)
{
- DecompMotionTransform motion;
+ MotionTransform motion;
int offset = object*OBJECT_SIZE + (int)OBJECT_TRANSFORM_MOTION_PRE;
- motion.mid.x = kernel_tex_fetch(__objects, offset + 0);
- motion.mid.y = kernel_tex_fetch(__objects, offset + 1);
- motion.mid.z = kernel_tex_fetch(__objects, offset + 2);
- motion.mid.w = kernel_tex_fetch(__objects, offset + 3);
+ motion.pre.x = kernel_tex_fetch(__objects, offset + 0);
+ motion.pre.y = kernel_tex_fetch(__objects, offset + 1);
+ motion.pre.z = kernel_tex_fetch(__objects, offset + 2);
+ motion.pre.w = kernel_tex_fetch(__objects, offset + 3);
+
+ motion.mid.x = kernel_tex_fetch(__objects, offset + 4);
+ motion.mid.y = kernel_tex_fetch(__objects, offset + 5);
+ motion.mid.z = kernel_tex_fetch(__objects, offset + 6);
+ motion.mid.w = kernel_tex_fetch(__objects, offset + 7);
- motion.pre_x = kernel_tex_fetch(__objects, offset + 4);
- motion.pre_y = kernel_tex_fetch(__objects, offset + 5);
- motion.post_x = kernel_tex_fetch(__objects, offset + 6);
- motion.post_y = kernel_tex_fetch(__objects, offset + 7);
+ motion.post.x = kernel_tex_fetch(__objects, offset + 8);
+ motion.post.y = kernel_tex_fetch(__objects, offset + 9);
+ motion.post.z = kernel_tex_fetch(__objects, offset + 10);
+ motion.post.w = kernel_tex_fetch(__objects, offset + 11);
Transform tfm;
transform_motion_interpolate(&tfm, &motion, time);
@@ -328,7 +334,7 @@ ccl_device_inline uint object_patch_map_offset(KernelGlobals *kg, int object)
if(object == OBJECT_NONE)
return 0;
- int offset = object*OBJECT_SIZE + 11;
+ int offset = object*OBJECT_SIZE + 15;
float4 f = kernel_tex_fetch(__objects, offset);
return __float_as_uint(f.x);
}
diff --git a/intern/cycles/kernel/kernel_camera.h b/intern/cycles/kernel/kernel_camera.h
index 0df5217d97a..77e3446329a 100644
--- a/intern/cycles/kernel/kernel_camera.h
+++ b/intern/cycles/kernel/kernel_camera.h
@@ -95,11 +95,11 @@ ccl_device void camera_sample_perspective(KernelGlobals *kg, float raster_x, flo
# ifdef __KERNEL_OPENCL__
const MotionTransform tfm = kernel_data.cam.motion;
transform_motion_interpolate(&cameratoworld,
- ((const DecompMotionTransform*)&tfm),
+ &tfm,
ray->time);
# else
transform_motion_interpolate(&cameratoworld,
- ((const DecompMotionTransform*)&kernel_data.cam.motion),
+ &kernel_data.cam.motion,
ray->time);
# endif
}
@@ -207,11 +207,11 @@ ccl_device void camera_sample_orthographic(KernelGlobals *kg, float raster_x, fl
# ifdef __KERNEL_OPENCL__
const MotionTransform tfm = kernel_data.cam.motion;
transform_motion_interpolate(&cameratoworld,
- (const DecompMotionTransform*)&tfm,
+ &tfm,
ray->time);
# else
transform_motion_interpolate(&cameratoworld,
- (const DecompMotionTransform*)&kernel_data.cam.motion,
+ &kernel_data.cam.motion,
ray->time);
# endif
}
@@ -285,11 +285,11 @@ ccl_device_inline void camera_sample_panorama(KernelGlobals *kg,
# ifdef __KERNEL_OPENCL__
const MotionTransform tfm = kernel_data.cam.motion;
transform_motion_interpolate(&cameratoworld,
- (const DecompMotionTransform*)&tfm,
+ &tfm,
ray->time);
# else
transform_motion_interpolate(&cameratoworld,
- (const DecompMotionTransform*)&kernel_data.cam.motion,
+ &kernel_data.cam.motion,
ray->time);
# endif
}
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index c4a9b3f4aa3..b052d668b7d 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -35,7 +35,7 @@
CCL_NAMESPACE_BEGIN
/* Constants */
-#define OBJECT_SIZE 12
+#define OBJECT_SIZE 16
#define OBJECT_VECTOR_SIZE 6
#define LIGHT_SIZE 11
#define FILTER_TABLE_SIZE 1024