[Bf-blender-cvs] [4bb41ed4395] cycles_path_guiding: Fix Metal build errors

Brecht Van Lommel noreply at git.blender.org
Sat Sep 24 05:42:21 CEST 2022


Commit: 4bb41ed43954d09163a71c6cff4fc22fa491cdf3
Author: Brecht Van Lommel
Date:   Sat Sep 24 04:24:53 2022 +0200
Branches: cycles_path_guiding
https://developer.blender.org/rB4bb41ed43954d09163a71c6cff4fc22fa491cdf3

Fix Metal build errors

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

M	intern/cycles/kernel/closure/bsdf.h
M	intern/cycles/kernel/integrator/guiding.h
M	intern/cycles/kernel/integrator/state_template.h
M	intern/cycles/kernel/integrator/surface_shader.h

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

diff --git a/intern/cycles/kernel/closure/bsdf.h b/intern/cycles/kernel/closure/bsdf.h
index 89ca3e14674..71af68aa80e 100644
--- a/intern/cycles/kernel/closure/bsdf.h
+++ b/intern/cycles/kernel/closure/bsdf.h
@@ -293,11 +293,10 @@ ccl_device_inline int bsdf_sample(KernelGlobals kg,
 }
 
 ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg,
-                                          const ShaderClosure *sc,
-                                          float2 *roughness,
-                                          float *eta)
+                                          ccl_private const ShaderClosure *sc,
+                                          ccl_private float2 *roughness,
+                                          ccl_private float *eta)
 {
-  const MicrofacetBsdf *bsdf;
   bool refractive = false;
   float alpha = 1.0f;
   switch (sc->type) {
@@ -325,17 +324,19 @@ ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg,
       *roughness = one_float2();
       *eta = 1.0f;
       break;
-    case CLOSURE_BSDF_REFLECTION_ID:
-      bsdf = (ccl_private const MicrofacetBsdf *)sc;
+    case CLOSURE_BSDF_REFLECTION_ID: {
+      ccl_private const MicrofacetBsdf *bsdf = (ccl_private const MicrofacetBsdf *)sc;
       *roughness = zero_float2();
       *eta = bsdf->ior;
       break;
-    case CLOSURE_BSDF_REFRACTION_ID:
-      bsdf = (ccl_private const MicrofacetBsdf *)sc;
+    }
+    case CLOSURE_BSDF_REFRACTION_ID: {
+      ccl_private const MicrofacetBsdf *bsdf = (ccl_private const MicrofacetBsdf *)sc;
       *roughness = zero_float2();
       // do we need to inverse eta??
       *eta = bsdf->ior;
       break;
+    }
     case CLOSURE_BSDF_TRANSPARENT_ID:
       *roughness = zero_float2();
       *eta = 1.0f;
@@ -343,36 +344,40 @@ ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg,
     case CLOSURE_BSDF_MICROFACET_GGX_ID:
     case CLOSURE_BSDF_MICROFACET_GGX_FRESNEL_ID:
     case CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID:
-    case CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID:
-      bsdf = (ccl_private const MicrofacetBsdf *)sc;
+    case CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID: {
+      ccl_private const MicrofacetBsdf *bsdf = (ccl_private const MicrofacetBsdf *)sc;
       *roughness = make_float2(bsdf->alpha_x, bsdf->alpha_y);
       refractive = bsdf->type == CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID;
       *eta = refractive ? 1.0f / bsdf->ior : bsdf->ior;
       break;
+    }
     case CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID:
-    case CLOSURE_BSDF_MICROFACET_MULTI_GGX_FRESNEL_ID:
-      bsdf = (ccl_private const MicrofacetBsdf *)sc;
+    case CLOSURE_BSDF_MICROFACET_MULTI_GGX_FRESNEL_ID: {
+      ccl_private const MicrofacetBsdf *bsdf = (ccl_private const MicrofacetBsdf *)sc;
       *roughness = make_float2(bsdf->alpha_x, bsdf->alpha_y);
       *eta = bsdf->ior;
       break;
+    }
     case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID:
-    case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_FRESNEL_ID:
-      bsdf = (ccl_private const MicrofacetBsdf *)sc;
+    case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_FRESNEL_ID: {
+      ccl_private const MicrofacetBsdf *bsdf = (ccl_private const MicrofacetBsdf *)sc;
       *roughness = make_float2(bsdf->alpha_x, bsdf->alpha_y);
       *eta = bsdf->ior;
       break;
+    }
     case CLOSURE_BSDF_MICROFACET_BECKMANN_ID:
-    case CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID:
-      bsdf = (ccl_private const MicrofacetBsdf *)sc;
+    case CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID: {
+      ccl_private const MicrofacetBsdf *bsdf = (ccl_private const MicrofacetBsdf *)sc;
       *roughness = make_float2(bsdf->alpha_x, bsdf->alpha_y);
       refractive = bsdf->type == CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID;
       *eta = refractive ? 1.0f / bsdf->ior : bsdf->ior;
-      break;
-    case CLOSURE_BSDF_ASHIKHMIN_SHIRLEY_ID:
-      bsdf = (ccl_private const MicrofacetBsdf *)sc;
+    } break;
+    case CLOSURE_BSDF_ASHIKHMIN_SHIRLEY_ID: {
+      ccl_private const MicrofacetBsdf *bsdf = (ccl_private const MicrofacetBsdf *)sc;
       *roughness = make_float2(bsdf->alpha_x, bsdf->alpha_y);
       *eta = 1.0f;
       break;
+    }
     case CLOSURE_BSDF_ASHIKHMIN_VELVET_ID:
       *roughness = one_float2();
       *eta = 1.0f;
@@ -418,13 +423,12 @@ ccl_device_inline void bsdf_roughness_eta(const KernelGlobals kg,
 }
 
 ccl_device_inline int bsdf_label(const KernelGlobals kg,
-                                 const ShaderClosure *sc,
+                                 ccl_private const ShaderClosure *sc,
                                  const float3 omega_in)
 {
   /* For curves use the smooth normal, particularly for ribbons the geometric
    * normal gives too much darkening otherwise. */
   int label;
-  MicrofacetBsdf *bsdf;
   switch (sc->type) {
     case CLOSURE_BSDF_DIFFUSE_ID:
     case CLOSURE_BSSRDF_BURLEY_ID:
@@ -459,47 +463,25 @@ ccl_device_inline int bsdf_label(const KernelGlobals kg,
     case CLOSURE_BSDF_MICROFACET_GGX_ID:
     case CLOSURE_BSDF_MICROFACET_GGX_FRESNEL_ID:
     case CLOSURE_BSDF_MICROFACET_GGX_CLEARCOAT_ID:
-      bsdf = (MicrofacetBsdf *)sc;
-      if (bsdf->alpha_x * bsdf->alpha_y <= 1e-7f)
-        label = LABEL_REFLECT | LABEL_SINGULAR;
-      else
-        label = LABEL_REFLECT | LABEL_GLOSSY;
-      break;
-    case CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID:
-      bsdf = (MicrofacetBsdf *)sc;
-      if (bsdf->alpha_x * bsdf->alpha_y <= 1e-7f)
-        label = LABEL_TRANSMIT | LABEL_SINGULAR;
-      else
-        label = LABEL_TRANSMIT | LABEL_GLOSSY;
-      break;
     case CLOSURE_BSDF_MICROFACET_MULTI_GGX_ID:
     case CLOSURE_BSDF_MICROFACET_MULTI_GGX_FRESNEL_ID:
-      bsdf = (MicrofacetBsdf *)sc;
-      if (bsdf->alpha_x * bsdf->alpha_y <= 1e-7f)
-        label = LABEL_REFLECT | LABEL_SINGULAR;
-      else
-        label = LABEL_REFLECT | LABEL_GLOSSY;
+    case CLOSURE_BSDF_MICROFACET_BECKMANN_ID: {
+      ccl_private const MicrofacetBsdf *bsdf = (ccl_private const MicrofacetBsdf *)sc;
+      label = (bsdf->alpha_x * bsdf->alpha_y <= 1e-7f) ? LABEL_REFLECT | LABEL_SINGULAR :
+                                                         LABEL_REFLECT | LABEL_GLOSSY;
+      break;
+    }
+    case CLOSURE_BSDF_MICROFACET_GGX_REFRACTION_ID:
+    case CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID: {
+      ccl_private const MicrofacetBsdf *bsdf = (ccl_private const MicrofacetBsdf *)sc;
+      label = (bsdf->alpha_x * bsdf->alpha_y <= 1e-7f) ? LABEL_TRANSMIT | LABEL_SINGULAR :
+                                                         LABEL_TRANSMIT | LABEL_GLOSSY;
       break;
+    }
     case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_ID:
     case CLOSURE_BSDF_MICROFACET_MULTI_GGX_GLASS_FRESNEL_ID:
-      if (bsdf_is_transmission(sc, omega_in))
-        label = LABEL_TRANSMIT | LABEL_GLOSSY;
-      else
-        label = LABEL_REFLECT | LABEL_GLOSSY;
-      break;
-    case CLOSURE_BSDF_MICROFACET_BECKMANN_ID:
-      bsdf = (MicrofacetBsdf *)sc;
-      if (bsdf->alpha_x * bsdf->alpha_y <= 1e-7f)
-        label = LABEL_REFLECT | LABEL_SINGULAR;
-      else
-        label = LABEL_REFLECT | LABEL_GLOSSY;
-      break;
-    case CLOSURE_BSDF_MICROFACET_BECKMANN_REFRACTION_ID:
-      bsdf = (MicrofacetBsdf *)sc;
-      if (bsdf->alpha_x * bsdf->alpha_y <= 1e-7f)
-        label = LABEL_TRANSMIT | LABEL_SINGULAR;
-      else
-        label = LABEL_TRANSMIT | LABEL_GLOSSY;
+      label = (bsdf_is_transmission(sc, omega_in)) ? LABEL_TRANSMIT | LABEL_GLOSSY :
+                                                     LABEL_REFLECT | LABEL_GLOSSY;
       break;
     case CLOSURE_BSDF_ASHIKHMIN_SHIRLEY_ID:
       label = LABEL_REFLECT | LABEL_GLOSSY;
diff --git a/intern/cycles/kernel/integrator/guiding.h b/intern/cycles/kernel/integrator/guiding.h
index a2b7d285413..5d09e5ceac4 100644
--- a/intern/cycles/kernel/integrator/guiding.h
+++ b/intern/cycles/kernel/integrator/guiding.h
@@ -3,11 +3,9 @@
 
 #pragma once
 
-#ifdef WITH_CYCLES_DEBUG
-#  include "kernel/closure/alloc.h"
-#  include "kernel/closure/bsdf.h"
-#  include "kernel/film/write.h"
-#endif
+#include "kernel/closure/alloc.h"
+#include "kernel/closure/bsdf.h"
+#include "kernel/film/write.h"
 
 CCL_NAMESPACE_BEGIN
 
@@ -401,7 +399,7 @@ ccl_device_forceinline void guiding_record_continuation_probability(
 /* Write a set of path guiding related debug information (e.g., guiding probability at first
  * bounce) into separate rendering passes.*/
 ccl_device_forceinline void guiding_write_debug_passes(KernelGlobals kg,
-                                                       IntegratorStateCPU *state,
+                                                       IntegratorState state,
                                                        ccl_private const ShaderData *sd,
                                                        ccl_global float *ccl_restrict
                                                            render_buffer)
diff --git a/intern/cycles/kernel/integrator/state_template.h b/intern/cycles/kernel/integrator/state_template.h
index bf7bd89baaa..760c2f80521 100644
--- a/intern/cycles/kernel/integrator/state_template.h
+++ b/intern/cycles/kernel/integrator/state_template.h
@@ -103,38 +103,17 @@ KERNEL_STRUCT_END_ARRAY(volume_stack,
                         KERNEL_STRUCT_VOLUME_STACK_SIZE)
 
 /************************************ Path Guiding *****************************/
-#ifdef __PATH_GUIDING__
 KERNEL_STRUCT_BEGIN(guiding)
+#ifdef __PATH_GUIDING__
 /* Current path segment of the random walk/path. */
 KERNEL_STRUCT_MEMBER(guiding,
                      openpgl::cpp::PathSegment *,
                      path_segment,
                      KERNEL_FEATURE_PATH_GUIDING)
-/* If surface guiding is enabled */
-KERNEL_STRUCT_MEMBER(guiding, bool, use_surface_guiding, KERNEL_FEATURE_PATH_GUIDING)
-/* Random number used for additional guiding decisions (e.g., cache query, selection to use guiding
- * or bsdf sampling) */
-KERNEL_STRUCT_MEMBER(guiding, float, sample_surface_guiding_rand, KERNEL_FEATURE_PATH_GUIDING)
-/* The probability to use surface guiding (i.e., diffuse sampling prob * guiding prob)*/
-KERNEL_STRUCT_MEMBER(guiding, float, surface_guiding_sampling_prob, KERNEL_FEATURE_PATH_GUIDING)
-/*

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list