[Bf-blender-cvs] [5eb156e7692] master: Fix T66171: Cycles OSL trace() crashing in displacement shaders

Brecht Van Lommel noreply at git.blender.org
Thu Jun 27 12:46:21 CEST 2019


Commit: 5eb156e7692b9ab24338c73f82360338396cdbe1
Author: Brecht Van Lommel
Date:   Thu Jun 27 12:39:10 2019 +0200
Branches: master
https://developer.blender.org/rB5eb156e7692b9ab24338c73f82360338396cdbe1

Fix T66171: Cycles OSL trace() crashing in displacement shaders

This is not supported, meshes do not exist in the BVH before displacement.

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

M	intern/cycles/kernel/osl/osl_services.cpp

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

diff --git a/intern/cycles/kernel/osl/osl_services.cpp b/intern/cycles/kernel/osl/osl_services.cpp
index 9196caad1b3..316d24b0954 100644
--- a/intern/cycles/kernel/osl/osl_services.cpp
+++ b/intern/cycles/kernel/osl/osl_services.cpp
@@ -1392,9 +1392,16 @@ bool OSLRenderServices::trace(TraceOpt &options,
   tracedata->init = true;
   tracedata->sd.osl_globals = sd->osl_globals;
 
+  KernelGlobals *kg = sd->osl_globals;
+
+  /* Can't raytrace from shaders like displacement, before BVH exists. */
+  if (kernel_data.bvh.bvh_layout == BVH_LAYOUT_NONE) {
+    return false;
+  }
+
   /* Raytrace, leaving out shadow opaque to avoid early exit. */
   uint visibility = PATH_RAY_ALL_VISIBILITY - PATH_RAY_SHADOW_OPAQUE;
-  return scene_intersect(sd->osl_globals, ray, visibility, &tracedata->isect);
+  return scene_intersect(kg, ray, visibility, &tracedata->isect);
 }
 
 bool OSLRenderServices::getmessage(OSL::ShaderGlobals *sg,



More information about the Bf-blender-cvs mailing list