[Bf-blender-cvs] [7698c81a31e] cycles_refactor: Merge branch 'master' of git.blender.org:blender into cycles_refactor
Stefan Werner
noreply at git.blender.org
Thu Feb 1 13:59:31 CET 2018
Commit: 7698c81a31e8aa22651d74c5c11809e35b08ea94
Author: Stefan Werner
Date: Thu Feb 1 13:37:12 2018 +0100
Branches: cycles_refactor
https://developer.blender.org/rB7698c81a31e8aa22651d74c5c11809e35b08ea94
Merge branch 'master' of git.blender.org:blender into cycles_refactor
===================================================================
===================================================================
diff --cc intern/cycles/kernel/geom/geom_object.h
index edf2ee81d37,fa0dff4bd57..cdbed52cdf6
--- a/intern/cycles/kernel/geom/geom_object.h
+++ b/intern/cycles/kernel/geom/geom_object.h
@@@ -44,20 -45,15 +45,12 @@@ enum ObjectVectorTransform
ccl_device_inline Transform object_fetch_transform(KernelGlobals *kg, int object, enum ObjectTransform type)
{
- int offset = object*OBJECT_SIZE + (int)type;
-
-- Transform tfm;
- tfm.x = kernel_tex_fetch(__objects, offset + 0);
- tfm.y = kernel_tex_fetch(__objects, offset + 1);
- tfm.z = kernel_tex_fetch(__objects, offset + 2);
- tfm.w = make_float4(0.0f, 0.0f, 0.0f, 1.0f);
-
- return tfm;
+ if(type == OBJECT_INVERSE_TRANSFORM) {
- tfm.x = kernel_tex_fetch(__objects, object).itfm[0];
- tfm.y = kernel_tex_fetch(__objects, object).itfm[1];
- tfm.z = kernel_tex_fetch(__objects, object).itfm[2];
++ return kernel_tex_fetch(__objects, object).itfm;
+ }
+ else {
- tfm.x = kernel_tex_fetch(__objects, object).tfm[0];
- tfm.y = kernel_tex_fetch(__objects, object).tfm[1];
- tfm.z = kernel_tex_fetch(__objects, object).tfm[2];
++ return kernel_tex_fetch(__objects, object).tfm;
+ }
- tfm.w = make_float4(0.0f, 0.0f, 0.0f, 1.0f);
-
- return tfm;
}
/* Lamp to world space transformation */
@@@ -101,20 -91,27 +94,8 @@@ ccl_device_inline Transform object_fetc
#ifdef __OBJECT_MOTION__
ccl_device_inline Transform object_fetch_transform_motion(KernelGlobals *kg, int object, float time)
{
- DecompMotionTransform motion;
- MotionTransform motion;
--
- motion.mid.x = kernel_tex_fetch(__objects, object).tfm[0];
- motion.mid.y = kernel_tex_fetch(__objects, object).tfm[1];
- motion.mid.z = kernel_tex_fetch(__objects, object).tfm[2];
- motion.mid.w = kernel_tex_fetch(__objects, object).tfm[3];
- int offset = object*OBJECT_SIZE + (int)OBJECT_TRANSFORM_MOTION_PRE;
--
- motion.pre_x = kernel_tex_fetch(__objects, object).itfm[0];
- motion.pre_y = kernel_tex_fetch(__objects, object).itfm[1];
- motion.post_x = kernel_tex_fetch(__objects, object).itfm[2];
- motion.post_y = kernel_tex_fetch(__objects, object).itfm[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.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);
++ transform_motion_interpolate(&tfm, &kernel_tex_fetch(__objects, object).motion_tfm, time);
return tfm;
}
diff --cc intern/cycles/kernel/kernel_types.h
index 84ee58c986b,1e1a4f34650..de0c335c6c2
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@@ -1508,106 -1524,6 +1520,108 @@@ typedef struct WorkTile
ccl_global float *buffer;
} WorkTile;
+typedef struct KernelObject
+{
- float4 tfm[4];
- float4 itfm[4];
++ union {
++ Transform tfm, itfm;
++ MotionTransform motion_tfm;
++ };
+ float surface_area;
+ float pass_id;
+ float random_number;
+ float particle_index;
+ float dupli_generated[3];
+ int numkeys;
+ float ob_dupli_uv[2];
+ int numsteps;
+ int numverts;
+ uint patch_map_offset;
+ uint attribute_map_offset;
+ float pad2, pad3;
+} KernelObject;
+
+typedef struct KernelSpotLight
+{
+ float radius;
+ float invarea;
+ float spot_angle;
+ float spot_smooth;
+ float dir[3];
+} KernelSpotLight;
+
+/* PointLight is SpotLight with only radius and invarea being used. */
+
+typedef struct KernelAreaLight
+{
+ float axisu[3];
+ float invarea;
+ float axisv[3];
+ float dir[3];
+} KernelAreaLight;
+
+
+typedef struct KernelDistantLight
+{
+ float radius;
+ float cosangle;
+ float invarea;
+} KernelDistantLight;
+
+typedef struct KernelLight
+{
+ int type;
+ float co[3];
+ int shader_id;
+ int samples;
+ float max_bounces;
+ float random;
+ float4 tfm[3];
+ float4 itfm[3];
+ union {
+ KernelSpotLight spot;
+ KernelAreaLight area;
+ KernelDistantLight distant;
+ };
+} KernelLight;
+
+
+typedef struct KernelLightDistribution
+{
+ float totarea;
+ int prim;
+ union {
+ struct {
+ int shader_flag;
+ int object_id;
+ } mesh_light;
+ struct {
+ float pad;
+ float size;
+ } lamp;
+ };
+} KernelLightDistribution;
+
+typedef struct KernelParticle
+{
+ int index;
+ float age;
+ float lifetime;
+ float size;
+ float4 rotation;
+ /* Only xyz are used of the following.
+ * float4 instead of float3 are used to ensure consistent padding/alignment across devices. */
+ float4 location;
+ float4 velocity;
+ float4 angular_velocity;
+} KernelParticle;
+
+typedef struct KernelShaderFlags
+{
+ int flags;
+ int pass_id;
+ float constant_emission[3];
+} KernelShaderFlags;
+
CCL_NAMESPACE_END
#endif /* __KERNEL_TYPES_H__ */
diff --cc intern/cycles/render/object.cpp
index 0b9eba65249,4c06654d756..96b708d6fe8
--- a/intern/cycles/render/object.cpp
+++ b/intern/cycles/render/object.cpp
@@@ -357,15 -357,15 +357,15 @@@ void ObjectManager::device_update_objec
}
}
- /* Pack in texture. */
- int offset = object_index*OBJECT_SIZE;
-
/* OBJECT_TRANSFORM */
- memcpy(&object.tfm, &tfm, sizeof(float4)*3);
- memcpy(&objects[offset], &tfm, sizeof(float4)*3);
++ object.tfm = tfm;
/* OBJECT_INVERSE_TRANSFORM */
- memcpy(&object.itfm, &itfm, sizeof(float4)*3);
- memcpy(&objects[offset+4], &itfm, sizeof(float4)*3);
++ object.itfm = itfm;
/* OBJECT_PROPERTIES */
- objects[offset+12] = make_float4(surface_area, pass_id, random_number, __int_as_float(particle_index));
+ object.surface_area = surface_area;
+ object.pass_id = pass_id;
+ object.random_number = random_number;
+ object.particle_index = particle_index;
if(mesh->use_motion_blur) {
state->have_motion = true;
@@@ -401,29 -401,24 +401,25 @@@
else if(state->need_motion == Scene::MOTION_BLUR) {
if(ob->use_motion) {
/* decompose transformations for interpolation. */
- DecompMotionTransform decomp;
- MotionTransform decomp;
--
-- transform_motion_decompose(&decomp, &ob->motion, &ob->tfm);
- memcpy(&object.tfm, &decomp, sizeof(float4)*8);
- memcpy(&objects[offset], &decomp, sizeof(float4)*12);
++ transform_motion_decompose(&object.motion_tfm, &ob->motion, &ob->tfm);
++
flag |= SD_OBJECT_MOTION;
state->have_motion = true;
}
}
- #endif
/* Dupli object coords and motion info. */
+ object.dupli_generated[0] = ob->dupli_generated[0];
+ object.dupli_generated[1] = ob->dupli_generated[1];
+ object.dupli_generated[2] = ob->dupli_generated[2];
+ object.numkeys = mesh->curve_keys.size();
+ object.ob_dupli_uv[0] = ob->dupli_uv[0];
+ object.ob_dupli_uv[1] = ob->dupli_uv[1];
int totalsteps = mesh->motion_steps;
- int numsteps = (totalsteps - 1)/2;
- int numverts = mesh->verts.size();
- int numkeys = mesh->curve_keys.size();
-
- objects[offset+13] = make_float4(ob->dupli_generated[0], ob->dupli_generated[1], ob->dupli_generated[2], __int_as_float(numkeys));
- objects[offset+14] = make_float4(ob->dupli_uv[0], ob->dupli_uv[1], __int_as_float(numsteps), __int_as_float(numverts));
- objects[offset+15] = make_float4(0.0f, 0.0f, 0.0f, 0.0f);
+ object.numsteps = (totalsteps - 1)/2;
- object.numverts = mesh->verts.size();;
++ object.numverts = mesh->verts.size();
+ object.patch_map_offset = 0;
+ object.attribute_map_offset = 0;
/* Object flag. */
if(ob->use_holdout) {
diff --cc intern/cycles/util/util_transform.h
index aef168ca64d,ac0804a7227..7a08370c8f9
--- a/intern/cycles/util/util_transform.h
+++ b/intern/cycles/util/util_transform.h
@@@ -466,11 -458,11 +458,8 @@@ ccl_device_inline void transform_compos
/* Disabled for now, need arc-length parametrization for constant speed motion.
* #define CURVED_MOTION_INTERPOLATE */
- ccl_device void transform_motion_interpolate(Transform *tfm, const DecompMotionTransform *motion, float t)
+ ccl_device void transform_motion_interpolate(Transform *tfm, const MotionTransform *motion, float t)
{
-- /* possible optimization: is it worth it adding a check to skip scaling?
-- * it's probably quite uncommon to have scaling objects. or can we skip
-- * just shearing perhaps? */
Transform decomp;
#ifdef CURVED_MOTION_INTERPOLATE
More information about the Bf-blender-cvs
mailing list