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.
This commit is contained in:
Jeroen Bakker 2022-11-16 14:58:25 +01:00
parent 5a05fa8f74
commit 4f2ce8d8d3
5 changed files with 18 additions and 50 deletions

View File

@ -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"),
),
)

View File

@ -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. */

View File

@ -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;

View File

@ -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",

View File

@ -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)