Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/intern
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@gmail.com>2019-06-27 13:39:10 +0300
committerBrecht Van Lommel <brechtvanlommel@gmail.com>2019-06-27 13:46:04 +0300
commit5eb156e7692b9ab24338c73f82360338396cdbe1 (patch)
treef8211e22b996731939c2be6ecf6afa240191b13c /intern
parent6f516fcc631c177a1c9f62b3a22e0c4e0e9713d4 (diff)
Fix T66171: Cycles OSL trace() crashing in displacement shaders
This is not supported, meshes do not exist in the BVH before displacement.
Diffstat (limited to 'intern')
-rw-r--r--intern/cycles/kernel/osl/osl_services.cpp9
1 files changed, 8 insertions, 1 deletions
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,