[Bf-blender-cvs] [4ae67097f47] cycles_path_guiding: Merge branch 'master' into cycles_path_guiding

Brecht Van Lommel noreply at git.blender.org
Tue Sep 20 21:00:36 CEST 2022


Commit: 4ae67097f478d46733501aa2cf72bf0bea35d3b8
Author: Brecht Van Lommel
Date:   Tue Sep 20 20:25:57 2022 +0200
Branches: cycles_path_guiding
https://developer.blender.org/rB4ae67097f478d46733501aa2cf72bf0bea35d3b8

Merge branch 'master' into cycles_path_guiding

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



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

diff --cc intern/cycles/device/cpu/kernel_thread_globals.cpp
index 766c441d62c,99af1525d92..28fa3d7c728
--- a/intern/cycles/device/cpu/kernel_thread_globals.cpp
+++ b/intern/cycles/device/cpu/kernel_thread_globals.cpp
@@@ -47,12 -32,8 +44,12 @@@ CPUKernelThreadGlobals::CPUKernelThread
  CPUKernelThreadGlobals::~CPUKernelThreadGlobals()
  {
  #ifdef WITH_OSL
-   OSLShader::thread_free(this);
+   OSLGlobals::thread_free(this);
  #endif
 +
 +#if defined(WITH_PATH_GUIDING) && PATH_GUIDING_LEVEL >= 1
 +  delete opgl_path_segment_storage;
 +#endif
  }
  
  CPUKernelThreadGlobals &CPUKernelThreadGlobals::operator=(CPUKernelThreadGlobals &&other)
diff --cc intern/cycles/kernel/closure/bsdf.h
index e298d638a95,f0b28ff77c4..f60caa86ee0
--- a/intern/cycles/kernel/closure/bsdf.h
+++ b/intern/cycles/kernel/closure/bsdf.h
@@@ -117,14 -115,10 +117,14 @@@ ccl_device_inline int bsdf_sample(Kerne
    switch (sc->type) {
      case CLOSURE_BSDF_DIFFUSE_ID:
        label = bsdf_diffuse_sample(sc, Ng, sd->I, randu, randv, eval, omega_in, pdf);
 +      *sampled_roughness = one_float2();
 +      *eta = 1.0f;
        break;
- #ifdef __SVM__
+ #if defined(__SVM__) || defined(__OSL__)
      case CLOSURE_BSDF_OREN_NAYAR_ID:
        label = bsdf_oren_nayar_sample(sc, Ng, sd->I, randu, randv, eval, omega_in, pdf);
 +      *sampled_roughness = one_float2();
 +      *eta = 1.0f;
        break;
  #  ifdef __OSL__
      case CLOSURE_BSDF_PHONG_RAMP_ID:
diff --cc intern/cycles/kernel/integrator/surface_shader.h
index 5b6a4facd3e,64b5556f7e9..7ac73d0517c
--- a/intern/cycles/kernel/integrator/surface_shader.h
+++ b/intern/cycles/kernel/integrator/surface_shader.h
@@@ -10,14 -10,11 +10,15 @@@
  #include "kernel/closure/bsdf_util.h"
  #include "kernel/closure/emissive.h"
  
 +#include "kernel/integrator/guiding.h"
 +
- #include "kernel/svm/svm.h"
- 
 +#include "util/log.h"
 +
+ #ifdef __SVM__
+ #  include "kernel/svm/svm.h"
+ #endif
  #ifdef __OSL__
- #  include "kernel/osl/shader.h"
+ #  include "kernel/osl/osl.h"
  #endif
  
  CCL_NAMESPACE_BEGIN
diff --cc intern/cycles/kernel/osl/closures_setup.h
index 00000000000,f8d68444f90..96c551b9951
mode 000000,100644..100644
--- a/intern/cycles/kernel/osl/closures_setup.h
+++ b/intern/cycles/kernel/osl/closures_setup.h
@@@ -1,0 -1,1166 +1,1166 @@@
+ /* SPDX-License-Identifier: BSD-3-Clause
+  *
+  * Adapted from Open Shading Language
+  * Copyright (c) 2009-2010 Sony Pictures Imageworks Inc., et al.
+  * All Rights Reserved.
+  *
+  * Modifications Copyright 2011-2022 Blender Foundation. */
+ 
+ #pragma once
+ 
+ // clang-format off
+ #include "kernel/closure/alloc.h"
+ #include "kernel/closure/bsdf_util.h"
+ #include "kernel/closure/bsdf_ashikhmin_velvet.h"
+ #include "kernel/closure/bsdf_diffuse.h"
+ #include "kernel/closure/bsdf_microfacet.h"
+ #include "kernel/closure/bsdf_microfacet_multi.h"
+ #include "kernel/closure/bsdf_oren_nayar.h"
+ #include "kernel/closure/bsdf_reflection.h"
+ #include "kernel/closure/bsdf_refraction.h"
+ #include "kernel/closure/bsdf_transparent.h"
+ #include "kernel/closure/bsdf_ashikhmin_shirley.h"
+ #include "kernel/closure/bsdf_toon.h"
+ #include "kernel/closure/bsdf_hair.h"
+ #include "kernel/closure/bsdf_hair_principled.h"
+ #include "kernel/closure/bsdf_principled_diffuse.h"
+ #include "kernel/closure/bsdf_principled_sheen.h"
+ #include "kernel/closure/volume.h"
+ #include "kernel/closure/bsdf_diffuse_ramp.h"
+ #include "kernel/closure/bsdf_phong_ramp.h"
+ #include "kernel/closure/bssrdf.h"
+ #include "kernel/closure/emissive.h"
+ // clang-format on
+ 
+ CCL_NAMESPACE_BEGIN
+ 
+ #define OSL_CLOSURE_STRUCT_BEGIN(Upper, lower) \
+   struct ccl_align(8) Upper##Closure \
+   { \
+     const char *label;
+ #define OSL_CLOSURE_STRUCT_END(Upper, lower) \
+   } \
+   ; \
+   ccl_device void osl_closure_##lower##_setup(KernelGlobals kg, \
+                                               ccl_private ShaderData *sd, \
+                                               uint32_t path_flag, \
+                                               float3 weight, \
+                                               ccl_private Upper##Closure *closure);
+ #define OSL_CLOSURE_STRUCT_MEMBER(Upper, TYPE, type, name, key) type name;
+ #define OSL_CLOSURE_STRUCT_ARRAY_MEMBER(Upper, TYPE, type, name, key, size) type name[size];
+ 
+ #include "closures_template.h"
+ 
+ ccl_device_forceinline bool osl_closure_skip(KernelGlobals kg,
+                                              ccl_private const ShaderData *sd,
+                                              uint32_t path_flag,
+                                              int scattering)
+ {
+   /* caustic options */
+   if ((scattering & LABEL_GLOSSY) && (path_flag & PATH_RAY_DIFFUSE)) {
+     if ((!kernel_data.integrator.caustics_reflective && (scattering & LABEL_REFLECT)) ||
+         (!kernel_data.integrator.caustics_refractive && (scattering & LABEL_TRANSMIT))) {
+       return true;
+     }
+   }
+ 
+   return false;
+ }
+ 
+ /* Diffuse */
+ 
+ ccl_device void osl_closure_diffuse_setup(KernelGlobals kg,
+                                           ccl_private ShaderData *sd,
+                                           uint32_t path_flag,
+                                           float3 weight,
+                                           ccl_private const DiffuseClosure *closure)
+ {
+   if (osl_closure_skip(kg, sd, path_flag, LABEL_DIFFUSE)) {
+     return;
+   }
+ 
+   ccl_private DiffuseBsdf *bsdf = (ccl_private DiffuseBsdf *)bsdf_alloc(
+       sd, sizeof(DiffuseBsdf), rgb_to_spectrum(weight));
+   if (!bsdf) {
+     return;
+   }
+ 
+   bsdf->N = ensure_valid_reflection(sd->Ng, sd->I, closure->N);
+ 
+   sd->flag |= bsdf_diffuse_setup(bsdf);
+ }
+ 
+ ccl_device void osl_closure_oren_nayar_setup(KernelGlobals kg,
+                                              ccl_private ShaderData *sd,
+                                              uint32_t path_flag,
+                                              float3 weight,
+                                              ccl_private const OrenNayarClosure *closure)
+ {
+   if (osl_closure_skip(kg, sd, path_flag, LABEL_DIFFUSE)) {
+     return;
+   }
+ 
+   ccl_private OrenNayarBsdf *bsdf = (ccl_private OrenNayarBsdf *)bsdf_alloc(
+       sd, sizeof(OrenNayarBsdf), rgb_to_spectrum(weight));
+   if (!bsdf) {
+     return;
+   }
+ 
+   bsdf->N = ensure_valid_reflection(sd->Ng, sd->I, closure->N);
+   bsdf->roughness = closure->roughness;
+ 
+   sd->flag |= bsdf_oren_nayar_setup(bsdf);
+ }
+ 
+ ccl_device void osl_closure_translucent_setup(KernelGlobals kg,
+                                               ccl_private ShaderData *sd,
+                                               uint32_t path_flag,
+                                               float3 weight,
+                                               ccl_private const TranslucentClosure *closure)
+ {
+   if (osl_closure_skip(kg, sd, path_flag, LABEL_DIFFUSE)) {
+     return;
+   }
+ 
+   ccl_private DiffuseBsdf *bsdf = (ccl_private DiffuseBsdf *)bsdf_alloc(
+       sd, sizeof(DiffuseBsdf), rgb_to_spectrum(weight));
+   if (!bsdf) {
+     return;
+   }
+ 
+   bsdf->N = ensure_valid_reflection(sd->Ng, sd->I, closure->N);
+ 
+   sd->flag |= bsdf_translucent_setup(bsdf);
+ }
+ 
+ ccl_device void osl_closure_reflection_setup(KernelGlobals kg,
+                                              ccl_private ShaderData *sd,
+                                              uint32_t path_flag,
+                                              float3 weight,
+                                              ccl_private const ReflectionClosure *closure)
+ {
+   if (osl_closure_skip(kg, sd, path_flag, LABEL_SINGULAR)) {
+     return;
+   }
+ 
+   ccl_private MicrofacetBsdf *bsdf = (ccl_private MicrofacetBsdf *)bsdf_alloc(
+       sd, sizeof(MicrofacetBsdf), rgb_to_spectrum(weight));
+   if (!bsdf) {
+     return;
+   }
+ 
+   bsdf->N = ensure_valid_reflection(sd->Ng, sd->I, closure->N);
+ 
+   sd->flag |= bsdf_reflection_setup(bsdf);
+ }
+ 
+ ccl_device void osl_closure_refraction_setup(KernelGlobals kg,
+                                              ccl_private ShaderData *sd,
+                                              uint32_t path_flag,
+                                              float3 weight,
+                                              ccl_private const RefractionClosure *closure)
+ {
+   if (osl_closure_skip(kg, sd, path_flag, LABEL_SINGULAR)) {
+     return;
+   }
+ 
+   ccl_private MicrofacetBsdf *bsdf = (ccl_private MicrofacetBsdf *)bsdf_alloc(
+       sd, sizeof(MicrofacetBsdf), rgb_to_spectrum(weight));
+   if (!bsdf) {
+     return;
+   }
+ 
+   bsdf->N = ensure_valid_reflection(sd->Ng, sd->I, closure->N);
+   bsdf->ior = closure->ior;
+ 
+   sd->flag |= bsdf_refraction_setup(bsdf);
+ }
+ 
+ ccl_device void osl_closure_transparent_setup(KernelGlobals kg,
+                                               ccl_private ShaderData *sd,
+                                               uint32_t path_flag,
+                                               float3 weight,
+                                               ccl_private const TransparentClosure *closure)
+ {
+   bsdf_transparent_setup(sd, rgb_to_spectrum(weight), path_flag);
+ }
+ 
+ /* Standard microfacet closures */
+ 
+ ccl_device void osl_closure_microfacet_setup(KernelGlobals kg,
+                                              ccl_private ShaderData *sd,
+                                              uint32_t path_flag,
+                                              float3 weight,
+                                              ccl_private const MicrofacetClosure *closure)
+ {
+   const int label = (closure->refract) ? LABEL_TRANSMIT : LABEL_REFLECT;
+   if (osl_closure_skip(kg, sd, path_flag, LABEL_GLOSSY | label)) {
+     return;
+   }
+ 
+   ccl_private MicrofacetBsdf *bsdf = (ccl_private MicrofacetBsdf *)bsdf_alloc(
+       sd, sizeof(MicrofacetBsdf), rgb_to_spectrum(weight));
+   if (!bsdf) {
+     return;
+   }
+ 
+   bsdf->N = ensure_valid_reflection(sd->Ng, sd->I, closure->N);
+   bsdf->alpha_x = closure->alpha_x;
+   bsdf->alpha_y = closure->alpha_y;
+   bsdf->ior = closure->ior;
+   bsdf->T = closure->T;
+ 
+   static OSL::ustring u_

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list