mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-03 21:41:26 +12:00
Savestates: Fix rsxaudio
This commit is contained in:
parent
6db8b84048
commit
b2e969eb8f
5 changed files with 21 additions and 11 deletions
|
@ -419,7 +419,7 @@ cell_audio_thread::cell_audio_thread(utils::serial& ar)
|
||||||
for (key_info& k : keys)
|
for (key_info& k : keys)
|
||||||
{
|
{
|
||||||
ar(k.start_period, k.flags, k.source);
|
ar(k.start_period, k.flags, k.source);
|
||||||
k.port = lv2_event_queue::load_ptr(ar, k.port);
|
k.port = lv2_event_queue::load_ptr(ar, k.port, "audio");
|
||||||
}
|
}
|
||||||
|
|
||||||
ar(ports);
|
ar(ports);
|
||||||
|
|
|
@ -57,7 +57,7 @@ void lv2_event_queue::save_ptr(utils::serial& ar, lv2_event_queue* q)
|
||||||
ar(q->id);
|
ar(q->id);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<lv2_event_queue> lv2_event_queue::load_ptr(utils::serial& ar, std::shared_ptr<lv2_event_queue>& queue)
|
std::shared_ptr<lv2_event_queue> lv2_event_queue::load_ptr(utils::serial& ar, std::shared_ptr<lv2_event_queue>& queue, std::string_view msg)
|
||||||
{
|
{
|
||||||
const u32 id = ar.operator u32();
|
const u32 id = ar.operator u32();
|
||||||
|
|
||||||
|
@ -72,10 +72,20 @@ std::shared_ptr<lv2_event_queue> lv2_event_queue::load_ptr(utils::serial& ar, st
|
||||||
return q;
|
return q;
|
||||||
}
|
}
|
||||||
|
|
||||||
Emu.DeferDeserialization([id, &queue]()
|
if (id >> 24 != id_base >> 24)
|
||||||
|
{
|
||||||
|
fmt::throw_exception("Failed in event queue pointer deserialization (invalid ID): location: %s, id=0x%x", msg, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
Emu.DeferDeserialization([id, &queue, msg_str = std::string{msg}]()
|
||||||
{
|
{
|
||||||
// Defer resolving
|
// Defer resolving
|
||||||
queue = ensure(idm::get_unlocked<lv2_obj, lv2_event_queue>(id));
|
queue = idm::get_unlocked<lv2_obj, lv2_event_queue>(id);
|
||||||
|
|
||||||
|
if (!queue)
|
||||||
|
{
|
||||||
|
fmt::throw_exception("Failed in event queue pointer deserialization (not found): location: %s, id=0x%x", msg_str, id);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Null until resolved
|
// Null until resolved
|
||||||
|
@ -85,7 +95,7 @@ std::shared_ptr<lv2_event_queue> lv2_event_queue::load_ptr(utils::serial& ar, st
|
||||||
lv2_event_port::lv2_event_port(utils::serial& ar)
|
lv2_event_port::lv2_event_port(utils::serial& ar)
|
||||||
: type(ar)
|
: type(ar)
|
||||||
, name(ar)
|
, name(ar)
|
||||||
, queue(lv2_event_queue::load_ptr(ar, queue))
|
, queue(lv2_event_queue::load_ptr(ar, queue, "eventport"))
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -101,7 +101,7 @@ struct lv2_event_queue final : public lv2_obj
|
||||||
static std::shared_ptr<void> load(utils::serial& ar);
|
static std::shared_ptr<void> load(utils::serial& ar);
|
||||||
void save(utils::serial& ar);
|
void save(utils::serial& ar);
|
||||||
static void save_ptr(utils::serial&, lv2_event_queue*);
|
static void save_ptr(utils::serial&, lv2_event_queue*);
|
||||||
static std::shared_ptr<lv2_event_queue> load_ptr(utils::serial& ar, std::shared_ptr<lv2_event_queue>& queue);
|
static std::shared_ptr<lv2_event_queue> load_ptr(utils::serial& ar, std::shared_ptr<lv2_event_queue>& queue, std::string_view msg = {});
|
||||||
|
|
||||||
CellError send(lv2_event event);
|
CellError send(lv2_event event);
|
||||||
|
|
||||||
|
|
|
@ -111,9 +111,9 @@ lv2_rsxaudio::lv2_rsxaudio(utils::serial& ar) noexcept
|
||||||
{
|
{
|
||||||
ar(shmem);
|
ar(shmem);
|
||||||
|
|
||||||
for (const auto& port : event_queue)
|
for (auto& port : event_queue)
|
||||||
{
|
{
|
||||||
lv2_event_queue::save_ptr(ar, port.get());
|
port = lv2_event_queue::load_ptr(ar, port, "rsxaudio");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -128,9 +128,9 @@ void lv2_rsxaudio::save(utils::serial& ar)
|
||||||
{
|
{
|
||||||
ar(shmem);
|
ar(shmem);
|
||||||
|
|
||||||
for (auto& port : event_queue)
|
for (const auto& port : event_queue)
|
||||||
{
|
{
|
||||||
port = lv2_event_queue::load_ptr(ar, port);
|
lv2_event_queue::save_ptr(ar, port.get());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,7 +33,7 @@ struct lv2_timer_thread
|
||||||
lv2_timer::lv2_timer(utils::serial& ar)
|
lv2_timer::lv2_timer(utils::serial& ar)
|
||||||
: lv2_obj{1}
|
: lv2_obj{1}
|
||||||
, state(ar)
|
, state(ar)
|
||||||
, port(lv2_event_queue::load_ptr(ar, port))
|
, port(lv2_event_queue::load_ptr(ar, port, "timer"))
|
||||||
, source(ar)
|
, source(ar)
|
||||||
, data1(ar)
|
, data1(ar)
|
||||||
, data2(ar)
|
, data2(ar)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue