mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-20 19:45:20 +00:00
PPU Progress Hint: Show it as long as it needs
This commit is contained in:
parent
8fa23436f9
commit
67893fb8f8
5 changed files with 42 additions and 7 deletions
|
@ -27,7 +27,7 @@ namespace rsx
|
|||
true);
|
||||
}
|
||||
|
||||
void show_ppu_compile_notification()
|
||||
std::shared_ptr<atomic_t<u32>> show_ppu_compile_notification()
|
||||
{
|
||||
if (!s_ppu_loading_icon24)
|
||||
{
|
||||
|
@ -35,13 +35,17 @@ namespace rsx
|
|||
s_ppu_loading_icon24 = std::make_shared<loading_icon24>();
|
||||
}
|
||||
|
||||
std::shared_ptr<atomic_t<u32>> refs = std::make_shared<atomic_t<u32>>(1);
|
||||
|
||||
queue_message(
|
||||
localized_string_id::RSX_OVERLAYS_COMPILING_PPU_MODULES,
|
||||
5'000'000,
|
||||
{},
|
||||
20'000'000,
|
||||
refs,
|
||||
message_pin_location::bottom,
|
||||
s_ppu_loading_icon24,
|
||||
true);
|
||||
|
||||
return refs;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,10 +1,13 @@
|
|||
#pragma once
|
||||
|
||||
#include "util/types.hpp"
|
||||
#include "util/atomic.hpp"
|
||||
|
||||
namespace rsx
|
||||
{
|
||||
namespace overlays
|
||||
{
|
||||
void show_shader_compile_notification();
|
||||
void show_ppu_compile_notification();
|
||||
std::shared_ptr<atomic_t<u32>> show_ppu_compile_notification();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -66,6 +66,15 @@ namespace rsx
|
|||
return m_refs && *m_refs == 0 ? 0 : m_expiration_time;
|
||||
}
|
||||
|
||||
void message_item::ensure_expired()
|
||||
{
|
||||
// If reference counting is enabled and reached 0 consider it expired
|
||||
if (m_refs)
|
||||
{
|
||||
*m_refs = 0;
|
||||
}
|
||||
}
|
||||
|
||||
bool message_item::text_matches(const std::u32string& text) const
|
||||
{
|
||||
return m_text.text == text;
|
||||
|
@ -165,6 +174,8 @@ namespace rsx
|
|||
{
|
||||
if (it->get_expiration() < cur_time)
|
||||
{
|
||||
// Enusre reference counter is updated on timeout
|
||||
it->ensure_expired();
|
||||
it = vis_set.erase(it);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -25,6 +25,7 @@ namespace rsx
|
|||
|
||||
void reset_expiration();
|
||||
u64 get_expiration() const;
|
||||
void ensure_expired();
|
||||
compiled_resource& get_compiled() override;
|
||||
|
||||
bool text_matches(const std::u32string& text) const;
|
||||
|
|
|
@ -167,7 +167,9 @@ void progress_dialog_server::operator()()
|
|||
const char* text1 = nullptr;
|
||||
|
||||
const u64 start_time = get_system_time();
|
||||
u64 wait_no_update_count = 0;
|
||||
u64 wait_no_update_count = 0;
|
||||
|
||||
std::shared_ptr<atomic_t<u32>> ppu_cue_refs;
|
||||
|
||||
// Update progress
|
||||
while (!g_system_progress_stopping && thread_ctrl::state() != thread_state::aborting)
|
||||
|
@ -208,9 +210,18 @@ void progress_dialog_server::operator()()
|
|||
const u64 remaining_usec = pdone ? utils::rational_mul<u64>(passed_usec, static_cast<u64>(ptotal) - pdone, pdone) : (passed_usec * ptotal);
|
||||
|
||||
// Only show compile notification if we estimate at least 100ms
|
||||
if (remaining_usec >= 100'000ULL)
|
||||
if (remaining_usec >= 100'000ULL && (!ppu_cue_refs || !*ppu_cue_refs))
|
||||
{
|
||||
rsx::overlays::show_ppu_compile_notification();
|
||||
ppu_cue_refs = rsx::overlays::show_ppu_compile_notification();
|
||||
}
|
||||
}
|
||||
|
||||
if (pdone >= ptotal)
|
||||
{
|
||||
if (ppu_cue_refs)
|
||||
{
|
||||
*ppu_cue_refs = 0;
|
||||
ppu_cue_refs.reset();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -321,6 +332,11 @@ void progress_dialog_server::operator()()
|
|||
wait_no_update_count++;
|
||||
}
|
||||
|
||||
if (ppu_cue_refs)
|
||||
{
|
||||
*ppu_cue_refs = 0;
|
||||
}
|
||||
|
||||
if (g_system_progress_stopping || thread_ctrl::state() == thread_state::aborting)
|
||||
{
|
||||
break;
|
||||
|
|
Loading…
Add table
Reference in a new issue