overlays: add ppu compile message if the progress dialog is unavailable

This commit is contained in:
Megamouse 2023-02-21 02:03:01 +01:00
parent 6d7d3fff6d
commit 2d4e02f277
13 changed files with 79 additions and 38 deletions

View File

@ -465,7 +465,7 @@ target_sources(rpcs3_emu PRIVATE
RSX/Overlays/overlay_perf_metrics.cpp
RSX/Overlays/overlay_progress_bar.cpp
RSX/Overlays/overlay_save_dialog.cpp
RSX/Overlays/overlay_shader_compile_notification.cpp
RSX/Overlays/overlay_compile_notification.cpp
RSX/Overlays/overlay_user_list_dialog.cpp
RSX/Overlays/overlay_utils.cpp
RSX/Overlays/overlays.cpp

View File

@ -1,5 +1,5 @@
#include "stdafx.h"
#include "../Overlays/overlay_shader_compile_notification.h"
#include "../Overlays/overlay_compile_notification.h"
#include "../Overlays/Shaders/shader_loading_dialog_native.h"
#include "GLGSRender.h"
#include "GLCompute.h"

View File

@ -0,0 +1,45 @@
#include "stdafx.h"
#include "overlays.h"
#include "overlay_message.h"
#include "overlay_loading_icon.hpp"
namespace rsx
{
namespace overlays
{
static std::shared_ptr<loading_icon24> s_shader_loading_icon24;
static std::shared_ptr<loading_icon24> s_ppu_loading_icon24;
void show_shader_compile_notification()
{
if (!s_shader_loading_icon24)
{
// Creating the icon requires FS read, so it is important to cache it
s_shader_loading_icon24 = std::make_shared<loading_icon24>();
}
queue_message(
localized_string_id::RSX_OVERLAYS_COMPILING_SHADERS,
5'000'000,
{},
message_pin_location::bottom,
s_shader_loading_icon24);
}
void show_ppu_compile_notification()
{
if (!s_ppu_loading_icon24)
{
// Creating the icon requires FS read, so it is important to cache it
s_ppu_loading_icon24 = std::make_shared<loading_icon24>();
}
queue_message(
localized_string_id::RSX_OVERLAYS_COMPILING_PPU_MODULES,
5'000'000,
{},
message_pin_location::bottom,
s_ppu_loading_icon24);
}
}
}

View File

@ -5,5 +5,6 @@ namespace rsx
namespace overlays
{
void show_shader_compile_notification();
void show_ppu_compile_notification();
}
}

View File

@ -236,5 +236,16 @@ namespace rsx
return false;
}
void refresh_message_queue()
{
if (auto manager = g_fxo->try_get<rsx::overlays::display_manager>())
{
if (auto msg_overlay = manager->get<rsx::overlays::message>())
{
msg_overlay->refresh();
}
}
}
} // namespace overlays
} // namespace rsx

View File

@ -78,6 +78,7 @@ namespace rsx
}
visible = true;
refresh();
}
private:
@ -120,5 +121,7 @@ namespace rsx
}
}
void refresh_message_queue();
} // namespace overlays
} // namespace rsx

View File

@ -1,28 +0,0 @@
#include "stdafx.h"
#include "overlays.h"
#include "overlay_message.h"
#include "overlay_loading_icon.hpp"
namespace rsx
{
namespace overlays
{
static std::shared_ptr<loading_icon24> s_loading_icon24;
void show_shader_compile_notification()
{
if (!s_loading_icon24)
{
// Creating the icon requires FS read, so it is important to cache it
s_loading_icon24 = std::make_shared<loading_icon24>();
}
queue_message(
localized_string_id::RSX_OVERLAYS_COMPILING_SHADERS,
5'000'000,
{},
message_pin_location::bottom,
s_loading_icon24);
}
}
}

View File

@ -1,7 +1,5 @@
#include "stdafx.h"
#include "../Overlays/overlay_animated_icon.h"
#include "../Overlays/overlay_manager.h"
#include "../Overlays/overlay_shader_compile_notification.h"
#include "../Overlays/overlay_compile_notification.h"
#include "../Overlays/Shaders/shader_loading_dialog_native.h"
#include "VKAsyncScheduler.h"

View File

@ -9,6 +9,7 @@ enum class localized_string_id
RSX_OVERLAYS_TROPHY_GOLD,
RSX_OVERLAYS_TROPHY_PLATINUM,
RSX_OVERLAYS_COMPILING_SHADERS,
RSX_OVERLAYS_COMPILING_PPU_MODULES,
RSX_OVERLAYS_MSG_DIALOG_YES,
RSX_OVERLAYS_MSG_DIALOG_NO,
RSX_OVERLAYS_MSG_DIALOG_CANCEL,

View File

@ -4,6 +4,8 @@
#include "Emu/RSX/RSXThread.h"
#include "Emu/RSX/Overlays/overlay_manager.h"
#include "Emu/RSX/Overlays/overlay_message_dialog.h"
#include "Emu/RSX/Overlays/overlay_message.h"
#include "Emu/RSX/Overlays/overlay_compile_notification.h"
#include "Emu/System.h"
LOG_CHANNEL(sys_log, "SYS");
@ -141,7 +143,8 @@ void progress_dialog_server::operator()()
if (skip_this_one)
{
// Do nothing
// Show a message instead
rsx::overlays::show_ppu_compile_notification();
thread_ctrl::wait_for(10000);
continue;
}
@ -177,6 +180,12 @@ void progress_dialog_server::operator()()
}
}
if (skip_this_one)
{
// Make sure to update any pending messages. PPU compilation may freeze the image.
rsx::overlays::refresh_message_queue();
}
thread_ctrl::wait_for(10000);
}

View File

@ -98,7 +98,7 @@
<ClCompile Include="Emu\RSX\Overlays\overlay_manager.cpp" />
<ClCompile Include="Emu\RSX\Overlays\overlay_media_list_dialog.cpp" />
<ClCompile Include="Emu\RSX\Overlays\overlay_osk_panel.cpp" />
<ClCompile Include="Emu\RSX\Overlays\overlay_shader_compile_notification.cpp" />
<ClCompile Include="Emu\RSX\Overlays\overlay_compile_notification.cpp" />
<ClCompile Include="Emu\RSX\Overlays\overlay_user_list_dialog.cpp" />
<ClCompile Include="Emu\RSX\Overlays\overlay_utils.cpp" />
<ClCompile Include="Emu\RSX\Overlays\Shaders\shader_loading_dialog.cpp" />
@ -575,7 +575,7 @@
<ClInclude Include="Emu\RSX\Overlays\overlay_osk_panel.h" />
<ClInclude Include="Emu\RSX\Overlays\overlay_perf_metrics.h" />
<ClInclude Include="Emu\RSX\Overlays\overlay_save_dialog.h" />
<ClInclude Include="Emu\RSX\Overlays\overlay_shader_compile_notification.h" />
<ClInclude Include="Emu\RSX\Overlays\overlay_compile_notification.h" />
<ClInclude Include="Emu\RSX\Overlays\overlay_trophy_notification.h" />
<ClInclude Include="Emu\RSX\Overlays\overlay_user_list_dialog.h" />
<ClInclude Include="Emu\RSX\Overlays\overlay_utils.h" />

View File

@ -1132,7 +1132,7 @@
<ClCompile Include="Emu\RSX\Overlays\overlay_animated_icon.cpp">
<Filter>Emu\GPU\RSX\Overlays</Filter>
</ClCompile>
<ClCompile Include="Emu\RSX\Overlays\overlay_shader_compile_notification.cpp">
<ClCompile Include="Emu\RSX\Overlays\overlay_compile_notification.cpp">
<Filter>Emu\GPU\RSX\Overlays</Filter>
</ClCompile>
<ClCompile Include="Emu\RSX\Overlays\HomeMenu\overlay_home_menu_message_box.cpp">
@ -1959,7 +1959,7 @@
<ClInclude Include="Emu\RSX\Overlays\overlay_trophy_notification.h">
<Filter>Emu\GPU\RSX\Overlays</Filter>
</ClInclude>
<ClInclude Include="Emu\RSX\Overlays\overlay_shader_compile_notification.h">
<ClInclude Include="Emu\RSX\Overlays\overlay_compile_notification.h">
<Filter>Emu\GPU\RSX\Overlays</Filter>
</ClInclude>
<ClInclude Include="Emu\Io\GHLtar.h">

View File

@ -39,6 +39,7 @@ private:
case localized_string_id::RSX_OVERLAYS_TROPHY_GOLD: return tr("You have earned a gold trophy.\n%0", "Trophy text").arg(std::forward<Args>(args)...);
case localized_string_id::RSX_OVERLAYS_TROPHY_PLATINUM: return tr("You have earned a platinum trophy.\n%0", "Trophy text").arg(std::forward<Args>(args)...);
case localized_string_id::RSX_OVERLAYS_COMPILING_SHADERS: return tr("Compiling shaders");
case localized_string_id::RSX_OVERLAYS_COMPILING_PPU_MODULES: return tr("Compiling PPU Modules");
case localized_string_id::RSX_OVERLAYS_MSG_DIALOG_YES: return tr("Yes", "Message Dialog");
case localized_string_id::RSX_OVERLAYS_MSG_DIALOG_NO: return tr("No", "Message Dialog");
case localized_string_id::RSX_OVERLAYS_MSG_DIALOG_CANCEL: return tr("Back", "Message Dialog");