diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-08-03 16:57:22 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-08-03 16:57:22 +0300 |
commit | 7cfb05dcb0790cc4aa209ecb63649aa756cb730f (patch) | |
tree | 28aa72d4ef934d2f3c3206e653a522f9844ed8ba /source/blender/blenkernel/intern/depsgraph.c | |
parent | b4e1b7b18c16f5fa7e8b7f475061e73dad3f4338 (diff) |
OpenSubdiv: Resolve crashes when other object depends on subsurf-ed object
Cases like using subsurfed object as a boolean operand can't be evaluated
on GPU and needs to have all the CCG on CPU.
This commit resolves existing configuration to survive, but new configurations
would need to have some sort of forced object update so all the data is being
moved on CPU if it was previously on GPU.
Diffstat (limited to 'source/blender/blenkernel/intern/depsgraph.c')
-rw-r--r-- | source/blender/blenkernel/intern/depsgraph.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 2fd53045e29..b7ad43869b7 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -1138,6 +1138,13 @@ void dag_add_relation(DagForest *forest, DagNode *fob1, DagNode *fob2, short rel /* parent relation is for cycle checking */ dag_add_parent_relation(forest, fob1, fob2, rel, name); + /* TODO(sergey): Find a better place for this. */ +#ifdef WITH_OPENSUBDIV + if ((rel & DAG_RL_DATA_DATA) != 0) { + fob1->eval_flags |= DAG_EVAL_NEED_CPU; + } +#endif + while (itA) { /* search if relation exist already */ if (itA->node == fob2) { itA->type |= rel; |