[Bf-blender-cvs] [b50cf33d917] master: Fix T64515, T60434: crash in OSL and preview render after recent changes

Brecht Van Lommel noreply at git.blender.org
Tue May 14 12:24:38 CEST 2019


Commit: b50cf33d917b3e0fe7152cff96996e5a850c68d4
Author: Brecht Van Lommel
Date:   Tue May 14 12:13:43 2019 +0200
Branches: master
https://developer.blender.org/rBb50cf33d917b3e0fe7152cff96996e5a850c68d4

Fix T64515, T60434: crash in OSL and preview render after recent changes

The refactoring of texture handles did not take into account that render
services are shared between multiple render session. Now the texture
to handle map is also shared between render sessions.

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

M	intern/cycles/kernel/kernel_types.h
M	intern/cycles/kernel/osl/background.cpp
M	intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp
M	intern/cycles/kernel/osl/bsdf_phong_ramp.cpp
M	intern/cycles/kernel/osl/emissive.cpp
M	intern/cycles/kernel/osl/osl_bssrdf.cpp
M	intern/cycles/kernel/osl/osl_closures.cpp
M	intern/cycles/kernel/osl/osl_closures.h
M	intern/cycles/kernel/osl/osl_globals.h
M	intern/cycles/kernel/osl/osl_services.cpp
M	intern/cycles/kernel/osl/osl_services.h
M	intern/cycles/kernel/osl/osl_shader.cpp
M	intern/cycles/render/osl.cpp
M	intern/cycles/render/osl.h

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

diff --git a/intern/cycles/kernel/kernel_types.h b/intern/cycles/kernel/kernel_types.h
index 4070d5a8992..18d2a216f72 100644
--- a/intern/cycles/kernel/kernel_types.h
+++ b/intern/cycles/kernel/kernel_types.h
@@ -981,6 +981,7 @@ typedef ccl_addr_space struct ShaderData {
   differential3 ray_dP;
 
 #ifdef __OSL__
+  struct KernelGlobals *osl_globals;
   struct PathState *osl_path_state;
 #endif
 
diff --git a/intern/cycles/kernel/osl/background.cpp b/intern/cycles/kernel/osl/background.cpp
index 03fa88f40ad..b395227845d 100644
--- a/intern/cycles/kernel/osl/background.cpp
+++ b/intern/cycles/kernel/osl/background.cpp
@@ -52,7 +52,7 @@ using namespace OSL;
 ///
 class GenericBackgroundClosure : public CClosurePrimitive {
  public:
-  void setup(const KernelGlobals *, ShaderData *sd, int /* path_flag */, float3 weight)
+  void setup(ShaderData *sd, int /* path_flag */, float3 weight)
   {
     background_setup(sd, weight);
   }
@@ -67,7 +67,7 @@ class GenericBackgroundClosure : public CClosurePrimitive {
 ///
 class HoldoutClosure : CClosurePrimitive {
  public:
-  void setup(const KernelGlobals *, ShaderData *sd, int /* path_flag */, float3 weight)
+  void setup(ShaderData *sd, int /* path_flag */, float3 weight)
   {
     closure_alloc(sd, sizeof(ShaderClosure), CLOSURE_HOLDOUT_ID, weight);
     sd->flag |= SD_HOLDOUT;
diff --git a/intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp b/intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp
index 419837ab8d6..c5edc7c9be3 100644
--- a/intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp
+++ b/intern/cycles/kernel/osl/bsdf_diffuse_ramp.cpp
@@ -51,7 +51,7 @@ class DiffuseRampClosure : public CBSDFClosure {
   DiffuseRampBsdf params;
   Color3 colors[8];
 
-  void setup(const KernelGlobals *, ShaderData *sd, int /* path_flag */, float3 weight)
+  void setup(ShaderData *sd, int /* path_flag */, float3 weight)
   {
     DiffuseRampBsdf *bsdf = (DiffuseRampBsdf *)bsdf_alloc_osl(
         sd, sizeof(DiffuseRampBsdf), weight, &params);
diff --git a/intern/cycles/kernel/osl/bsdf_phong_ramp.cpp b/intern/cycles/kernel/osl/bsdf_phong_ramp.cpp
index 6bf39934235..4b7e59ff932 100644
--- a/intern/cycles/kernel/osl/bsdf_phong_ramp.cpp
+++ b/intern/cycles/kernel/osl/bsdf_phong_ramp.cpp
@@ -50,7 +50,7 @@ class PhongRampClosure : public CBSDFClosure {
   PhongRampBsdf params;
   Color3 colors[8];
 
-  void setup(const KernelGlobals *, ShaderData *sd, int /* path_flag */, float3 weight)
+  void setup(ShaderData *sd, int /* path_flag */, float3 weight)
   {
     PhongRampBsdf *bsdf = (PhongRampBsdf *)bsdf_alloc_osl(
         sd, sizeof(PhongRampBsdf), weight, &params);
diff --git a/intern/cycles/kernel/osl/emissive.cpp b/intern/cycles/kernel/osl/emissive.cpp
index 894727a5c7b..c29ddb13e2e 100644
--- a/intern/cycles/kernel/osl/emissive.cpp
+++ b/intern/cycles/kernel/osl/emissive.cpp
@@ -54,7 +54,7 @@ using namespace OSL;
 ///
 class GenericEmissiveClosure : public CClosurePrimitive {
  public:
-  void setup(const KernelGlobals *, ShaderData *sd, int /* path_flag */, float3 weight)
+  void setup(ShaderData *sd, int /* path_flag */, float3 weight)
   {
     emission_setup(sd, weight);
   }
diff --git a/intern/cycles/kernel/osl/osl_bssrdf.cpp b/intern/cycles/kernel/osl/osl_bssrdf.cpp
index b487aef09a1..dd52c33071c 100644
--- a/intern/cycles/kernel/osl/osl_bssrdf.cpp
+++ b/intern/cycles/kernel/osl/osl_bssrdf.cpp
@@ -67,7 +67,7 @@ class CBSSRDFClosure : public CClosurePrimitive {
     params.roughness = 0.0f;
   }
 
-  void setup(const KernelGlobals *, ShaderData *sd, int path_flag, float3 weight)
+  void setup(ShaderData *sd, int path_flag, float3 weight)
   {
     if (method == u_cubic) {
       alloc(sd, path_flag, weight, CLOSURE_BSSRDF_CUBIC_ID);
diff --git a/intern/cycles/kernel/osl/osl_closures.cpp b/intern/cycles/kernel/osl/osl_closures.cpp
index 7152a56bd70..27205df3732 100644
--- a/intern/cycles/kernel/osl/osl_closures.cpp
+++ b/intern/cycles/kernel/osl/osl_closures.cpp
@@ -227,9 +227,9 @@ CLOSURE_FLOAT3_PARAM(DiffuseClosure, params.N),
     return bsdf;
   }
 
-  void setup(const KernelGlobals *kg, ShaderData *sd, int path_flag, float3 weight)
+  void setup(ShaderData *sd, int path_flag, float3 weight)
   {
-    if (!skip(kg, sd, path_flag, LABEL_GLOSSY)) {
+    if (!skip(sd, path_flag, LABEL_GLOSSY)) {
       PrincipledHairBSDF *bsdf = (PrincipledHairBSDF *)alloc(sd, path_flag, weight);
       if (!bsdf) {
         return;
@@ -287,7 +287,7 @@ class PrincipledClearcoatClosure : public CBSDFClosure {
     return bsdf;
   }
 
-  void setup(const KernelGlobals *kg, ShaderData *sd, int path_flag, float3 weight)
+  void setup(ShaderData *sd, int path_flag, float3 weight)
   {
     MicrofacetBsdf *bsdf = alloc(sd, path_flag, weight);
     if (!bsdf) {
@@ -471,13 +471,12 @@ void OSLShader::register_closures(OSLShadingSystem *ss_)
 
 /* BSDF Closure */
 
-bool CBSDFClosure::skip(const KernelGlobals *kg,
-                        const ShaderData *sd,
-                        int path_flag,
-                        int scattering)
+bool CBSDFClosure::skip(const ShaderData *sd, int path_flag, int scattering)
 {
   /* caustic options */
   if ((scattering & LABEL_GLOSSY) && (path_flag & PATH_RAY_DIFFUSE)) {
+    KernelGlobals *kg = sd->osl_globals;
+
     if ((!kernel_data.integrator.caustics_reflective && (scattering & LABEL_REFLECT)) ||
         (!kernel_data.integrator.caustics_refractive && (scattering & LABEL_TRANSMIT))) {
       return true;
@@ -495,12 +494,12 @@ class MicrofacetFresnelClosure : public CBSDFClosure {
   float3 color;
   float3 cspec0;
 
-  MicrofacetBsdf *alloc(const KernelGlobals *kg, ShaderData *sd, int path_flag, float3 weight)
+  MicrofacetBsdf *alloc(ShaderData *sd, int path_flag, float3 weight)
   {
     /* Technically, the MultiGGX Glass closure may also transmit. However,
      * since this is set statically and only used for caustic flags, this
      * is probably as good as it gets. */
-    if (skip(kg, sd, path_flag, LABEL_GLOSSY | LABEL_REFLECT)) {
+    if (skip(sd, path_flag, LABEL_GLOSSY | LABEL_REFLECT)) {
       return NULL;
     }
 
@@ -525,9 +524,9 @@ class MicrofacetFresnelClosure : public CBSDFClosure {
 
 class MicrofacetGGXFresnelClosure : public MicrofacetFresnelClosure {
  public:
-  void setup(const KernelGlobals *kg, ShaderData *sd, int path_flag, float3 weight)
+  void setup(ShaderData *sd, int path_flag, float3 weight)
   {
-    MicrofacetBsdf *bsdf = alloc(kg, sd, path_flag, weight);
+    MicrofacetBsdf *bsdf = alloc(sd, path_flag, weight);
     if (!bsdf) {
       return;
     }
@@ -554,9 +553,9 @@ CCLOSURE_PREPARE(closure_bsdf_microfacet_ggx_fresnel_prepare, MicrofacetGGXFresn
 
 class MicrofacetGGXAnisoFresnelClosure : public MicrofacetFresnelClosure {
  public:
-  void setup(const KernelGlobals *kg, ShaderData *sd, int path_flag, float3 weight)
+  void setup(ShaderData *sd, int path_flag, float3 weight)
   {
-    MicrofacetBsdf *bsdf = alloc(kg, sd, path_flag, weight);
+    MicrofacetBsdf *bsdf = alloc(sd, path_flag, weight);
     if (!bsdf) {
       return;
     }
@@ -589,12 +588,12 @@ class MicrofacetMultiClosure : public CBSDFClosure {
   MicrofacetBsdf params;
   float3 color;
 
-  MicrofacetBsdf *alloc(const KernelGlobals *kg, ShaderData *sd, int path_flag, float3 weight)
+  MicrofacetBsdf *alloc(ShaderData *sd, int path_flag, float3 weight)
   {
     /* Technically, the MultiGGX closure may also transmit. However,
      * since this is set statically and only used for caustic flags, this
      * is probably as good as it gets. */
-    if (skip(kg, sd, path_flag, LABEL_GLOSSY | LABEL_REFLECT)) {
+    if (skip(sd, path_flag, LABEL_GLOSSY | LABEL_REFLECT)) {
       return NULL;
     }
 
@@ -619,9 +618,9 @@ class MicrofacetMultiClosure : public CBSDFClosure {
 
 class MicrofacetMultiGGXClosure : public MicrofacetMultiClosure {
  public:
-  void setup(const KernelGlobals *kg, ShaderData *sd, int path_flag, float3 weight)
+  void setup(ShaderData *sd, int path_flag, float3 weight)
   {
-    MicrofacetBsdf *bsdf = alloc(kg, sd, path_flag, weight);
+    MicrofacetBsdf *bsdf = alloc(sd, path_flag, weight);
     if (!bsdf) {
       return;
     }
@@ -647,9 +646,9 @@ CCLOSURE_PREPARE(closure_bsdf_microfacet_multi_ggx_prepare, MicrofacetMultiGGXCl
 
 class MicrofacetMultiGGXAnisoClosure : public MicrofacetMultiClosure {
  public:
-  void setup(const KernelGlobals *kg, ShaderData *sd, int path_flag, float3 weight)
+  void setup(ShaderData *sd, int path_flag, float3 weight)
   {
-    MicrofacetBsdf *bsdf = alloc(kg, sd, path_flag, weight);
+    MicrofacetBsdf *bsdf = alloc(sd, path_flag, weight);
     if (!bsdf) {
       return;
     }
@@ -679,9 +678,9 @@ class MicrofacetMultiGGXGlassClosure : public MicrofacetMultiClosure {
   {
   }
 
-  void setup(const KernelGlobals *kg, ShaderData *sd, int path_flag, float3 weight)
+  void setup(ShaderData *sd, int path_flag, float3 weight)
   {
-    MicrofacetBsdf *bsdf = alloc(kg, sd, path_flag, weight);
+    MicrofacetBsdf *bsdf = alloc(sd, path_flag, weight);
     if (!bsdf) {
       return;
     }
@@ -713,12 +712,12 @@ class MicrofacetMultiFresnelClosure : public CBSDFClosure {
   float3 color;
   float3 cspec0;
 
-  MicrofacetBsdf *alloc(const KernelGlobals *kg, ShaderData *sd, int path_flag, float3 weight)
+  MicrofacetBsdf *alloc(ShaderData *sd, int path_flag, float3 weight)
   {
     /* Technically, the MultiGGX closure may also transmit. However,
      * since this is set statically and only used for caustic flags, this
      * is probably as good as it gets. */
-    if (skip(kg, sd, path_flag, LABEL_GLOSSY | LABEL_REFLECT)) {
+    if (skip(sd, path_flag, LABEL_GLOSSY | LABEL_REFLECT)) {
       return NULL;
     }
 
@@ -743,9 +742,9 @@ class MicrofacetMultiFresnelClosure : public CBSDFClosure {
 
 class MicrofacetMultiGGXFresnelClosure : public MicrofacetMultiFresnelClosure {
  public:
-  void setup(const KernelGlobals *kg, ShaderData *sd, int path_flag, float3 weight)
+  void setup(ShaderData *sd, int path_flag, float3 weight)
   {
-    MicrofacetBsdf *bsdf = alloc(kg, sd, path_flag, weight);
+    MicrofacetBsdf *bsdf = alloc(sd, path_flag, weight);
     if (!bsdf) {
       return;
     }
@@ -773,9 +772,9 @@ CCLOSURE_PREPARE(closure_bsdf_microfacet

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list