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
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-04-22 18:27:12 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-04-22 18:27:12 +0400
commitdee74c299ff345bfd4d516db5f55d7fb255db5d7 (patch)
treee00bce103d2f86a8c5f1b047265105acf0e47061 /intern/cycles/kernel/osl/osl_services.cpp
parent919ecbe55d44dd13a8a07c354a00b9bfc9ec8596 (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.cpp14
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 */