@@ -807,7 +807,7 @@ void Kernel::DoState(PointerWrap& p)
for (const auto& entry : m_device_map)
entry.second->DoState(p);

if (p.GetMode() == PointerWrap::MODE_READ)
if (p.IsReadMode())
{
for (u32 i = 0; i < IPC_MAX_FDS; i++)
{
@@ -994,8 +994,7 @@ void WiiSockMan::Convert(sockaddr_in const& from, WiiSockAddrIn& to, s32 addrlen

void WiiSockMan::DoState(PointerWrap& p)
{
bool saving = p.GetMode() == PointerWrap::Mode::MODE_WRITE ||
p.GetMode() == PointerWrap::Mode::MODE_MEASURE;
bool saving = p.IsWriteMode() || p.IsMeasureMode();
auto size = pending_polls.size();
p.Do(size);
if (!saving)
@@ -57,7 +57,7 @@ void SDIOSlot0Device::RefreshConfig()
void SDIOSlot0Device::DoState(PointerWrap& p)
{
DoStateShared(p);
if (p.GetMode() == PointerWrap::MODE_READ)
if (p.IsReadMode())
{
OpenInternal();
}
@@ -90,10 +90,10 @@ void BluetoothEmuDevice::DoState(PointerWrap& p)
{
bool passthrough_bluetooth = false;
p.Do(passthrough_bluetooth);
if (passthrough_bluetooth && p.GetMode() == PointerWrap::MODE_READ)
if (passthrough_bluetooth && p.IsReadMode())
{
Core::DisplayMessage("State needs Bluetooth passthrough to be enabled. Aborting load.", 4000);
p.SetMode(PointerWrap::MODE_VERIFY);
p.SetVerifyMode();
return;
}

@@ -268,28 +268,28 @@ void BluetoothRealDevice::DoState(PointerWrap& p)
{
bool passthrough_bluetooth = true;
p.Do(passthrough_bluetooth);
if (!passthrough_bluetooth && p.GetMode() == PointerWrap::MODE_READ)
if (!passthrough_bluetooth && p.IsReadMode())
{
Core::DisplayMessage("State needs Bluetooth passthrough to be disabled. Aborting load.", 4000);
p.SetMode(PointerWrap::MODE_VERIFY);
p.SetVerifyMode();
return;
}

// Prevent the transfer callbacks from messing with m_current_transfers after we have started
// writing a savestate. We cannot use a scoped lock here because DoState is called twice and
// we would lose the lock between the two calls.
if (p.GetMode() == PointerWrap::MODE_MEASURE || p.GetMode() == PointerWrap::MODE_VERIFY)
if (p.IsMeasureMode() || p.IsVerifyMode())
m_transfers_mutex.lock();

std::vector<u32> addresses_to_discard;
if (p.GetMode() != PointerWrap::MODE_READ)
if (!p.IsReadMode())
{
// Save addresses of transfer commands to discard on savestate load.
for (const auto& transfer : m_current_transfers)
addresses_to_discard.push_back(transfer.second.command->ios_request.address);
}
p.Do(addresses_to_discard);
if (p.GetMode() == PointerWrap::MODE_READ)
if (p.IsReadMode())
{
// On load, discard any pending transfer to make sure the emulated software is not stuck
// waiting for the previous request to complete. This is usually not an issue as long as
@@ -305,7 +305,7 @@ void BluetoothRealDevice::DoState(PointerWrap& p)
OSD::Duration::NORMAL);
}

if (!s_has_shown_savestate_warning && p.GetMode() == PointerWrap::MODE_WRITE)
if (!s_has_shown_savestate_warning && p.IsWriteMode())
{
OSD::AddMessage("Savestates may not work with Bluetooth passthrough in all cases.\n"
"They will only work if no remote is connected when restoring the state,\n"
@@ -315,7 +315,7 @@ void BluetoothRealDevice::DoState(PointerWrap& p)
}

// We have finished the savestate now, so the transfers mutex can be unlocked.
if (p.GetMode() == PointerWrap::MODE_WRITE)
if (p.IsWriteMode())
m_transfers_mutex.unlock();
}

@@ -19,6 +19,6 @@ std::optional<IPCReply> BluetoothStubDevice::Open(const OpenRequest& request)
void BluetoothStubDevice::DoState(PointerWrap& p)
{
Core::DisplayMessage("The current IPC_HLE_Device_usb is a stub. Aborting load.", 4000);
p.SetMode(PointerWrap::MODE_VERIFY);
p.SetVerifyMode();
}
} // namespace IOS::HLE
@@ -55,7 +55,7 @@ void USBHost::UpdateWantDeterminism(const bool new_want_determinism)

void USBHost::DoState(PointerWrap& p)
{
if (IsOpened() && p.GetMode() == PointerWrap::MODE_READ)
if (IsOpened() && p.IsReadMode())
{
// After a state has loaded, there may be insertion hooks for devices that were
// already plugged in, and which need to be triggered.
@@ -75,7 +75,7 @@ std::optional<IPCReply> OH0::IOCtlV(const IOCtlVRequest& request)

void OH0::DoState(PointerWrap& p)
{
if (p.GetMode() == PointerWrap::MODE_READ && !m_devices.empty())
if (p.IsReadMode() && !m_devices.empty())
{
Core::DisplayMessage("It is suggested that you unplug and replug all connected USB devices.",
5000);
@@ -47,7 +47,7 @@ void SetJit(JitBase* jit)
}
void DoState(PointerWrap& p)
{
if (g_jit && p.GetMode() == PointerWrap::MODE_READ)
if (g_jit && p.IsReadMode())
g_jit->ClearCache();
}
CPUCoreBase* InitJitCore(PowerPC::CPUCore core)
@@ -100,7 +100,7 @@ std::ostream& operator<<(std::ostream& os, CPUCore core)
void DoState(PointerWrap& p)
{
// some of this code has been disabled, because
// it changes registers even in MODE_MEASURE (which is suspicious and seems like it could cause
// it changes registers even in Mode::Measure (which is suspicious and seems like it could cause
// desyncs)
// and because the values it's changing have been added to CoreTiming::DoState, so it might
// conflict to mess with them here.
@@ -132,7 +132,7 @@ void DoState(PointerWrap& p)

ppcState.iCache.DoState(p);

if (p.GetMode() == PointerWrap::MODE_READ)
if (p.IsReadMode())
{
RoundingModeUpdated();
IBATUpdated();
@@ -156,7 +156,7 @@ static void DoState(PointerWrap& p)
"This savestate was created using an incompatible version of Dolphin" :
"This savestate was created using the incompatible version " + version_created_by;
Core::DisplayMessage(message, OSD::Duration::NORMAL);
p.SetMode(PointerWrap::MODE_MEASURE);
p.SetMeasureMode();
return;
}

@@ -168,7 +168,7 @@ static void DoState(PointerWrap& p)
OSD::AddMessage(fmt::format("Cannot load a savestate created under {} mode in {} mode",
is_wii ? "Wii" : "GC", is_wii_currently ? "Wii" : "GC"),
OSD::Duration::NORMAL, OSD::Color::RED);
p.SetMode(PointerWrap::MODE_MEASURE);
p.SetMeasureMode();
return;
}

@@ -186,7 +186,7 @@ static void DoState(PointerWrap& p)
Memory::GetExRamSizeReal(), Memory::GetExRamSizeReal() / 0x100000U,
state_mem1_size, state_mem1_size / 0x100000U, state_mem2_size,
state_mem2_size / 0x100000U));
p.SetMode(PointerWrap::MODE_MEASURE);
p.SetMeasureMode();
return;
}

@@ -226,7 +226,7 @@ void LoadFromBuffer(std::vector<u8>& buffer)
Core::RunOnCPUThread(
[&] {
u8* ptr = buffer.data();
PointerWrap p(&ptr, buffer.size(), PointerWrap::MODE_READ);
PointerWrap p(&ptr, buffer.size(), PointerWrap::Mode::Read);
DoState(p);
},
true);
@@ -237,14 +237,14 @@ void SaveToBuffer(std::vector<u8>& buffer)
Core::RunOnCPUThread(
[&] {
u8* ptr = nullptr;
PointerWrap p_measure(&ptr, 0, PointerWrap::MODE_MEASURE);
PointerWrap p_measure(&ptr, 0, PointerWrap::Mode::Measure);

DoState(p_measure);
const size_t buffer_size = reinterpret_cast<size_t>(ptr);
buffer.resize(buffer_size);

ptr = buffer.data();
PointerWrap p(&ptr, buffer_size, PointerWrap::MODE_WRITE);
PointerWrap p(&ptr, buffer_size, PointerWrap::Mode::Write);
DoState(p);
},
true);
@@ -412,22 +412,22 @@ void SaveAs(const std::string& filename, bool wait)
[&] {
// Measure the size of the buffer.
u8* ptr = nullptr;
PointerWrap p_measure(&ptr, 0, PointerWrap::MODE_MEASURE);
PointerWrap p_measure(&ptr, 0, PointerWrap::Mode::Measure);
DoState(p_measure);
const size_t buffer_size = reinterpret_cast<size_t>(ptr);

// Then actually do the write.
PointerWrap::Mode p_mode;
bool is_write_mode;
{
std::lock_guard lk(g_cs_current_buffer);
g_current_buffer.resize(buffer_size);
ptr = g_current_buffer.data();
PointerWrap p(&ptr, buffer_size, PointerWrap::MODE_WRITE);
PointerWrap p(&ptr, buffer_size, PointerWrap::Mode::Write);
DoState(p);
p_mode = p.GetMode();
is_write_mode = p.IsWriteMode();
}

if (p_mode == PointerWrap::MODE_WRITE)
if (is_write_mode)
{
Core::DisplayMessage("Saving State...", 1000);

@@ -591,10 +591,10 @@ void LoadAs(const std::string& filename)
if (!buffer.empty())
{
u8* ptr = buffer.data();
PointerWrap p(&ptr, buffer.size(), PointerWrap::MODE_READ);
PointerWrap p(&ptr, buffer.size(), PointerWrap::Mode::Read);
DoState(p);
loaded = true;
loadedSuccessfully = (p.GetMode() == PointerWrap::MODE_READ);
loadedSuccessfully = p.IsReadMode();
}
}

@@ -230,14 +230,14 @@ bool GameFileCache::SyncCacheFile(bool save)
{
// Measure the size of the buffer.
u8* ptr = nullptr;
PointerWrap p_measure(&ptr, 0, PointerWrap::MODE_MEASURE);
PointerWrap p_measure(&ptr, 0, PointerWrap::Mode::Measure);
DoState(&p_measure);
const size_t buffer_size = reinterpret_cast<size_t>(ptr);

// Then actually do the write.
std::vector<u8> buffer(buffer_size);
ptr = buffer.data();
PointerWrap p(&ptr, buffer_size, PointerWrap::MODE_WRITE);
PointerWrap p(&ptr, buffer_size, PointerWrap::Mode::Write);
DoState(&p, buffer_size);
if (f.WriteBytes(buffer.data(), buffer.size()))
success = true;
@@ -248,9 +248,9 @@ bool GameFileCache::SyncCacheFile(bool save)
if (!buffer.empty() && f.ReadBytes(buffer.data(), buffer.size()))
{
u8* ptr = buffer.data();
PointerWrap p(&ptr, buffer.size(), PointerWrap::MODE_READ);
PointerWrap p(&ptr, buffer.size(), PointerWrap::Mode::Read);
DoState(&p, buffer.size());
if (p.GetMode() == PointerWrap::MODE_READ)
if (p.IsReadMode())
success = true;
}
}
@@ -271,16 +271,16 @@ void GameFileCache::DoState(PointerWrap* p, u64 size)
u64 expected_size;
} header = {CACHE_REVISION, size};
p->Do(header);
if (p->GetMode() == PointerWrap::MODE_READ)
if (p->IsReadMode())
{
if (header.revision != CACHE_REVISION || header.expected_size != size)
{
p->SetMode(PointerWrap::MODE_MEASURE);
p->SetMeasureMode();
return;
}
}
p->DoEachElement(m_cached_files, [](PointerWrap& state, std::shared_ptr<GameFile>& elem) {
if (state.GetMode() == PointerWrap::MODE_READ)
if (state.IsReadMode())
elem = std::make_shared<GameFile>();
elem->DoState(state);
});
@@ -104,7 +104,7 @@ void BoundingBox::DoState(PointerWrap& p)
// We handle saving the backend values specially rather than using Readback() and Flush() so that
// we don't mess up the current cache state
std::vector<BBoxType> backend_values(NUM_BBOX_VALUES);
if (p.GetMode() == PointerWrap::MODE_READ)
if (p.IsReadMode())
{
p.Do(backend_values);

@@ -26,7 +26,7 @@ void DoCPState(PointerWrap& p)
p.Do(g_main_cp_state.vtx_desc);
p.DoArray(g_main_cp_state.vtx_attr);
p.DoMarker("CP Memory");
if (p.GetMode() == PointerWrap::MODE_READ)
if (p.IsReadMode())
{
CopyPreprocessCPStateFromMain();
VertexLoaderManager::g_bases_dirty = true;
@@ -94,7 +94,7 @@ void DoState(PointerWrap& p)
p.DoPointer(write_ptr, s_video_buffer);
s_video_buffer_write_ptr = write_ptr;
p.DoPointer(s_video_buffer_read_ptr, s_video_buffer);
if (p.GetMode() == PointerWrap::MODE_READ && s_use_deterministic_gpu_thread)
if (p.IsReadMode() && s_use_deterministic_gpu_thread)
{
// We're good and paused, right?
s_video_buffer_seen_ptr = s_video_buffer_pp_read_ptr = s_video_buffer_read_ptr;
@@ -482,7 +482,7 @@ void FrameDump::CloseVideoFile()

void FrameDump::DoState(PointerWrap& p)
{
if (p.GetMode() == PointerWrap::MODE_READ)
if (p.IsReadMode())
++m_savestate_index;
}

@@ -910,7 +910,7 @@ void FramebufferManager::DoState(PointerWrap& p)
if (!save_efb_state)
return;

if (p.GetMode() == PointerWrap::MODE_WRITE || p.GetMode() == PointerWrap::MODE_MEASURE)
if (p.IsWriteMode() || p.IsMeasureMode())
DoSaveState(p);
else
DoLoadState(p);
@@ -298,7 +298,7 @@ Common::Vec2 FreeLookCamera::GetFieldOfViewMultiplier() const

void FreeLookCamera::DoState(PointerWrap& p)
{
if (p.GetMode() == PointerWrap::MODE_WRITE || p.GetMode() == PointerWrap::MODE_MEASURE)
if (p.IsWriteMode() || p.IsMeasureMode())
{
p.Do(m_current_type);
if (m_camera_controller)
@@ -314,7 +314,7 @@ void FreeLookCamera::DoState(PointerWrap& p)
{
m_camera_controller->DoState(p);
}
else if (p.GetMode() == PointerWrap::MODE_READ)
else if (p.IsReadMode())
{
const std::string old_type_name = old_type ? to_string(*old_type) : "";
const std::string loaded_type_name = m_current_type ? to_string(*m_current_type) : "";
@@ -323,7 +323,7 @@ void FreeLookCamera::DoState(PointerWrap& p)
"'{}'. Aborting load state",
old_type_name, loaded_type_name);
Core::DisplayMessage(message, 5000);
p.SetMode(PointerWrap::MODE_VERIFY);
p.SetVerifyMode();
}
}
}
@@ -111,7 +111,7 @@ void GeometryShaderManager::DoState(PointerWrap& p)

p.Do(constants);

if (p.GetMode() == PointerWrap::MODE_READ)
if (p.IsReadMode())
{
// Fixup the current state from global GPU state
// NOTE: This requires that all GPU memory has been loaded already.
@@ -542,7 +542,7 @@ void PixelShaderManager::DoState(PointerWrap& p)

p.Do(constants);

if (p.GetMode() == PointerWrap::MODE_READ)
if (p.IsReadMode())
{
// Fixup the current state from global GPU state
// NOTE: This requires that all GPU memory has been loaded already.
@@ -1810,7 +1810,7 @@ void Renderer::DoState(PointerWrap& p)

m_bounding_box->DoState(p);

if (p.GetMode() == PointerWrap::MODE_READ)
if (p.IsReadMode())
{
// Force the next xfb to be displayed.
m_last_xfb_id = std::numeric_limits<u64>::max();
@@ -432,7 +432,7 @@ void TextureCacheBase::SerializeTexture(AbstractTexture* tex, const TextureConfi
PointerWrap& p)
{
// If we're in measure mode, skip the actual readback to save some time.
const bool skip_readback = p.GetMode() == PointerWrap::MODE_MEASURE;
const bool skip_readback = p.IsMeasureMode();
p.DoPOD(config);

if (skip_readback || CheckReadbackTexture(config.width, config.height, config.format))
@@ -459,7 +459,7 @@ void TextureCacheBase::SerializeTexture(AbstractTexture* tex, const TextureConfi
// needing to allocate/free an extra buffer.
u8* texture_data = p.DoExternal(total_size);

if (!skip_readback && p.GetMode() == PointerWrap::MODE_MEASURE)
if (!skip_readback && p.IsMeasureMode())
{
ERROR_LOG_FMT(VIDEO, "Couldn't acquire {} bytes for serializing texture.", total_size);
return;
@@ -502,7 +502,7 @@ std::optional<TextureCacheBase::TexPoolEntry> TextureCacheBase::DeserializeTextu
u32 total_size = 0;
u8* texture_data = p.DoExternal(total_size);

if (p.GetMode() != PointerWrap::MODE_READ || total_size == 0)
if (!p.IsReadMode() || total_size == 0)
return std::nullopt;

auto tex = AllocateTexture(config);
@@ -542,7 +542,7 @@ void TextureCacheBase::DoState(PointerWrap& p)

p.Do(last_entry_id);

if (p.GetMode() == PointerWrap::MODE_WRITE || p.GetMode() == PointerWrap::MODE_MEASURE)
if (p.IsWriteMode() || p.IsMeasureMode())
DoSaveState(p);
else
DoLoadState(p);
@@ -673,7 +673,7 @@ void TextureCacheBase::DoLoadState(PointerWrap& p)
// Only clear out state when actually restoring/loading.
// Since we throw away entries when not in loading mode now, we don't need to check
// before inserting entries into the cache, as GetEntry will always return null.
const bool commit_state = p.GetMode() == PointerWrap::MODE_READ;
const bool commit_state = p.IsReadMode();
if (commit_state)
Invalidate();

@@ -519,7 +519,7 @@ void VertexManagerBase::Flush()

void VertexManagerBase::DoState(PointerWrap& p)
{
if (p.GetMode() == PointerWrap::MODE_READ)
if (p.IsReadMode())
{
// Flush old vertex data before loading state.
Flush();
@@ -635,7 +635,7 @@ void VertexShaderManager::DoState(PointerWrap& p)

p.Do(constants);

if (p.GetMode() == PointerWrap::MODE_READ)
if (p.IsReadMode())
{
Dirty();
}
@@ -27,10 +27,10 @@ void VideoCommon_DoState(PointerWrap& p)
bool software = false;
p.Do(software);

if (p.GetMode() == PointerWrap::MODE_READ && software == true)
if (p.IsReadMode() && software == true)
{
// change mode to abort load of incompatible save state.
p.SetMode(PointerWrap::MODE_VERIFY);
p.SetVerifyMode();
}

// BP Memory
@@ -86,7 +86,7 @@ void VideoCommon_DoState(PointerWrap& p)
p.DoMarker("Renderer");

// Refresh state.
if (p.GetMode() == PointerWrap::MODE_READ)
if (p.IsReadMode())
{
// Inform backend of new state from registers.
BPReload();