[Bf-blender-cvs] [e9918d67e2e] soc-2022-many-lights-sampling: Fix address of vector element requested error

Weizhen Huang noreply at git.blender.org
Tue Nov 29 18:45:08 CET 2022


Commit: e9918d67e2e09226636cdeae300ad4f73fb6fb8f
Author: Weizhen Huang
Date:   Tue Nov 29 18:43:43 2022 +0100
Branches: soc-2022-many-lights-sampling
https://developer.blender.org/rBe9918d67e2e09226636cdeae300ad4f73fb6fb8f

Fix address of vector element requested error

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

M	intern/cycles/kernel/light/area.h
M	intern/cycles/kernel/light/point.h
M	intern/cycles/kernel/light/triangle.h

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

diff --git a/intern/cycles/kernel/light/area.h b/intern/cycles/kernel/light/area.h
index 8daadebe67d..2108073c199 100644
--- a/intern/cycles/kernel/light/area.h
+++ b/intern/cycles/kernel/light/area.h
@@ -335,8 +335,9 @@ ccl_device_forceinline bool area_light_tree_parameters(const ccl_global KernelLi
   if (!in_volume_segment) {
     /* TODO: a cheap substitute for minimal distance between point and primitive. Does it
      * worth the overhead to compute the accurate minimal distance? */
-    point_to_centroid = safe_normalize_len(centroid - P, &distance.y);
-    distance.x = distance.y;
+    float min_distance;
+    point_to_centroid = safe_normalize_len(centroid - P, &min_distance);
+    distance = make_float2(min_distance, min_distance);
   }
 
   const float3 extentu = klight->area.extentu;
diff --git a/intern/cycles/kernel/light/point.h b/intern/cycles/kernel/light/point.h
index 7597bc12b84..bf85877e373 100644
--- a/intern/cycles/kernel/light/point.h
+++ b/intern/cycles/kernel/light/point.h
@@ -121,13 +121,14 @@ ccl_device_forceinline bool point_light_tree_parameters(const ccl_global KernelL
     cos_theta_u = 1.0f; /* Any value in [-1, 1], irrelevant since theta = 0 */
     return true;
   }
-  point_to_centroid = safe_normalize_len(centroid - P, &distance.y);
+  float min_distance;
+  point_to_centroid = safe_normalize_len(centroid - P, &min_distance);
 
   const float radius = klight->spot.radius;
   const float hypotenus = sqrtf(sqr(radius) + sqr(distance.y));
   cos_theta_u = distance.y / hypotenus;
 
-  distance.x = hypotenus;
+  distance = make_float2(hypotenus, min_distance);
 
   return true;
 }
diff --git a/intern/cycles/kernel/light/triangle.h b/intern/cycles/kernel/light/triangle.h
index af40b05e70b..fa9327b8ac6 100644
--- a/intern/cycles/kernel/light/triangle.h
+++ b/intern/cycles/kernel/light/triangle.h
@@ -298,8 +298,9 @@ ccl_device_forceinline bool triangle_light_tree_parameters(
   if (!in_volume_segment) {
     /* TODO: a cheap substitute for minimal distance between point and primitive. Does it
      * worth the overhead to compute the accurate minimal distance? */
-    point_to_centroid = safe_normalize_len(centroid - P, &distance.y);
-    distance.x = distance.y;
+    float min_distance;
+    point_to_centroid = safe_normalize_len(centroid - P, &min_distance);
+    distance = make_float2(min_distance, min_distance);
   }
 
   const int object = kemitter->mesh_light.object_id;



More information about the Bf-blender-cvs mailing list