[Bf-blender-cvs] [759b5fb] blender-v2.78-release: Fix Cycles address space OpenCL error after recent fix.

Brecht Van Lommel noreply at git.blender.org
Mon Oct 24 13:47:04 CEST 2016


Commit: 759b5fb2a63070b2a7bf8b32416d53f2c93f6290
Author: Brecht Van Lommel
Date:   Mon Oct 24 13:46:45 2016 +0200
Branches: blender-v2.78-release
https://developer.blender.org/rB759b5fb2a63070b2a7bf8b32416d53f2c93f6290

Fix Cycles address space OpenCL error after recent fix.

===================================================================

M	intern/cycles/kernel/kernel_camera.h

===================================================================

diff --git a/intern/cycles/kernel/kernel_camera.h b/intern/cycles/kernel/kernel_camera.h
index 5476b7e..b99a82b 100644
--- a/intern/cycles/kernel/kernel_camera.h
+++ b/intern/cycles/kernel/kernel_camera.h
@@ -68,8 +68,8 @@ ccl_device void camera_sample_perspective(KernelGlobals *kg, float raster_x, flo
 	}
 #endif
 
-	ray->P = make_float3(0.0f, 0.0f, 0.0f);
-	ray->D = Pcamera;
+	float3 P = make_float3(0.0f, 0.0f, 0.0f);
+	float3 D = Pcamera;
 
 	/* modify ray for depth of field */
 	float aperturesize = kernel_data.cam.aperturesize;
@@ -79,12 +79,12 @@ ccl_device void camera_sample_perspective(KernelGlobals *kg, float raster_x, flo
 		float2 lensuv = camera_sample_aperture(kg, lens_u, lens_v)*aperturesize;
 
 		/* compute point on plane of focus */
-		float ft = kernel_data.cam.focaldistance/ray->D.z;
-		float3 Pfocus = ray->D*ft;
+		float ft = kernel_data.cam.focaldistance/D.z;
+		float3 Pfocus = D*ft;
 
 		/* update ray for effect of lens */
-		ray->P = make_float3(lensuv.x, lensuv.y, 0.0f);
-		ray->D = normalize(Pfocus - ray->P);
+		P = make_float3(lensuv.x, lensuv.y, 0.0f);
+		D = normalize(Pfocus - P);
 	}
 
 	/* transform ray from camera to world */
@@ -105,12 +105,15 @@ ccl_device void camera_sample_perspective(KernelGlobals *kg, float raster_x, flo
 	}
 #endif
 
-	ray->P = transform_point(&cameratoworld, ray->P);
-	ray->D = normalize(transform_direction(&cameratoworld, ray->D));
+	P = transform_point(&cameratoworld, P);
+	D = normalize(transform_direction(&cameratoworld, D));
 
 	bool use_stereo = kernel_data.cam.interocular_offset != 0.0f;
 	if(!use_stereo) {
 		/* No stereo */
+		ray->P = P;
+		ray->D = D;
+
 #ifdef __RAY_DIFFERENTIALS__
 		float3 Dcenter = transform_direction(&cameratoworld, Pcamera);
 
@@ -121,7 +124,9 @@ ccl_device void camera_sample_perspective(KernelGlobals *kg, float raster_x, flo
 	}
 	else {
 		/* Spherical stereo */
-		spherical_stereo_transform(kg, &ray->P, &ray->D);
+		spherical_stereo_transform(kg, &P, &D);
+		ray->P = P;
+		ray->D = D;
 
 #ifdef __RAY_DIFFERENTIALS__
 		/* Ray differentials, computed from scratch using the raster coordinates
@@ -173,7 +178,8 @@ ccl_device void camera_sample_orthographic(KernelGlobals *kg, float raster_x, fl
 	Transform rastertocamera = kernel_data.cam.rastertocamera;
 	float3 Pcamera = transform_perspective(&rastertocamera, make_float3(raster_x, raster_y, 0.0f));
 
-	ray->D = make_float3(0.0f, 0.0f, 1.0f);
+	float3 P;
+	float3 D = make_float3(0.0f, 0.0f, 1.0f);
 
 	/* modify ray for depth of field */
 	float aperturesize = kernel_data.cam.aperturesize;
@@ -183,15 +189,15 @@ ccl_device void camera_sample_orthographic(KernelGlobals *kg, float raster_x, fl
 		float2 lensuv = camera_sample_aperture(kg, lens_u, lens_v)*aperturesize;
 
 		/* compute point on plane of focus */
-		float3 Pfocus = ray->D * kernel_data.cam.focaldistance;
+		float3 Pfocus = D * kernel_data.cam.focaldistance;
 
 		/* update ray for effect of lens */
 		float3 lensuvw = make_float3(lensuv.x, lensuv.y, 0.0f);
-		ray->P = Pcamera + lensuvw;
-		ray->D = normalize(Pfocus - lensuvw);
+		P = Pcamera + lensuvw;
+		D = normalize(Pfocus - lensuvw);
 	}
 	else {
-		ray->P = Pcamera;
+		P = Pcamera;
 	}
 	/* transform ray from camera to world */
 	Transform cameratoworld = kernel_data.cam.cameratoworld;
@@ -211,9 +217,8 @@ ccl_device void camera_sample_orthographic(KernelGlobals *kg, float raster_x, fl
 	}
 #endif
 
-	ray->P = transform_point(&cameratoworld, ray->P);
-	ray->D = transform_direction(&cameratoworld, ray->D);
-	ray->D = normalize(ray->D);
+	ray->P = transform_point(&cameratoworld, P);
+	ray->D = normalize(transform_direction(&cameratoworld, D));
 
 #ifdef __RAY_DIFFERENTIALS__
 	/* ray differential */
@@ -242,11 +247,11 @@ ccl_device_inline void camera_sample_panorama(KernelGlobals *kg,
 	float3 Pcamera = transform_perspective(&rastertocamera, make_float3(raster_x, raster_y, 0.0f));
 
 	/* create ray form raster position */
-	ray->P = make_float3(0.0f, 0.0f, 0.0f);
-	ray->D = panorama_to_direction(kg, Pcamera.x, Pcamera.y);
+	float3 P = make_float3(0.0f, 0.0f, 0.0f);
+	float3 D = panorama_to_direction(kg, Pcamera.x, Pcamera.y);
 
 	/* indicates ray should not receive any light, outside of the lens */
-	if(is_zero(ray->D)) {	
+	if(is_zero(D)) {
 		ray->t = 0.0f;
 		return;
 	}
@@ -259,7 +264,7 @@ ccl_device_inline void camera_sample_panorama(KernelGlobals *kg,
 		float2 lensuv = camera_sample_aperture(kg, lens_u, lens_v)*aperturesize;
 
 		/* compute point on plane of focus */
-		float3 D = normalize(ray->D);
+		float3 D = normalize(D);
 		float3 Pfocus = D * kernel_data.cam.focaldistance;
 
 		/* calculate orthonormal coordinates perpendicular to D */
@@ -268,8 +273,8 @@ ccl_device_inline void camera_sample_panorama(KernelGlobals *kg,
 		V = normalize(cross(D, U));
 
 		/* update ray for effect of lens */
-		ray->P = U * lensuv.x + V * lensuv.y;
-		ray->D = normalize(Pfocus - ray->P);
+		P = U * lensuv.x + V * lensuv.y;
+		D = normalize(Pfocus - P);
 	}
 
 	/* transform ray from camera to world */
@@ -290,15 +295,18 @@ ccl_device_inline void camera_sample_panorama(KernelGlobals *kg,
 	}
 #endif
 
-	ray->P = transform_point(&cameratoworld, ray->P);
-	ray->D = normalize(transform_direction(&cameratoworld, ray->D));
+	P = transform_point(&cameratoworld, P);
+	D = normalize(transform_direction(&cameratoworld, D));
 
 	/* Stereo transform */
 	bool use_stereo = kernel_data.cam.interocular_offset != 0.0f;
 	if(use_stereo) {
-		spherical_stereo_transform(kg, &ray->P, &ray->D);
+		spherical_stereo_transform(kg, &P, &D);
 	}
 
+	ray->P = P;
+	ray->D = D;
+
 #ifdef __RAY_DIFFERENTIALS__
 	/* Ray differentials, computed from scratch using the raster coordinates
 	 * because we don't want to be affected by depth of field. We compute




More information about the Bf-blender-cvs mailing list