Depsgraph: Pass bmain to depsgraph object creation
authorSergey Sharybin <sergey.vfx@gmail.com>
Mon, 9 Sep 2019 12:49:05 +0000 (14:49 +0200)
committerSergey Sharybin <sergey.vfx@gmail.com>
Wed, 11 Sep 2019 08:43:27 +0000 (10:43 +0200)
Currently unused, but will allow to keep of an owner of the depsgraph.

Could also simplify other APIs in the future by avoiding to pass bmain
explicitly to relation update functions and things like that.

33 files changed:
source/blender/alembic/intern/alembic_capi.cc
source/blender/blenkernel/BKE_scene.h
source/blender/blenkernel/intern/context.c
source/blender/blenkernel/intern/scene.c
source/blender/blenkernel/intern/sequencer.c
source/blender/collada/BlenderContext.cpp
source/blender/depsgraph/DEG_depsgraph.h
source/blender/depsgraph/intern/depsgraph.cc
source/blender/depsgraph/intern/depsgraph.h
source/blender/depsgraph/intern/depsgraph_build.cc
source/blender/depsgraph/intern/depsgraph_debug.cc
source/blender/depsgraph/intern/depsgraph_tag.cc
source/blender/draw/engines/eevee/eevee_lightcache.c
source/blender/draw/intern/draw_manager.c
source/blender/editors/object/object_bake_api.c
source/blender/editors/render/render_update.c
source/blender/editors/scene/scene_edit.c
source/blender/editors/screen/screen_ops.c
source/blender/editors/space_info/info_stats.c
source/blender/editors/space_node/node_edit.c
source/blender/editors/transform/transform_convert_object.c
source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
source/blender/makesrna/intern/rna_layer.c
source/blender/makesrna/intern/rna_scene_api.c
source/blender/makesrna/intern/rna_space_api.c
source/blender/python/gpu/gpu_py_offscreen.c
source/blender/render/intern/source/external_engine.c
source/blender/render/intern/source/pipeline.c
source/blender/windowmanager/intern/wm_draw.c
source/blender/windowmanager/intern/wm_event_system.c
source/blender/windowmanager/intern/wm_init_exit.c
tests/gtests/alembic/abc_export_test.cc

index 13533ef99723d6fee52e19257eceeb71641a89c6..9ace0a8faa9be3f6382f0648fce6cb652bef878a 100644 (file)
@@ -330,7 +330,7 @@ bool ABC_export(Scene *scene,
    * hardcore refactoring. */
   new (&job->settings) ExportSettings();
   job->settings.scene = scene;
-  job->settings.depsgraph = DEG_graph_new(scene, job->view_layer, DAG_EVAL_RENDER);
+  job->settings.depsgraph = DEG_graph_new(job->bmain, scene, job->view_layer, DAG_EVAL_RENDER);
 
   /* TODO(Sybren): for now we only export the active scene layer.
    * Later in the 2.8 development process this may be replaced by using
index d25288fc240bdd4b6163546ae1e2571b0c02407b..846b8d21f28e9a46d467780d47a3889722d0b41f 100644 (file)
@@ -220,7 +220,8 @@ void BKE_scene_allocate_depsgraph_hash(struct Scene *scene);
 void BKE_scene_ensure_depsgraph_hash(struct Scene *scene);
 void BKE_scene_free_depsgraph_hash(struct Scene *scene);
 
-struct Depsgraph *BKE_scene_get_depsgraph(struct Scene *scene,
+struct Depsgraph *BKE_scene_get_depsgraph(struct Main *bmain,
+                                          struct Scene *scene,
                                           struct ViewLayer *view_layer,
                                           bool allocate);
 
index bcf6bb338fff8e9b9e9275d8c279251caa71f22f..7f2f04d7eb53381653d2d6ffef4e55be8774519e 100644 (file)
@@ -1351,9 +1351,10 @@ int CTX_data_editable_gpencil_strokes(const bContext *C, ListBase *list)
 
 Depsgraph *CTX_data_depsgraph_pointer(const bContext *C)
 {
+  Main *bmain = CTX_data_main(C);
   Scene *scene = CTX_data_scene(C);
   ViewLayer *view_layer = CTX_data_view_layer(C);
-  Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+  Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, true);
   /* Dependency graph might have been just allocated, and hence it will not be marked.
    * This confuses redo system due to the lack of flushing changes back to the original data.
    * In the future we would need to check whether the CTX_wm_window(C)  is in editing mode (as an
@@ -1381,7 +1382,8 @@ Depsgraph *CTX_data_ensure_evaluated_depsgraph(const bContext *C)
 
 Depsgraph *CTX_data_depsgraph_on_load(const bContext *C)
 {
+  Main *bmain = CTX_data_main(C);
   Scene *scene = CTX_data_scene(C);
   ViewLayer *view_layer = CTX_data_view_layer(C);
-  return BKE_scene_get_depsgraph(scene, view_layer, false);
+  return BKE_scene_get_depsgraph(bmain, scene, view_layer, false);
 }
index dbb39184b1eda8ba58db321ac9d8051be64cef7e..aa812dff877a7e8697d5313dc5ccee91bc6372ca 100644 (file)
@@ -1408,7 +1408,7 @@ void BKE_scene_graph_update_for_newframe(Depsgraph *depsgraph, Main *bmain)
  */
 void BKE_scene_view_layer_graph_evaluated_ensure(Main *bmain, Scene *scene, ViewLayer *view_layer)
 {
-  Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+  Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, true);
   DEG_make_active(depsgraph);
   BKE_scene_graph_update_tagged(depsgraph, bmain);
 }
@@ -2040,7 +2040,7 @@ void BKE_scene_free_depsgraph_hash(Scene *scene)
 
 /* Query depsgraph for a specific contexts. */
 
-Depsgraph *BKE_scene_get_depsgraph(Scene *scene, ViewLayer *view_layer, bool allocate)
+Depsgraph *BKE_scene_get_depsgraph(Main *bmain, Scene *scene, ViewLayer *view_layer, bool allocate)
 {
   BLI_assert(scene != NULL);
   BLI_assert(view_layer != NULL);
@@ -2064,7 +2064,7 @@ Depsgraph *BKE_scene_get_depsgraph(Scene *scene, ViewLayer *view_layer, bool all
             scene->depsgraph_hash, &key, (void ***)&key_ptr, (void ***)&depsgraph_ptr)) {
       *key_ptr = MEM_mallocN(sizeof(DepsgraphKey), __func__);
       **key_ptr = key;
-      *depsgraph_ptr = DEG_graph_new(scene, view_layer, DAG_EVAL_VIEWPORT);
+      *depsgraph_ptr = DEG_graph_new(bmain, scene, view_layer, DAG_EVAL_VIEWPORT);
       /* TODO(sergey): Would be cool to avoid string format print,
        * but is a bit tricky because we can't know in advance  whether
        * we will ever enable debug messages for this depsgraph.
index b29e07bb56de044676ab30b0c95d383a3ce568c7..dca6f05e0deff7e03b55c39695632123ca4ec621 100644 (file)
@@ -3534,7 +3534,7 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context,
     }
 
     /* opengl offscreen render */
-    depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+    depsgraph = BKE_scene_get_depsgraph(context->bmain, scene, view_layer, true);
     BKE_scene_graph_update_for_newframe(depsgraph, context->bmain);
     ibuf = sequencer_view3d_cb(
         /* set for OpenGL render (NULL when scrubbing) */
index 709f84c3f772575dafc10bcfb45684c020c9c52c..8735d71ec40bcca3e8f1d12b09f7d243a9fde13a 100644 (file)
@@ -121,7 +121,7 @@ bContext *BlenderContext::get_context()
 Depsgraph *BlenderContext::get_depsgraph()
 {
   if (!depsgraph) {
-    depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+    depsgraph = BKE_scene_get_depsgraph(main, scene, view_layer, true);
   }
   return depsgraph;
 }
index d4518729d996bcc415ebe8542f59f90e0198015f..e44dddbcf542eac8790e5c98873651d2b5048ec8 100644 (file)
@@ -87,7 +87,10 @@ extern "C" {
 
 /* Create new Depsgraph instance */
 // TODO: what args are needed here? What's the building-graph entry point?
-Depsgraph *DEG_graph_new(struct Scene *scene, struct ViewLayer *view_layer, eEvaluationMode mode);
+Depsgraph *DEG_graph_new(struct Main *bmain,
+                         struct Scene *scene,
+                         struct ViewLayer *view_layer,
+                         eEvaluationMode mode);
 
 /* Free Depsgraph itself and all its data */
 void DEG_graph_free(Depsgraph *graph);
index 6d3aed65a142144cf4b65c1d21844bb1785dbb47..6e98907597b1104c8570a52269bc4527f6702c5d 100644 (file)
@@ -65,10 +65,11 @@ template<typename T> static void remove_from_vector(vector<T> *vector, const T &
   vector->erase(std::remove(vector->begin(), vector->end(), value), vector->end());
 }
 
-Depsgraph::Depsgraph(Scene *scene, ViewLayer *view_layer, eEvaluationMode mode)
+Depsgraph::Depsgraph(Main *bmain, Scene *scene, ViewLayer *view_layer, eEvaluationMode mode)
     : time_source(NULL),
       need_update(true),
       need_update_time(false),
+      bmain(bmain),
       scene(scene),
       view_layer(view_layer),
       mode(mode),
@@ -313,9 +314,10 @@ ID *Depsgraph::get_cow_id(const ID *id_orig) const
 /* Public Graph API */
 
 /* Initialize a new Depsgraph */
-Depsgraph *DEG_graph_new(Scene *scene, ViewLayer *view_layer, eEvaluationMode mode)
+Depsgraph *DEG_graph_new(Main *bmain, Scene *scene, ViewLayer *view_layer, eEvaluationMode mode)
 {
-  DEG::Depsgraph *deg_depsgraph = OBJECT_GUARDED_NEW(DEG::Depsgraph, scene, view_layer, mode);
+  DEG::Depsgraph *deg_depsgraph = OBJECT_GUARDED_NEW(
+      DEG::Depsgraph, bmain, scene, view_layer, mode);
   return reinterpret_cast<Depsgraph *>(deg_depsgraph);
 }
 
index 96b1a2a1f8a1dee1a77d0ee69ab2a9b3c7945a71..30ae4edde34e78f2f3cb2b4628c797e93ff3c3a2 100644 (file)
@@ -100,7 +100,7 @@ struct Depsgraph {
   typedef vector<OperationNode *> OperationNodes;
   typedef vector<IDNode *> IDDepsNodes;
 
-  Depsgraph(Scene *scene, ViewLayer *view_layer, eEvaluationMode mode);
+  Depsgraph(Main *bmain, Scene *scene, ViewLayer *view_layer, eEvaluationMode mode);
   ~Depsgraph();
 
   TimeSourceNode *add_time_source();
@@ -172,7 +172,8 @@ struct Depsgraph {
    * Mainly used by graph evaluation. */
   SpinLock lock;
 
-  /* Scene, layer, mode this dependency graph is built for. */
+  /* Main, scene, layer, mode this dependency graph is built for. */
+  Main *bmain;
   Scene *scene;
   ViewLayer *view_layer;
   eEvaluationMode mode;
index dd2d7f70ed555c74a6a147c6db207d54774b86ad..968ed8ef4033750b84db933bc71dfe3a400b092b 100644 (file)
@@ -358,7 +358,7 @@ void DEG_relations_tag_update(Main *bmain)
   DEG_GLOBAL_DEBUG_PRINTF(TAG, "%s: Tagging relations for update.\n", __func__);
   LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
     LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
-      Depsgraph *depsgraph = (Depsgraph *)BKE_scene_get_depsgraph(scene, view_layer, false);
+      Depsgraph *depsgraph = (Depsgraph *)BKE_scene_get_depsgraph(bmain, scene, view_layer, false);
       if (depsgraph != NULL) {
         DEG_graph_tag_relations_update(depsgraph);
       }
index c5a756102cadacea43991caad466991d693daa63..d079c958e04f1e53164cbb039fed9c4325ef3fb7 100644 (file)
@@ -91,7 +91,7 @@ bool DEG_debug_graph_relations_validate(Depsgraph *graph,
                                         Scene *scene,
                                         ViewLayer *view_layer)
 {
-  Depsgraph *temp_depsgraph = DEG_graph_new(scene, view_layer, DEG_get_mode(graph));
+  Depsgraph *temp_depsgraph = DEG_graph_new(bmain, scene, view_layer, DEG_get_mode(graph));
   bool valid = true;
   DEG_graph_build_from_view_layer(temp_depsgraph, bmain, scene, view_layer);
   if (!DEG_debug_compare(temp_depsgraph, graph)) {
index 647837bd75856ff59a8ed556915ed86f42ec99be..fd74529a30d483e4ebffe166f600f4aed3ed8038 100644 (file)
@@ -607,7 +607,7 @@ void id_tag_update(Main *bmain, ID *id, int flag, eUpdateSource update_source)
   graph_id_tag_update(bmain, NULL, id, flag, update_source);
   LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
     LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
-      Depsgraph *depsgraph = (Depsgraph *)BKE_scene_get_depsgraph(scene, view_layer, false);
+      Depsgraph *depsgraph = (Depsgraph *)BKE_scene_get_depsgraph(bmain, scene, view_layer, false);
       if (depsgraph != NULL) {
         graph_id_tag_update(bmain, depsgraph, id, flag, update_source);
       }
@@ -771,7 +771,7 @@ void DEG_id_type_tag(Main *bmain, short id_type)
 {
   LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
     LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
-      Depsgraph *depsgraph = (Depsgraph *)BKE_scene_get_depsgraph(scene, view_layer, false);
+      Depsgraph *depsgraph = (Depsgraph *)BKE_scene_get_depsgraph(bmain, scene, view_layer, false);
       if (depsgraph != NULL) {
         DEG_graph_id_type_tag(depsgraph, id_type);
       }
@@ -790,7 +790,7 @@ void DEG_on_visible_update(Main *bmain, const bool do_time)
 {
   LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
     LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
-      Depsgraph *depsgraph = (Depsgraph *)BKE_scene_get_depsgraph(scene, view_layer, false);
+      Depsgraph *depsgraph = (Depsgraph *)BKE_scene_get_depsgraph(bmain, scene, view_layer, false);
       if (depsgraph != NULL) {
         DEG_graph_on_visible_update(bmain, depsgraph, do_time);
       }
index f75bff6a914838194d4710d3b36c893b0e201659..261b7f00e420c6ff6889868108a13bd889e5ab3c 100644 (file)
@@ -561,7 +561,7 @@ wmJob *EEVEE_lightbake_job_create(struct wmWindowManager *wm,
     /* Cannot reuse depsgraph for now because we cannot get the update from the
      * main database directly. TODO reuse depsgraph and only update positions. */
     /* lbake->depsgraph = old_lbake->depsgraph; */
-    lbake->depsgraph = DEG_graph_new(scene, view_layer, DAG_EVAL_RENDER);
+    lbake->depsgraph = DEG_graph_new(bmain, scene, view_layer, DAG_EVAL_RENDER);
 
     lbake->mutex = BLI_mutex_alloc();
 
@@ -612,7 +612,7 @@ void *EEVEE_lightbake_job_data_alloc(struct Main *bmain,
 
   EEVEE_LightBake *lbake = MEM_callocN(sizeof(EEVEE_LightBake), "EEVEE_LightBake");
 
-  lbake->depsgraph = DEG_graph_new(scene, view_layer, DAG_EVAL_RENDER);
+  lbake->depsgraph = DEG_graph_new(bmain, scene, view_layer, DAG_EVAL_RENDER);
   lbake->scene = scene;
   lbake->bmain = bmain;
   lbake->view_layer_input = view_layer;
index 6719bd7943f23c39a0e503b160b80f00cae2651b..4538b16e2ce18ee0df2d11c7fa97f04326de4747 100644 (file)
@@ -1025,7 +1025,7 @@ void DRW_cache_free_old_batches(Main *bmain)
 
   for (scene = bmain->scenes.first; scene; scene = scene->id.next) {
     for (view_layer = scene->view_layers.first; view_layer; view_layer = view_layer->next) {
-      Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, false);
+      Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, false);
       if (depsgraph == NULL) {
         continue;
       }
index 410ccccbd0d06f2f3f1202e2636ea698850a50aa..d9baec7c3cad1f2d15606c4451365c97ecc81c66 100644 (file)
@@ -745,7 +745,7 @@ static int bake(Render *re,
 {
   /* We build a depsgraph for the baking,
    * so we don't need to change the original data to adjust visibility and modifiers. */
-  Depsgraph *depsgraph = DEG_graph_new(scene, view_layer, DAG_EVAL_RENDER);
+  Depsgraph *depsgraph = DEG_graph_new(bmain, scene, view_layer, DAG_EVAL_RENDER);
   DEG_graph_build_from_view_layer(depsgraph, bmain, scene, view_layer);
 
   int op_result = OPERATOR_CANCELLED;
index 82e4d5777772e464ea9e711db5488f2f0b439f26..3918737d56032bcc7d83eae3df26f45f8d4730a1 100644 (file)
@@ -194,7 +194,7 @@ void ED_render_engine_changed(Main *bmain)
     update_ctx.scene = scene;
     LISTBASE_FOREACH (ViewLayer *, view_layer, &scene->view_layers) {
       /* TDODO(sergey): Iterate over depsgraphs instead? */
-      update_ctx.depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+      update_ctx.depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, true);
       update_ctx.view_layer = view_layer;
       ED_render_id_flush_update(&update_ctx, &scene->id);
     }
index b04719d7782432e08d497f2c346a0e8c0c117e66..84d6610242ae94ae9e933b900e03ea306d27df0f 100644 (file)
@@ -121,7 +121,7 @@ bool ED_scene_delete(bContext *C, Main *bmain, Scene *scene)
 /* Depsgraph updates after scene becomes active in a window. */
 void ED_scene_change_update(Main *bmain, Scene *scene, ViewLayer *layer)
 {
-  Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, layer, true);
+  Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, layer, true);
 
   BKE_scene_set_background(bmain, scene);
   DEG_graph_relations_update(depsgraph, bmain, scene, layer);
index 50e5597ac0c99b9ca37f66ca6425600978fef2a0..f29535a7f0badaf0003a3e3713b5547121ae439e 100644 (file)
@@ -4359,7 +4359,7 @@ static int screen_animation_step(bContext *C, wmOperator *UNUSED(op), const wmEv
     Main *bmain = CTX_data_main(C);
     Scene *scene = CTX_data_scene(C);
     ViewLayer *view_layer = WM_window_get_active_view_layer(win);
-    Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, false);
+    Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, false);
     Scene *scene_eval = (depsgraph != NULL) ? DEG_get_evaluated_scene(depsgraph) : NULL;
     wmTimer *wt = screen->animtimer;
     ScreenAnimData *sad = wt->customdata;
index c76f02129a5ff7d7788a371e2b87bc49c7ad5064..b51aec90e4f844bdba0d26ad79156b8ca7eb87b7 100644 (file)
@@ -581,7 +581,7 @@ const char *ED_info_stats_string(Main *bmain, Scene *scene, ViewLayer *view_laye
   if (wm->is_interface_locked) {
     return "";
   }
-  Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+  Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, true);
   if (!view_layer->stats) {
     stats_update(depsgraph, view_layer);
   }
index 2b0627251cd1aa4524539b2eccbc951999ce66db..8811918b552ef795d3f5a49c2a93b71f57135c0a 100644 (file)
@@ -204,7 +204,7 @@ static void compo_initjob(void *cjv)
   Scene *scene = cj->scene;
   ViewLayer *view_layer = cj->view_layer;
 
-  cj->compositor_depsgraph = DEG_graph_new(scene, view_layer, DAG_EVAL_RENDER);
+  cj->compositor_depsgraph = DEG_graph_new(bmain, scene, view_layer, DAG_EVAL_RENDER);
   DEG_graph_build_for_compositor_preview(
       cj->compositor_depsgraph, bmain, scene, view_layer, cj->ntree);
 
index 6fe3c74e2336545af92d515332fae89457854017..e61a00a0d31aa35341f71598ce47ef919c5b5509 100644 (file)
@@ -519,7 +519,7 @@ static void set_trans_object_base_flags(TransInfo *t)
   ViewLayer *view_layer = t->view_layer;
   View3D *v3d = t->view;
   Scene *scene = t->scene;
-  Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+  Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, true);
   /* NOTE: if Base selected and has parent selected:
    *   base->flag_legacy = BA_WAS_SEL
    */
@@ -592,8 +592,9 @@ static int count_proportional_objects(TransInfo *t)
   int total = 0;
   ViewLayer *view_layer = t->view_layer;
   View3D *v3d = t->view;
+  struct Main *bmain = CTX_data_main(t->context);
   Scene *scene = t->scene;
-  Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+  Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, true);
   /* Clear all flags we need. It will be used to detect dependencies. */
   trans_object_base_deps_flag_prepare(view_layer);
   /* Rotations around local centers are allowed to propagate, so we take all objects. */
index eb4c16a7cfb02698cc870df264d3b6bdcf19c61f..06087cd7fa6bf4ae2ce7118bbab0f5e3be8047aa 100644 (file)
@@ -160,7 +160,8 @@ BlenderStrokeRenderer::BlenderStrokeRenderer(Render *re, int render_count) : Str
   _nodetree_hash = BLI_ghash_ptr_new("BlenderStrokeRenderer::_nodetree_hash");
 
   // Depsgraph
-  freestyle_depsgraph = DEG_graph_new(freestyle_scene, view_layer, DAG_EVAL_RENDER);
+  freestyle_depsgraph = DEG_graph_new(
+      freestyle_bmain, freestyle_scene, view_layer, DAG_EVAL_RENDER);
   DEG_graph_id_tag_update(freestyle_bmain, freestyle_depsgraph, &freestyle_scene->id, 0);
   DEG_graph_id_tag_update(freestyle_bmain, freestyle_depsgraph, &object_camera->id, 0);
   DEG_graph_tag_relations_update(freestyle_depsgraph);
index 9fee340e62e5ffcf378cd2a0173233d4942d3308..afa14d9b1f1b03d12b3b94435f1ef540fffbbc09 100644 (file)
@@ -649,7 +649,7 @@ Render *FRS_do_stroke_rendering(Render *re, ViewLayer *view_layer, int render)
   /* Create depsgraph and evaluate scene. */
   ViewLayer *scene_view_layer = (ViewLayer *)BLI_findstring(
       &re->scene->view_layers, view_layer->name, offsetof(ViewLayer, name));
-  Depsgraph *depsgraph = DEG_graph_new(re->scene, scene_view_layer, DAG_EVAL_RENDER);
+  Depsgraph *depsgraph = DEG_graph_new(re->main, re->scene, scene_view_layer, DAG_EVAL_RENDER);
   BKE_scene_graph_update_for_newframe(depsgraph, re->main);
 
   // prepare Freestyle:
index 1ad006cbc377ab33b2541fa6d085882745175347..3c1b30ab7bdd1f3f24d8f5eeb96f33a8b99e87bc 100644 (file)
@@ -156,7 +156,10 @@ static PointerRNA rna_ViewLayer_depsgraph_get(PointerRNA *ptr)
   if (GS(id->name) == ID_SCE) {
     Scene *scene = (Scene *)id;
     ViewLayer *view_layer = (ViewLayer *)ptr->data;
-    Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, false);
+    // NOTE: We don't allocate new depsgraph here, so the bmain is ignored. So it's easier to pass
+    // NULL.
+    // Still weak though.
+    Depsgraph *depsgraph = BKE_scene_get_depsgraph(NULL, scene, view_layer, false);
     return rna_pointer_inherit_refine(ptr, &RNA_Depsgraph, depsgraph);
   }
   return PointerRNA_NULL;
@@ -177,7 +180,7 @@ static void rna_ViewLayer_update_tagged(ID *id_ptr, ViewLayer *view_layer, Main
 #  endif
 
   Scene *scene = (Scene *)id_ptr;
-  Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+  Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, true);
   /* NOTE: This is similar to CTX_data_depsgraph_pointer(). Ideally such access would be
    * de-duplicated across all possible cases, but for now this is safest and easiest way to go.
    *
index bea22d465a9c1428d47ecc951ce9145654efbe36..2b1b23a40f45dd2add8d443b8671b4c1debc881d 100644 (file)
@@ -80,7 +80,7 @@ static void rna_Scene_frame_set(Scene *scene, Main *bmain, int frame, float subf
 
   for (ViewLayer *view_layer = scene->view_layers.first; view_layer != NULL;
        view_layer = view_layer->next) {
-    Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+    Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, true);
     BKE_scene_graph_update_for_newframe(depsgraph, bmain);
   }
 
@@ -156,7 +156,7 @@ static void rna_Scene_ray_cast(Scene *scene,
 {
   normalize_v3(direction);
 
-  Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+  Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, true);
   SnapObjectContext *sctx = ED_transform_snap_object_context_create(bmain, scene, depsgraph, 0);
 
   bool ret = ED_transform_snap_object_project_ray_ex(sctx,
index 52a197240da6998a6b1aaaef57dfead41d70d727..cbaa407646fe7e66df52542bbb500b4ee4554717 100644 (file)
@@ -40,6 +40,7 @@ static void rna_RegionView3D_update(ID *id, RegionView3D *rv3d, bContext *C)
   area_region_from_regiondata(sc, rv3d, &sa, &ar);
 
   if (sa && ar && sa->spacetype == SPACE_VIEW3D) {
+    Main *bmain = CTX_data_main(C);
     View3D *v3d = sa->spacedata.first;
     wmWindowManager *wm = CTX_wm_manager(C);
     wmWindow *win;
@@ -48,7 +49,7 @@ static void rna_RegionView3D_update(ID *id, RegionView3D *rv3d, bContext *C)
       if (WM_window_get_active_screen(win) == sc) {
         Scene *scene = WM_window_get_active_scene(win);
         ViewLayer *view_layer = WM_window_get_active_view_layer(win);
-        Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+        Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, true);
 
         ED_view3d_update_viewmat(depsgraph, scene, v3d, ar, NULL, NULL, NULL, false);
         break;
index b5f4d26220a647af2e4dbbbd69f2b8b0b4570c57..70f768968983e0e2ae3926abc0421bdd60de48d5 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "BLI_utildefines.h"
 
+#include "BKE_global.h"
 #include "BKE_library.h"
 #include "BKE_scene.h"
 
@@ -238,7 +239,7 @@ static PyObject *bpygpu_offscreen_draw_view3d(BPyGPUOffScreen *self,
 
   BLI_assert(BKE_id_is_in_global_main(&scene->id));
 
-  depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+  depsgraph = BKE_scene_get_depsgraph(G_MAIN, scene, view_layer, true);
 
   rv3d_mats = ED_view3d_mats_rv3d_backup(ar->regiondata);
 
index 0db1a4b81ae831204de11705ed4e0ce8a4465d0f..d3080ebe3edb5b5d13b9e290309894ad54903b1a 100644 (file)
@@ -509,7 +509,7 @@ static void engine_depsgraph_init(RenderEngine *engine, ViewLayer *view_layer)
   Main *bmain = engine->re->main;
   Scene *scene = engine->re->scene;
 
-  engine->depsgraph = DEG_graph_new(scene, view_layer, DAG_EVAL_RENDER);
+  engine->depsgraph = DEG_graph_new(bmain, scene, view_layer, DAG_EVAL_RENDER);
   DEG_debug_name_set(engine->depsgraph, "RENDER");
 
   if (engine->re->r.scemode & R_BUTS_PREVIEW) {
index e7ac70dd57f6865e8dd590a946f184e938f40925..9ba3e272e8cdc540e9d1bcf2e522816dcfc4e326 100644 (file)
@@ -1953,7 +1953,7 @@ static void update_physics_cache(Render *re,
   baker.bmain = re->main;
   baker.scene = scene;
   baker.view_layer = view_layer;
-  baker.depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+  baker.depsgraph = BKE_scene_get_depsgraph(re->main, scene, view_layer, true);
   baker.bake = 0;
   baker.render = 1;
   baker.anim_init = 1;
@@ -2069,7 +2069,7 @@ static void render_init_depsgraph(Render *re)
   Scene *scene = re->scene;
   ViewLayer *view_layer = BKE_view_layer_default_render(re->scene);
 
-  re->pipeline_depsgraph = DEG_graph_new(scene, view_layer, DAG_EVAL_RENDER);
+  re->pipeline_depsgraph = DEG_graph_new(re->main, scene, view_layer, DAG_EVAL_RENDER);
   DEG_debug_name_set(re->pipeline_depsgraph, "RENDER PIPELINE");
 
   /* Make sure there is a correct evaluated scene pointer. */
index 0266a30dea6ae7fafe53aa8ca4d4102e962ea1af..f0254f937ac252f2e5d8ef13ff05add210fddd8b 100644 (file)
@@ -831,11 +831,11 @@ static void wm_draw_window(bContext *C, wmWindow *win)
 /****************** main update call **********************/
 
 /* quick test to prevent changing window drawable */
-static bool wm_draw_update_test_window(wmWindow *win)
+static bool wm_draw_update_test_window(Main *bmain, wmWindow *win)
 {
   Scene *scene = WM_window_get_active_scene(win);
   ViewLayer *view_layer = WM_window_get_active_view_layer(win);
-  struct Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+  struct Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, true);
   bScreen *screen = WM_window_get_active_screen(win);
   ARegion *ar;
   bool do_draw = false;
@@ -936,7 +936,7 @@ void wm_draw_update(bContext *C)
     }
 #endif
 
-    if (wm_draw_update_test_window(win)) {
+    if (wm_draw_update_test_window(bmain, win)) {
       bScreen *screen = WM_window_get_active_screen(win);
 
       CTX_wm_window_set(C, win);
index 21c6c2ae60bcedd6094bbeeddc6a35baeb1e9fb1..27b3eb71330e4726aafa4634611ae2c9074ea913 100644 (file)
@@ -360,7 +360,7 @@ void wm_event_do_depsgraph(bContext *C, bool is_after_open_file)
      * and for until then we have to accept ambiguities when object is shared
      * across visible view layers and has overrides on it.
      */
-    Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
+    Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, true);
     if (is_after_open_file) {
       DEG_graph_relations_update(depsgraph, bmain, scene, view_layer);
       DEG_graph_on_visible_update(bmain, depsgraph, true);
@@ -3260,9 +3260,10 @@ void wm_event_do_handlers(bContext *C)
       wm_event_free_all(win);
     }
     else {
+      Main *bmain = CTX_data_main(C);
       Scene *scene = WM_window_get_active_scene(win);
       ViewLayer *view_layer = WM_window_get_active_view_layer(win);
-      Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, false);
+      Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, false);
       Scene *scene_eval = (depsgraph != NULL) ? DEG_get_evaluated_scene(depsgraph) : NULL;
 
       if (scene_eval != NULL) {
index 736a3315efa285cb07e3ff2ed38f49d566ad0d96..517cbbb621267baf191d542d323ec2d36e62dcdd 100644 (file)
@@ -215,7 +215,7 @@ static void sound_jack_sync_callback(Main *bmain, int mode, float time)
       continue;
     }
     ViewLayer *view_layer = WM_window_get_active_view_layer(window);
-    Depsgraph *depsgraph = BKE_scene_get_depsgraph(scene, view_layer, false);
+    Depsgraph *depsgraph = BKE_scene_get_depsgraph(bmain, scene, view_layer, false);
     if (depsgraph == NULL) {
       continue;
     }
index f8010b02c963aed5da944dce5d84453801c60574..3bddd2df6baa1021fd0c5a8317278964dcd62b3f 100644 (file)
@@ -54,7 +54,7 @@ class AlembicExportTest : public testing::Test {
 
     /* TODO(sergey): Pass scene layer somehow? */
     ViewLayer *view_layer = (ViewLayer *)scene.view_layers.first;
-    settings.depsgraph = depsgraph = DEG_graph_new(&scene, view_layer, DAG_EVAL_VIEWPORT);
+    settings.depsgraph = depsgraph = DEG_graph_new(bmain, &scene, view_layer, DAG_EVAL_VIEWPORT);
 
     settings.scene = &scene;
     settings.view_layer = view_layer;