mirror of https://github.com/RPCS3/rpcs3.git
rsx: Implement HW accurate frame limiter
This commit is contained in:
parent
ec2d529832
commit
cd74fb6a6d
|
@ -3188,7 +3188,7 @@ namespace rsx
|
||||||
case frame_limit_type::_50: limit = 50.; break;
|
case frame_limit_type::_50: limit = 50.; break;
|
||||||
case frame_limit_type::_60: limit = 60.; break;
|
case frame_limit_type::_60: limit = 60.; break;
|
||||||
case frame_limit_type::_30: limit = 30.; 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:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,9 +88,6 @@ namespace rsx
|
||||||
|
|
||||||
const auto& sema = vm::_ref<RsxSemaphore>(addr).val;
|
const auto& sema = vm::_ref<RsxSemaphore>(addr).val;
|
||||||
|
|
||||||
// TODO: Remove vblank semaphore hack
|
|
||||||
if (addr == rsx->device_addr + 0x30) return;
|
|
||||||
|
|
||||||
if (sema == arg)
|
if (sema == arg)
|
||||||
{
|
{
|
||||||
// Flip semaphore doesnt need wake-up delay
|
// Flip semaphore doesnt need wake-up delay
|
||||||
|
@ -107,10 +104,15 @@ namespace rsx
|
||||||
rsx->flush_fifo();
|
rsx->flush_fifo();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (addr == rsx->device_addr + 0x30 && g_cfg.video.frame_limit == frame_limit_type::none)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
u64 start = rsx::uclock();
|
u64 start = rsx::uclock();
|
||||||
while (sema != arg)
|
while (sema != arg)
|
||||||
{
|
{
|
||||||
if (rsx->is_stopped())
|
if (rsx->test_stopped())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -123,7 +125,7 @@ namespace rsx
|
||||||
|
|
||||||
while (rsx->is_paused())
|
while (rsx->is_paused())
|
||||||
{
|
{
|
||||||
rsx->cpu_wait({});
|
rsx->check_state();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset
|
// Reset
|
||||||
|
|
Loading…
Reference in New Issue