[Bf-blender-cvs] [4f2ce8d8d33] master: DrawManager: Remove experimental draw lock.

Jeroen Bakker noreply at git.blender.org
Wed Nov 16 15:27:16 CET 2022


Commit: 4f2ce8d8d33be562cb059a263c5acb2b9d1238a5
Author: Jeroen Bakker
Date:   Wed Nov 16 14:58:25 2022 +0100
Branches: master
https://developer.blender.org/rB4f2ce8d8d33be562cb059a263c5acb2b9d1238a5

DrawManager: Remove experimental draw lock.

The draw locking was implemented for project Heist and moved behind an experimental
feature after it became clear there were issues with it. Nowadays it isn't used,
and the idea is to replace it with a different solution after all draw engines have
been ported to the new draw manager API. {T102180}

This patch will remove the experimental feature as it isn't used, or useful.

===================================================================

M	release/scripts/startup/bl_ui/space_userpref.py
M	source/blender/draw/intern/draw_manager.c
M	source/blender/makesdna/DNA_userdef_types.h
M	source/blender/makesrna/intern/rna_userdef.c
M	source/blender/windowmanager/intern/wm_draw.c

===================================================================

diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index e9fca3f3f8a..11f5fdaa348 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -2319,7 +2319,6 @@ class USERPREF_PT_experimental_prototypes(ExperimentalPanel, Panel):
                 ({"property": "use_sculpt_texture_paint"}, "T96225"),
                 ({"property": "use_full_frame_compositor"}, "T88150"),
                 ({"property": "enable_eevee_next"}, "T93220"),
-                ({"property": "use_draw_manager_acquire_lock"}, "T98016"),
             ),
         )
 
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index c8f0fdde62d..5e87751a9d4 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -1333,10 +1333,6 @@ void DRW_notify_view_update(const DRWUpdateContext *update_ctx)
 
   const bool gpencil_engine_needed = drw_gpencil_engine_needed(depsgraph, v3d);
 
-  if (G.is_rendering && U.experimental.use_draw_manager_acquire_lock) {
-    return;
-  }
-
   /* XXX Really nasty locking. But else this could
    * be executed by the material previews thread
    * while rendering a viewport. */
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 9d8b75450ca..911f139e54f 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -651,9 +651,7 @@ typedef struct UserDef_Experimental {
   char use_override_templates;
   char enable_eevee_next;
   char use_sculpt_texture_paint;
-  char use_draw_manager_acquire_lock;
   char use_realtime_compositor;
-  char _pad[7];
   /** `makesdna` does not allow empty structs. */
 } UserDef_Experimental;
 
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 58189ab2478..d240636f31b 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -6354,11 +6354,6 @@ static void rna_def_userdef_experimental(BlenderRNA *brna)
   RNA_def_property_boolean_sdna(prop, NULL, "use_sculpt_texture_paint", 1);
   RNA_def_property_ui_text(prop, "Sculpt Texture Paint", "Use texture painting in Sculpt Mode");
 
-  prop = RNA_def_property(srna, "use_draw_manager_acquire_lock", PROP_BOOLEAN, PROP_NONE);
-  RNA_def_property_boolean_sdna(prop, NULL, "use_draw_manager_acquire_lock", 1);
-  RNA_def_property_ui_text(
-      prop, "Draw Manager Locking", "Don't lock UI during background rendering");
-
   prop = RNA_def_property(srna, "use_extended_asset_browser", PROP_BOOLEAN, PROP_NONE);
   RNA_def_property_ui_text(prop,
                            "Extended Asset Browser",
diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c
index 663a41212ba..88024f1dec1 100644
--- a/source/blender/windowmanager/intern/wm_draw.c
+++ b/source/blender/windowmanager/intern/wm_draw.c
@@ -670,24 +670,13 @@ static void wm_draw_region_buffer_create(ARegion *region, bool stereo, bool use_
   }
 }
 
-static bool wm_draw_region_bind(bContext *C, ARegion *region, int view)
+static void wm_draw_region_bind(ARegion *region, int view)
 {
   if (!region->draw_buffer) {
-    return true;
+    return;
   }
 
   if (region->draw_buffer->viewport) {
-    if (G.is_rendering && C != NULL && U.experimental.use_draw_manager_acquire_lock) {
-      Scene *scene = CTX_data_scene(C);
-      RenderEngineType *render_engine_type = RE_engines_find(scene->r.engine);
-      if (RE_engine_is_opengl(render_engine_type)) {
-        /* Do not try to acquire the viewport as this would be locking at the moment.
-         * But tag the viewport to update after the rendering finishes. */
-        GPU_viewport_tag_update(region->draw_buffer->viewport);
-        return false;
-      }
-    }
-
     GPU_viewport_bind(region->draw_buffer->viewport, view, &region->winrct);
   }
   else {
@@ -700,7 +689,6 @@ static bool wm_draw_region_bind(bContext *C, ARegion *region, int view)
   }
 
   region->draw_buffer->bound_view = view;
-  return true;
 }
 
 static void wm_draw_region_unbind(ARegion *region)
@@ -913,7 +901,6 @@ static void wm_draw_window_offscreen(bContext *C, wmWindow *win, bool stereo)
 
       if (stereo && wm_draw_region_stereo_set(bmain, area, region, STEREO_LEFT_ID)) {
         wm_draw_region_buffer_create(region, true, use_viewport);
-        bool views_valid = true;
 
         for (int view = 0; view < 2; view++) {
           eStereoViews sview;
@@ -925,25 +912,20 @@ static void wm_draw_window_offscreen(bContext *C, wmWindow *win, bool stereo)
             wm_draw_region_stereo_set(bmain, area, region, sview);
           }
 
-          if (wm_draw_region_bind(C, region, view)) {
-            ED_region_do_draw(C, region);
-            wm_draw_region_unbind(region);
-          }
-          else {
-            views_valid = false;
-          }
+          wm_draw_region_bind(region, view);
+          ED_region_do_draw(C, region);
+          wm_draw_region_unbind(region);
         }
-        if (use_viewport && views_valid) {
+        if (use_viewport) {
           GPUViewport *viewport = region->draw_buffer->viewport;
           GPU_viewport_stereo_composite(viewport, win->stereo3d_format);
         }
       }
       else {
         wm_draw_region_buffer_create(region, false, use_viewport);
-        if (wm_draw_region_bind(C, region, 0)) {
-          ED_region_do_draw(C, region);
-          wm_draw_region_unbind(region);
-        }
+        wm_draw_region_bind(region, 0);
+        ED_region_do_draw(C, region);
+        wm_draw_region_unbind(region);
       }
 
       GPU_debug_group_end();
@@ -974,11 +956,10 @@ static void wm_draw_window_offscreen(bContext *C, wmWindow *win, bool stereo)
     }
 
     wm_draw_region_buffer_create(region, false, false);
-    if (wm_draw_region_bind(C, region, 0)) {
-      GPU_clear_color(0.0f, 0.0f, 0.0f, 0.0f);
-      ED_region_do_draw(C, region);
-      wm_draw_region_unbind(region);
-    }
+    wm_draw_region_bind(region, 0);
+    GPU_clear_color(0.0f, 0.0f, 0.0f, 0.0f);
+    ED_region_do_draw(C, region);
+    wm_draw_region_unbind(region);
 
     GPU_debug_group_end();
 
@@ -1403,11 +1384,10 @@ void wm_draw_region_test(bContext *C, ScrArea *area, ARegion *region)
   /* Function for redraw timer benchmark. */
   bool use_viewport = WM_region_use_viewport(area, region);
   wm_draw_region_buffer_create(region, false, use_viewport);
-  if (wm_draw_region_bind(C, region, 0)) {
-    ED_region_do_draw(C, region);
-    wm_draw_region_unbind(region);
-    region->do_draw = false;
-  }
+  wm_draw_region_bind(region, 0);
+  ED_region_do_draw(C, region);
+  wm_draw_region_unbind(region);
+  region->do_draw = false;
 }
 
 void WM_redraw_windows(bContext *C)
@@ -1443,7 +1423,7 @@ void WM_draw_region_viewport_ensure(ARegion *region, short space_type)
 
 void WM_draw_region_viewport_bind(ARegion *region)
 {
-  wm_draw_region_bind(NULL, region, 0);
+  wm_draw_region_bind(region, 0);
 }
 
 void WM_draw_region_viewport_unbind(ARegion *region)



More information about the Bf-blender-cvs mailing list