From 1eb18e5d24bbbf1ff9e64db2a9432b322e749c1e Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Thu, 10 Nov 2022 00:42:22 +0000 Subject: [PATCH] Debug: Add a flag to disable viewport thread jobs --- src/console_cmds.cpp | 1 + src/viewport.cpp | 21 +++++++++++++++------ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp index acbb9f9925..9262d8ac78 100644 --- a/src/console_cmds.cpp +++ b/src/console_cmds.cpp @@ -3020,6 +3020,7 @@ DEF_CONSOLE_CMD(ConViewportDebug) IConsoleHelp(" 8: VDF_DISABLE_DRAW_SPLIT"); IConsoleHelp(" 10: VDF_SHOW_NO_LANDSCAPE_MAP_DRAW"); IConsoleHelp(" 20: VDF_DISABLE_LANDSCAPE_CACHE"); + IConsoleHelp(" 40: VDF_DISABLE_THREAD"); return true; } diff --git a/src/viewport.cpp b/src/viewport.cpp index b150f0aa90..878933923a 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -389,6 +389,7 @@ enum ViewportDebugFlags { VDF_DISABLE_DRAW_SPLIT, VDF_SHOW_NO_LANDSCAPE_MAP_DRAW, VDF_DISABLE_LANDSCAPE_CACHE, + VDF_DISABLE_THREAD, }; uint32 _viewport_debug_flags; @@ -3651,9 +3652,13 @@ void ViewportDoDraw(Viewport *vp, int left, int top, int right, int bottom, uint } _viewport_drawer_jobs++; - _general_worker_pool.EnqueueJob([](void *data1, void *data2, void *data3) { - ViewportDoDrawRenderJob(static_cast(data1), static_cast(data2)); - }, vp, _vdd.release()); + if (unlikely(HasBit(_viewport_debug_flags, VDF_DISABLE_THREAD))) { + ViewportDoDrawRenderJob(vp, _vdd.release()); + } else { + _general_worker_pool.EnqueueJob([](void *data1, void *data2, void *data3) { + ViewportDoDrawRenderJob(static_cast(data1), static_cast(data2)); + }, vp, _vdd.release()); + } } _cur_dpi = old_dpi; @@ -3699,9 +3704,13 @@ static void ViewportDoDrawRenderJob(Viewport *vp, ViewportDrawerDynamic *vdd) vdd->draw_jobs_active.store((uint)vdd->parent_sprite_sets.size(), std::memory_order_relaxed); for (uint i = 1; i < (uint)vdd->parent_sprite_sets.size(); i++) { - _general_worker_pool.EnqueueJob([](void *data1, void *data2, void *data3) { - ViewportDoDrawRenderSubJob(static_cast(data1), static_cast(data2), static_cast(reinterpret_cast(data3))); - }, vp, vdd, reinterpret_cast(static_cast(i))); + if (unlikely(HasBit(_viewport_debug_flags, VDF_DISABLE_THREAD))) { + ViewportDoDrawRenderSubJob(vp, vdd, i); + } else { + _general_worker_pool.EnqueueJob([](void *data1, void *data2, void *data3) { + ViewportDoDrawRenderSubJob(static_cast(data1), static_cast(data2), static_cast(reinterpret_cast(data3))); + }, vp, vdd, reinterpret_cast(static_cast(i))); + } } ViewportDoDrawRenderSubJob(vp, vdd, 0);