mirror of
https://github.com/RPCS3/rpcs3.git
synced 2024-11-25 04:02:42 +01:00
Bugfix
This commit is contained in:
parent
32d3d1fbe5
commit
8c00dcd02d
@ -1212,7 +1212,7 @@ thread_t::thread_t(std::function<std::string()> name, std::function<void()> func
|
||||
start(std::move(name), func);
|
||||
}
|
||||
|
||||
thread_t::~thread_t()
|
||||
thread_t::~thread_t() noexcept(false)
|
||||
{
|
||||
if (m_thread)
|
||||
{
|
||||
|
@ -1605,7 +1605,7 @@ void ARMv7_instrs::CLZ(ARMv7Context& context, const ARMv7Code code, const ARMv7_
|
||||
|
||||
if (ConditionPassed(context, cond))
|
||||
{
|
||||
context.write_gpr(d, cntlz32(context.read_gpr(m)), type == T1 ? 2 : 4);
|
||||
context.write_gpr(d, cntlz32(context.read_gpr(m)), 4);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3475,7 +3475,7 @@ void ARMv7_instrs::POP(ARMv7Context& context, const ARMv7Code code, const ARMv7_
|
||||
{
|
||||
if (reg_list & (1 << i))
|
||||
{
|
||||
context.write_gpr(i, *stack++, type < A1 ? 2 : 4);
|
||||
context.write_gpr(i, *stack++, type == T1 ? 2 : 4);
|
||||
}
|
||||
}
|
||||
|
||||
@ -5572,7 +5572,7 @@ void ARMv7_instrs::UXTB(ARMv7Context& context, const ARMv7Code code, const ARMv7
|
||||
|
||||
if (ConditionPassed(context, cond))
|
||||
{
|
||||
context.write_gpr(d, (context.read_gpr(m) >> rot) & 0xff, type < A1 ? 2 : 4);
|
||||
context.write_gpr(d, (context.read_gpr(m) >> rot) & 0xff, type == T1 ? 2 : 4);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -91,7 +91,7 @@ s32 sceKernelExitThread(ARMv7Context& context, s32 exitStatus)
|
||||
sceLibKernel.Warning("sceKernelExitThread(exitStatus=0x%x)", exitStatus);
|
||||
|
||||
// exit status is stored in r0
|
||||
static_cast<ARMv7Thread&>(context).Stop();
|
||||
static_cast<ARMv7Thread&>(context).Exit();
|
||||
|
||||
return SCE_OK;
|
||||
}
|
||||
|
@ -2,7 +2,6 @@
|
||||
|
||||
#include "Emu/RSX/RSXFragmentProgram.h"
|
||||
#include "Emu/RSX/RSXVertexProgram.h"
|
||||
#include "Utilities/Log.h"
|
||||
|
||||
|
||||
enum class SHADER_TYPE
|
||||
|
@ -1,5 +1,6 @@
|
||||
#include "stdafx.h"
|
||||
#include "rpcs3/Ini.h"
|
||||
#include "Utilities/Log.h"
|
||||
#include "Emu/Memory/Memory.h"
|
||||
#include "sysutil_video.h"
|
||||
|
||||
|
@ -252,9 +252,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||
if (m_flip_handler)
|
||||
{
|
||||
auto cb = m_flip_handler;
|
||||
Emu.GetCallbackManager().Async([cb](PPUThread& CPU)
|
||||
Emu.GetCallbackManager().Async([=](CPUThread& CPU)
|
||||
{
|
||||
cb(CPU, 1);
|
||||
cb(static_cast<PPUThread&>(CPU), 1);
|
||||
});
|
||||
}
|
||||
|
||||
@ -2307,9 +2307,9 @@ void RSXThread::DoCmd(const u32 fcmd, const u32 cmd, const u32 args_addr, const
|
||||
{
|
||||
const u32 cause = ARGS(0);
|
||||
auto cb = m_user_handler;
|
||||
Emu.GetCallbackManager().Async([cb, cause](PPUThread& CPU)
|
||||
Emu.GetCallbackManager().Async([=](CPUThread& CPU)
|
||||
{
|
||||
cb(CPU, cause);
|
||||
cb(static_cast<PPUThread&>(CPU), cause);
|
||||
});
|
||||
break;
|
||||
}
|
||||
@ -2470,9 +2470,9 @@ void RSXThread::Task()
|
||||
|
||||
if (auto cb = m_vblank_handler)
|
||||
{
|
||||
Emu.GetCallbackManager().Async([=](PPUThread& CPU)
|
||||
Emu.GetCallbackManager().Async([=](CPUThread& CPU)
|
||||
{
|
||||
cb(CPU, 1);
|
||||
cb(static_cast<PPUThread&>(CPU), 1);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -20,32 +20,18 @@ void CallbackManager::Register(std::function<s32(PPUThread& PPU)> func)
|
||||
});
|
||||
}
|
||||
|
||||
void CallbackManager::Async(std::function<void(PPUThread& PPU)> func)
|
||||
void CallbackManager::Async(std::function<void(CPUThread& CPU)> func)
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_mutex);
|
||||
|
||||
m_async_list.push_back([=](CPUThread& CPU)
|
||||
{
|
||||
if (CPU.GetType() != CPU_THREAD_PPU) throw EXCEPTION("PPU thread expected");
|
||||
func(static_cast<PPUThread&>(CPU));
|
||||
func(CPU);
|
||||
});
|
||||
|
||||
m_cv.notify_one();
|
||||
}
|
||||
|
||||
//void CallbackManager::Async(std::function<void(ARMv7Context& context)> func)
|
||||
//{
|
||||
// std::lock_guard<std::mutex> lock(m_mutex);
|
||||
//
|
||||
// m_async_list.push_back([=](CPUThread& CPU)
|
||||
// {
|
||||
// if (CPU.GetType() != CPU_THREAD_ARMv7) throw EXCEPTION("ARMv7 thread expected");
|
||||
// func(static_cast<ARMv7Thread&>(CPU));
|
||||
// });
|
||||
//
|
||||
// m_cv.notify_one();
|
||||
//}
|
||||
|
||||
bool CallbackManager::Check(CPUThread& CPU, s32& result)
|
||||
{
|
||||
std::function<s32(CPUThread& CPU)> func;
|
||||
|
@ -26,8 +26,7 @@ class CallbackManager
|
||||
public:
|
||||
void Register(std::function<s32(PPUThread& CPU)> func); // register callback (called in Check() method)
|
||||
|
||||
void Async(std::function<void(PPUThread& CPU)> func); // register callback for callback thread (called immediately)
|
||||
//void Async(std::function<void(ARMv7Context& context)> func);
|
||||
void Async(std::function<void(CPUThread& CPU)> func); // register callback for callback thread (called immediately)
|
||||
|
||||
bool Check(CPUThread& CPU, s32& result); // call one callback registered by Register() method
|
||||
|
||||
|
@ -527,9 +527,9 @@ s32 cellFsStReadStart(u32 fd, u64 offset, u64 size)
|
||||
{
|
||||
const auto func = file->st_callback.exchange({}).func;
|
||||
|
||||
Emu.GetCallbackManager().Async([=](PPUThread& CPU)
|
||||
Emu.GetCallbackManager().Async([=](CPUThread& CPU)
|
||||
{
|
||||
func(CPU, fd, available);
|
||||
func(static_cast<PPUThread&>(CPU), fd, available);
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -898,9 +898,9 @@ void fsAio(vm::ptr<CellFsAio> aio, bool write, s32 xid, fs_aio_cb_t func)
|
||||
}
|
||||
|
||||
// should be executed directly by FS AIO thread
|
||||
Emu.GetCallbackManager().Async([=](PPUThread& CPU)
|
||||
Emu.GetCallbackManager().Async([=](CPUThread& CPU)
|
||||
{
|
||||
func(CPU, aio, error, xid, result);
|
||||
func(static_cast<PPUThread&>(CPU), aio, error, xid, result);
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -1067,10 +1067,13 @@ struct SceNpMatching2LobbyDataInternal
|
||||
union SceNpMatching2LobbyMessageDestination
|
||||
{
|
||||
be_t<u16> unicastTarget;
|
||||
struct multicastTarget {
|
||||
be_t<u16> *memberId;
|
||||
|
||||
struct
|
||||
{
|
||||
vm::bptr<u16> memberId;
|
||||
be_t<u32> memberIdNum;
|
||||
};
|
||||
}
|
||||
multicastTarget;
|
||||
};
|
||||
|
||||
// Group label
|
||||
@ -1973,7 +1976,8 @@ struct SceNpScoreClanIdRankData
|
||||
};
|
||||
|
||||
// Union for connection information
|
||||
union SceNpSignalingConnectionInfo {
|
||||
union SceNpSignalingConnectionInfo
|
||||
{
|
||||
be_t<u32> rtt;
|
||||
be_t<u32> bandwidth;
|
||||
SceNpId npId;
|
||||
|
@ -1,4 +1,5 @@
|
||||
#include "stdafx_gui.h"
|
||||
#include "Utilities/Log.h"
|
||||
#include "Emu/Memory/Memory.h"
|
||||
#include "Emu/System.h"
|
||||
#include "GLGSFrame.h"
|
||||
|
Loading…
Reference in New Issue
Block a user