mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-20 19:45:20 +00:00
rsx: Implement HW accurate frame limiter
This commit is contained in:
parent
ec2d529832
commit
cd74fb6a6d
2 changed files with 8 additions and 6 deletions
|
@ -3188,7 +3188,7 @@ namespace rsx
|
|||
case frame_limit_type::_50: limit = 50.; break;
|
||||
case frame_limit_type::_60: limit = 60.; break;
|
||||
case frame_limit_type::_30: limit = 30.; break;
|
||||
case frame_limit_type::_auto: limit = static_cast<double>(g_cfg.video.vblank_rate); break;
|
||||
case frame_limit_type::_auto: limit = 0.; break; // Handled in RSX semaphore_acquire
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -88,9 +88,6 @@ namespace rsx
|
|||
|
||||
const auto& sema = vm::_ref<RsxSemaphore>(addr).val;
|
||||
|
||||
// TODO: Remove vblank semaphore hack
|
||||
if (addr == rsx->device_addr + 0x30) return;
|
||||
|
||||
if (sema == arg)
|
||||
{
|
||||
// Flip semaphore doesnt need wake-up delay
|
||||
|
@ -107,10 +104,15 @@ namespace rsx
|
|||
rsx->flush_fifo();
|
||||
}
|
||||
|
||||
if (addr == rsx->device_addr + 0x30 && g_cfg.video.frame_limit == frame_limit_type::none)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
u64 start = rsx::uclock();
|
||||
while (sema != arg)
|
||||
{
|
||||
if (rsx->is_stopped())
|
||||
if (rsx->test_stopped())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -123,7 +125,7 @@ namespace rsx
|
|||
|
||||
while (rsx->is_paused())
|
||||
{
|
||||
rsx->cpu_wait({});
|
||||
rsx->check_state();
|
||||
}
|
||||
|
||||
// Reset
|
||||
|
|
Loading…
Add table
Reference in a new issue