diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-04-22 18:27:12 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-04-22 18:27:12 +0400 |
commit | dee74c299ff345bfd4d516db5f55d7fb255db5d7 (patch) | |
tree | e00bce103d2f86a8c5f1b047265105acf0e47061 /intern/cycles/kernel/osl/osl_services.cpp | |
parent | 919ecbe55d44dd13a8a07c354a00b9bfc9ec8596 (diff) |
Attempt to fix #35041 and #34725: cycles crash with OSL and both a 3D viewport
and preview running at the same time.
It seems there's something in OSL/LLVM that's not thread safe, but I couldn't
figure out what exactly. Now all renders share the same OSL ShadingSystem which
should avoid the problem.
Diffstat (limited to 'intern/cycles/kernel/osl/osl_services.cpp')
-rw-r--r-- | intern/cycles/kernel/osl/osl_services.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/intern/cycles/kernel/osl/osl_services.cpp b/intern/cycles/kernel/osl/osl_services.cpp index 1c0a149d6e6..7c7248b3b34 100644 --- a/intern/cycles/kernel/osl/osl_services.cpp +++ b/intern/cycles/kernel/osl/osl_services.cpp @@ -112,8 +112,8 @@ bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr /* this is only used for shader and object space, we don't really have * a concept of shader space, so we just use object space for both. */ if (xform) { - KernelGlobals *kg = kernel_globals; const ShaderData *sd = (const ShaderData *)xform; + KernelGlobals *kg = sd->osl_globals; int object = sd->object; if (object != ~0) { @@ -142,8 +142,8 @@ bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, OSL::Transform /* this is only used for shader and object space, we don't really have * a concept of shader space, so we just use object space for both. */ if (xform) { - KernelGlobals *kg = kernel_globals; const ShaderData *sd = (const ShaderData *)xform; + KernelGlobals *kg = sd->osl_globals; int object = sd->object; if (object != ~0) { @@ -235,7 +235,7 @@ bool OSLRenderServices::get_matrix(OSL::Matrix44 &result, OSL::TransformationPtr #ifdef __OBJECT_MOTION__ Transform tfm = sd->ob_tfm; #else - KernelGlobals *kg = kernel_globals; + KernelGlobals *kg = sd->osl_globals; Transform tfm = object_fetch_transform(kg, object, OBJECT_TRANSFORM); #endif tfm = transform_transpose(tfm); @@ -260,7 +260,7 @@ bool OSLRenderServices::get_inverse_matrix(OSL::Matrix44 &result, OSL::Transform #ifdef __OBJECT_MOTION__ Transform tfm = sd->ob_itfm; #else - KernelGlobals *kg = kernel_globals; + KernelGlobals *kg = sd->osl_globals; Transform tfm = object_fetch_transform(kg, object, OBJECT_INVERSE_TRANSFORM); #endif tfm = transform_transpose(tfm); @@ -662,8 +662,8 @@ bool OSLRenderServices::get_background_attribute(KernelGlobals *kg, ShaderData * bool OSLRenderServices::get_attribute(void *renderstate, bool derivatives, ustring object_name, TypeDesc type, ustring name, void *val) { - KernelGlobals *kg = kernel_globals; ShaderData *sd = (ShaderData *)renderstate; + KernelGlobals *kg = sd->osl_globals; int object, prim, segment; /* lookup of attribute on another object */ @@ -861,7 +861,7 @@ bool OSLRenderServices::trace(TraceOpt &options, OSL::ShaderGlobals *sg, tracedata->init = true; /* raytrace */ - return scene_intersect(kernel_globals, &ray, ~0, &tracedata->isect); + return scene_intersect(sd->osl_globals, &ray, ~0, &tracedata->isect); } @@ -880,8 +880,8 @@ bool OSLRenderServices::getmessage(OSL::ShaderGlobals *sg, ustring source, ustri return set_attribute_float(f, type, derivatives, val); } else { - KernelGlobals *kg = kernel_globals; ShaderData *sd = &tracedata->sd; + KernelGlobals *kg = sd->osl_globals; if(!tracedata->setup) { /* lazy shader data setup */ |