mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-03-29 13:20:42 +00:00
SPU: Unlock RSX list transfers
This commit is contained in:
parent
46ceeed10d
commit
ce92341e75
@ -3504,13 +3504,21 @@ bool spu_thread::do_list_transfer(spu_mfc_cmd& args)
|
|||||||
arg_lsa += utils::align<u32>(size, 16);
|
arg_lsa += utils::align<u32>(size, 16);
|
||||||
}
|
}
|
||||||
// Avoid inlining huge transfers because it intentionally drops range lock unlock
|
// Avoid inlining huge transfers because it intentionally drops range lock unlock
|
||||||
else if (addr < RAW_SPU_BASE_ADDR && size - 1 <= 0x400 - 1 && optimization_compatible == MFC_PUT_CMD && (addr % 0x10000 + (size - 1)) < 0x10000)
|
else if (optimization_compatible == MFC_PUT_CMD && ((addr >> 28 == rsx::constants::local_mem_base >> 28) || (addr < RAW_SPU_BASE_ADDR && size - 1 <= 0x400 - 1 && (addr % 0x10000 + (size - 1)) < 0x10000)))
|
||||||
{
|
{
|
||||||
rsx_lock.update_if_enabled(addr, size, range_lock);
|
if (addr >> 28 != rsx::constants::local_mem_base >> 28)
|
||||||
|
|
||||||
if (!g_use_rtm)
|
|
||||||
{
|
{
|
||||||
vm::range_lock(range_lock, addr & -128, utils::align<u32>(addr + size, 128) - (addr & -128));
|
rsx_lock.update_if_enabled(addr, size, range_lock);
|
||||||
|
|
||||||
|
if (!g_use_rtm)
|
||||||
|
{
|
||||||
|
vm::range_lock(range_lock, addr & -128, utils::align<u32>(addr + size, 128) - (addr & -128));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
range_lock->release(0);
|
||||||
|
rsx_lock.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
u8* dst = vm::_ptr<u8>(addr);
|
u8* dst = vm::_ptr<u8>(addr);
|
||||||
|
@ -73,8 +73,9 @@ namespace rsx
|
|||||||
template <typename T = void>
|
template <typename T = void>
|
||||||
void update_if_enabled(u32 addr, u32 _length, const std::add_pointer_t<T>& lock_release = std::add_pointer_t<void>{})
|
void update_if_enabled(u32 addr, u32 _length, const std::add_pointer_t<T>& lock_release = std::add_pointer_t<void>{})
|
||||||
{
|
{
|
||||||
if (!length || _length <= 1)
|
if (!length)
|
||||||
{
|
{
|
||||||
|
unlock();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user