Gracefully abort headless mode with unsupported video renderers

Also fix no_return bug
This commit is contained in:
Megamouse 2020-07-30 13:23:55 +02:00
parent dd497625a5
commit 3bba9708d9
4 changed files with 72 additions and 35 deletions

View file

@ -1,6 +1,7 @@
#include "headless_application.h"
#include "Emu/RSX/GSRender.h"
#include "Emu/RSX/Null/NullGSRender.h"
#include "Emu/Cell/Modules/cellMsgDialog.h"
#include "Emu/Cell/Modules/cellOskDialog.h"
#include "Emu/Cell/Modules/cellSaveData.h"
@ -54,7 +55,38 @@ void headless_application::InitializeCallbacks()
RequestCallAfter(std::move(func));
};
callbacks.get_gs_frame = []() -> std::unique_ptr<GSFrameBase> { return std::unique_ptr<GSFrameBase>(); };
callbacks.init_gs_render = []()
{
switch (video_renderer type = g_cfg.video.renderer)
{
case video_renderer::null:
{
g_fxo->init<rsx::thread, named_thread<NullGSRender>>();
break;
}
case video_renderer::opengl:
#if defined(_WIN32) || defined(HAVE_VULKAN)
case video_renderer::vulkan:
#endif
{
fmt::throw_exception("Headless mode can only be used with the %s video renderer. Current renderer: %s", video_renderer::null, type);
}
default:
{
fmt::throw_exception("Invalid video renderer: %s" HERE, type);
}
}
};
callbacks.get_gs_frame = []() -> std::unique_ptr<GSFrameBase>
{
if (g_cfg.video.renderer != video_renderer::null)
{
fmt::throw_exception("Headless mode can only be used with the %s video renderer. Current renderer: %s", video_renderer::null, g_cfg.video.renderer.get());
}
return std::unique_ptr<GSFrameBase>();
};
callbacks.get_msg_dialog = []() -> std::shared_ptr<MsgDialogBase> { return std::shared_ptr<MsgDialogBase>(); };
callbacks.get_osk_dialog = []() -> std::shared_ptr<OskDialogBase> { return std::shared_ptr<OskDialogBase>(); };
callbacks.get_save_dialog = []() -> std::unique_ptr<SaveDialogBase> { return std::unique_ptr<SaveDialogBase>(); };