Debug: Add a flag to disable viewport thread jobs

This commit is contained in:
Jonathan G Rennison
2022-11-10 00:42:22 +00:00
parent 551ef03478
commit 1eb18e5d24
2 changed files with 16 additions and 6 deletions

View File

@@ -3020,6 +3020,7 @@ DEF_CONSOLE_CMD(ConViewportDebug)
IConsoleHelp(" 8: VDF_DISABLE_DRAW_SPLIT"); IConsoleHelp(" 8: VDF_DISABLE_DRAW_SPLIT");
IConsoleHelp(" 10: VDF_SHOW_NO_LANDSCAPE_MAP_DRAW"); IConsoleHelp(" 10: VDF_SHOW_NO_LANDSCAPE_MAP_DRAW");
IConsoleHelp(" 20: VDF_DISABLE_LANDSCAPE_CACHE"); IConsoleHelp(" 20: VDF_DISABLE_LANDSCAPE_CACHE");
IConsoleHelp(" 40: VDF_DISABLE_THREAD");
return true; return true;
} }

View File

@@ -389,6 +389,7 @@ enum ViewportDebugFlags {
VDF_DISABLE_DRAW_SPLIT, VDF_DISABLE_DRAW_SPLIT,
VDF_SHOW_NO_LANDSCAPE_MAP_DRAW, VDF_SHOW_NO_LANDSCAPE_MAP_DRAW,
VDF_DISABLE_LANDSCAPE_CACHE, VDF_DISABLE_LANDSCAPE_CACHE,
VDF_DISABLE_THREAD,
}; };
uint32 _viewport_debug_flags; uint32 _viewport_debug_flags;
@@ -3651,10 +3652,14 @@ void ViewportDoDraw(Viewport *vp, int left, int top, int right, int bottom, uint
} }
_viewport_drawer_jobs++; _viewport_drawer_jobs++;
if (unlikely(HasBit(_viewport_debug_flags, VDF_DISABLE_THREAD))) {
ViewportDoDrawRenderJob(vp, _vdd.release());
} else {
_general_worker_pool.EnqueueJob([](void *data1, void *data2, void *data3) { _general_worker_pool.EnqueueJob([](void *data1, void *data2, void *data3) {
ViewportDoDrawRenderJob(static_cast<Viewport *>(data1), static_cast<ViewportDrawerDynamic *>(data2)); ViewportDoDrawRenderJob(static_cast<Viewport *>(data1), static_cast<ViewportDrawerDynamic *>(data2));
}, vp, _vdd.release()); }, vp, _vdd.release());
} }
}
_cur_dpi = old_dpi; _cur_dpi = old_dpi;
} }
@@ -3699,10 +3704,14 @@ static void ViewportDoDrawRenderJob(Viewport *vp, ViewportDrawerDynamic *vdd)
vdd->draw_jobs_active.store((uint)vdd->parent_sprite_sets.size(), std::memory_order_relaxed); 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++) { for (uint i = 1; i < (uint)vdd->parent_sprite_sets.size(); 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) { _general_worker_pool.EnqueueJob([](void *data1, void *data2, void *data3) {
ViewportDoDrawRenderSubJob(static_cast<Viewport *>(data1), static_cast<ViewportDrawerDynamic *>(data2), static_cast<uint>(reinterpret_cast<uintptr_t>(data3))); ViewportDoDrawRenderSubJob(static_cast<Viewport *>(data1), static_cast<ViewportDrawerDynamic *>(data2), static_cast<uint>(reinterpret_cast<uintptr_t>(data3)));
}, vp, vdd, reinterpret_cast<void *>(static_cast<uintptr_t>(i))); }, vp, vdd, reinterpret_cast<void *>(static_cast<uintptr_t>(i)));
} }
}
ViewportDoDrawRenderSubJob(vp, vdd, 0); ViewportDoDrawRenderSubJob(vp, vdd, 0);
} }