From cf014f865509af3ec54d272965647a1739f2e1e3 Mon Sep 17 00:00:00 2001 From: IndecisiveTurtle <47210458+raphaelthegreat@users.noreply.github.com> Date: Sun, 23 Mar 2025 01:19:15 +0200 Subject: [PATCH] liverpool: Ignore rewind packets with nullgpu Rewind allows guest to self modify its command list and synchronize properly. Oftentimes the value its polling is supposed to be written by a compute shader, thus it will never happen with nullgpu. Ignore the packet to avoid freezing in such case --- src/video_core/amdgpu/liverpool.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/video_core/amdgpu/liverpool.cpp b/src/video_core/amdgpu/liverpool.cpp index 23bec75f5..f12fbdbe5 100644 --- a/src/video_core/amdgpu/liverpool.cpp +++ b/src/video_core/amdgpu/liverpool.cpp @@ -655,6 +655,9 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span dcb, std::span(header); while (!rewind->Valid()) { YIELD_GFX(); @@ -793,6 +796,9 @@ Liverpool::Task Liverpool::ProcessCompute(std::span acb, u32 vqid) { break; } case PM4ItOpcode::Rewind: { + if (!rasterizer) { + break; + } const PM4CmdRewind* rewind = reinterpret_cast(header); while (!rewind->Valid()) { YIELD_ASC(vqid);