MCPcopy Create free account
hub / github.com/PCSX2/pcsx2 / GSDumpReplayerCpuStep

Function GSDumpReplayerCpuStep

pcsx2/GSDumpReplayer.cpp:259–346  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

257}
258
259void GSDumpReplayerCpuStep()
260{
261 if (s_needs_state_loaded)
262 {
263 GSDumpReplayerLoadInitialState();
264 s_needs_state_loaded = false;
265 }
266
267 const GSDumpFile::GSData& packet = s_dump_file->GetPackets()[s_current_packet];
268 s_current_packet = (s_current_packet + 1) % static_cast<u32>(s_dump_file->GetPackets().size());
269 if (s_current_packet == 0)
270 {
271 s_dump_frame_number = 0;
272 if (s_dump_loop_count > 0)
273 s_dump_loop_count--;
274 else if (s_dump_loop_count == 0)
275 {
276 Host::RequestVMShutdown(false, false, false);
277 s_dump_running = false;
278 }
279 }
280
281 switch (packet.id)
282 {
283 case GSDumpTypes::GSType::Transfer:
284 {
285 switch (packet.path)
286 {
287 case GSDumpTypes::GSTransferPath::Path1Old:
288 {
289 if(packet.length > 16384)
290 {
291 Console.Error("GSDumpReplayer: Path1Old transfer exceeds 16KB buffer. Skipping transfer");
292 break;
293 }
294 std::unique_ptr<u8[]> data(new u8[16384]);
295 const size_t addr = 16384 - packet.length;
296 std::memcpy(data.get(), packet.data + addr, packet.length);
297 GSDumpReplayerSendPacketToMTGS(GIF_PATH_1, data.get(), packet.length);
298 }
299 break;
300
301 case GSDumpTypes::GSTransferPath::Path1New:
302 case GSDumpTypes::GSTransferPath::Path2:
303 case GSDumpTypes::GSTransferPath::Path3:
304 {
305 GSDumpReplayerSendPacketToMTGS(static_cast<GIF_PATH>(static_cast<u8>(packet.path) - 1),
306 packet.data, packet.length);
307 }
308 break;
309
310 default:
311 break;
312 }
313 break;
314 }
315
316 case GSDumpTypes::GSType::VSync:

Callers 1

GSDumpReplayerCpuExecuteFunction · 0.85

Calls 8

GSDumpReplayerFrameLimitFunction · 0.85
sizeMethod · 0.45
ErrorMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected