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
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2012-10-18 16:45:27 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2012-10-18 16:45:27 +0400
commit95963289c81698815d0616850b5f23f6e9f9d852 (patch)
tree52dadaf4be3af94e0c06e3ed6aea83246e1ec8c0 /intern
parentf7a584b841dc4fe5f15254adaa5d12a7473465ce (diff)
More fixes related to #32900, motion blur with cuda sm 2.0 still disabled.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/kernel/kernel_bvh.h12
-rw-r--r--intern/cycles/kernel/kernel_emission.h4
-rw-r--r--intern/cycles/kernel/kernel_types.h4
-rw-r--r--intern/cycles/kernel/osl/osl_services.cpp2
-rw-r--r--intern/cycles/render/camera.cpp1
5 files changed, 17 insertions, 6 deletions
diff --git a/intern/cycles/kernel/kernel_bvh.h b/intern/cycles/kernel/kernel_bvh.h
index d033fb1d145..e3c8b796e9c 100644
--- a/intern/cycles/kernel/kernel_bvh.h
+++ b/intern/cycles/kernel/kernel_bvh.h
@@ -443,13 +443,19 @@ __device_inline bool bvh_intersect_motion(KernelGlobals *kg, const Ray *ray, con
__device_inline bool scene_intersect(KernelGlobals *kg, const Ray *ray, const uint visibility, Intersection *isect)
{
- /* todo: fix cuda sm 2.0 motion blur */
-#if defined(__OBJECT_MOTION__) && (!defined(__KERNEL_CUDA) || (__CUDA_ARCH__ >= 210))
+#ifdef __OBJECT_MOTION__
+#if !defined(__KERNEL_CUDA__) || (__CUDA_ARCH__ >= 210)
if(kernel_data.bvh.have_motion)
return bvh_intersect_motion(kg, ray, visibility, isect);
else
-#endif
return bvh_intersect(kg, ray, visibility, isect);
+#else
+ /* todo: fix cuda sm 2.0 motion blur */
+ return bvh_intersect(kg, ray, visibility, isect);
+#endif
+#else
+ return bvh_intersect(kg, ray, visibility, isect);
+#endif
}
__device_inline float3 ray_offset(float3 P, float3 Ng)
diff --git a/intern/cycles/kernel/kernel_emission.h b/intern/cycles/kernel/kernel_emission.h
index 75b6df5f08f..6d650a0158d 100644
--- a/intern/cycles/kernel/kernel_emission.h
+++ b/intern/cycles/kernel/kernel_emission.h
@@ -32,6 +32,10 @@ __device float3 direct_emissive_eval(KernelGlobals *kg, float rando,
Ray ray;
ray.D = ls->D;
ray.P = ls->P;
+ ray.t = 1.0f;
+#ifdef __OBJECT_MOTION__
+ ray.time = time;
+#endif
ray.dP.dx = make_float3(0.0f, 0.0f, 0.0f);
ray.dP.dy = make_float3(0.0f, 0.0f, 0.0f);
#ifdef __CAMERA_MOTION__
diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index 4cf414091f5..c341269f4ca 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -514,7 +514,9 @@ typedef struct KernelCamera {
/* more matrices */
Transform screentoworld;
Transform rastertoworld;
- Transform ndctoworld;
+ /* work around cuda sm 2.0 crash, this seems to
+ * cross some limit in combination with motion
+ * Transform ndctoworld; */
Transform worldtoscreen;
Transform worldtoraster;
Transform worldtondc;
diff --git a/intern/cycles/kernel/osl/osl_services.cpp b/intern/cycles/kernel/osl/osl_services.cpp
index 624d20bbd01..e8f7e966e92 100644
--- a/intern/cycles/kernel/osl/osl_services.cpp
+++ b/intern/cycles/kernel/osl/osl_services.cpp
@@ -224,7 +224,7 @@ bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, ustring from)
KernelGlobals *kg = kernel_globals;
if (from == u_ndc) {
- Transform tfm = transform_transpose(kernel_data.cam.ndctoworld);
+ Transform tfm = transform_transpose(transform_quick_inverse(kernel_data.cam.worldtondc));
result = TO_MATRIX44(tfm);
return true;
}
diff --git a/intern/cycles/render/camera.cpp b/intern/cycles/render/camera.cpp
index 7703d0cbc8e..649936bec04 100644
--- a/intern/cycles/render/camera.cpp
+++ b/intern/cycles/render/camera.cpp
@@ -162,7 +162,6 @@ void Camera::device_update(Device *device, DeviceScene *dscene, Scene *scene)
/* store matrices */
kcam->screentoworld = screentoworld;
kcam->rastertoworld = rastertoworld;
- kcam->ndctoworld = ndctoworld;
kcam->rastertocamera = rastertocamera;
kcam->cameratoworld = cameratoworld;
kcam->worldtoscreen = transform_inverse(screentoworld);