[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