[Bf-blender-cvs] [319b7af633b] cycles_oneapi: Cycles: Optimize Nishita sky

Nikita Sirgienko noreply at git.blender.org
Thu Mar 31 14:59:13 CEST 2022


Commit: 319b7af633bca11ce0c1409ac03ce8a84c24e5e8
Author: Nikita Sirgienko
Date:   Thu Mar 31 14:20:43 2022 +0200
Branches: cycles_oneapi
https://developer.blender.org/rB319b7af633bca11ce0c1409ac03ce8a84c24e5e8

Cycles: Optimize Nishita sky

Reduce register pressure.
Helps with kernel compile time and render time.

Should be no functional changes.

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

M	intern/cycles/kernel/svm/sky.h

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

diff --git a/intern/cycles/kernel/svm/sky.h b/intern/cycles/kernel/svm/sky.h
index 5597aa5524e..a72d4dd3ba7 100644
--- a/intern/cycles/kernel/svm/sky.h
+++ b/intern/cycles/kernel/svm/sky.h
@@ -118,19 +118,20 @@ ccl_device float3 geographical_to_direction(float lat, float lon)
 
 ccl_device float3 sky_radiance_nishita(KernelGlobals kg,
                                        float3 dir,
+                                       float3 pixel_bottom,
+                                       float3 pixel_top,
                                        ccl_private float *nishita_data,
                                        uint texture_id)
 {
   /* definitions */
-  float sun_elevation = nishita_data[6];
-  float sun_rotation = nishita_data[7];
-  float angular_diameter = nishita_data[8];
-  float sun_intensity = nishita_data[9];
+  float sun_elevation = nishita_data[0];
+  float sun_rotation = nishita_data[1];
+  float angular_diameter = nishita_data[2];
+  float sun_intensity = nishita_data[3];
   bool sun_disc = (angular_diameter >= 0.0f);
   float3 xyz;
   /* convert dir to spherical coordinates */
   float2 direction = direction_to_spherical(dir);
-
   /* render above the horizon */
   if (dir.z >= 0.0f) {
     /* definitions */
@@ -142,8 +143,6 @@ ccl_device float3 sky_radiance_nishita(KernelGlobals kg,
     /* if ray inside sun disc render it, otherwise render sky */
     if (sun_disc && sun_dir_angle < half_angular) {
       /* get 2 pixels data */
-      float3 pixel_bottom = make_float3(nishita_data[0], nishita_data[1], nishita_data[2]);
-      float3 pixel_top = make_float3(nishita_data[3], nishita_data[4], nishita_data[5]);
       float y;
 
       /* sun interpolation */
@@ -292,27 +291,26 @@ ccl_device_noinline int svm_node_tex_sky(
   /* Nishita */
   else {
     /* Define variables */
-    float nishita_data[10];
+    float nishita_data[4];
 
     float4 data = read_node_float(kg, &offset);
-    nishita_data[0] = data.x;
-    nishita_data[1] = data.y;
-    nishita_data[2] = data.z;
-    nishita_data[3] = data.w;
+    float3 pixel_bottom = make_float3(data.x, data.y, data.z);
+    float3 pixel_top;
+    pixel_top.x = data.w;
 
     data = read_node_float(kg, &offset);
-    nishita_data[4] = data.x;
-    nishita_data[5] = data.y;
-    nishita_data[6] = data.z;
-    nishita_data[7] = data.w;
+    pixel_top.y = data.x;
+    pixel_top.z = data.y;
+    nishita_data[0] = data.z;
+    nishita_data[1] = data.w;
 
     data = read_node_float(kg, &offset);
-    nishita_data[8] = data.x;
-    nishita_data[9] = data.y;
+    nishita_data[2] = data.x;
+    nishita_data[3] = data.y;
     uint texture_id = __float_as_uint(data.z);
 
     /* Compute Sky */
-    f = sky_radiance_nishita(kg, dir, nishita_data, texture_id);
+    f = sky_radiance_nishita(kg, dir, pixel_bottom, pixel_top, nishita_data, texture_id);
   }
 
   stack_store_float3(stack, out_offset, f);



More information about the Bf-blender-cvs mailing list