mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-07 13:39:55 +00:00
fix(agc): a pipelined release with INT_SEL 3 raises no interrupt
The pipelined label path treated every nonzero RELEASE_MEM INT_SEL as an end-of-pipe interrupt;
main's PacketMemory excludes 3 (send data after write confirm). agc_driver failed on it with
APS5_PIPELINED_DRAWS=1 ("release with INT_SEL send data after write confirm raised an interrupt").
Co-Authored-By: TheAggie <[email protected]>
Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
1 parent
a18ab8c009
commit
2cd5c75dc8
1 file changed
+2
-1
@@ -334,7 +334,8 @@ void Driver::commitDmaStore(std::uint32_t queue, std::uint64_t address, std::spa
|
||||
bool Driver::enqueueLabelPacket(std::span<const std::uint32_t> packet, std::uint32_t opcode, std::uint32_t queue) {
|
||||
static const bool ordered = std::getenv("APS5_PIPELINE_DRAIN_LABELS") == nullptr;
|
||||
if (!ordered || !DeferLabels() || (opcode != 0x49 && opcode != 0x37)) return false;
|
||||
const bool endOfPipeInterrupt = opcode == 0x49 && ((packet[2] >> 24u) & 7u) != 0;
|
||||
const auto interruptSelect = opcode == 0x49 ? (packet[2] >> 24u) & 7u : 0u;
|
||||
const bool endOfPipeInterrupt = interruptSelect != 0 && interruptSelect != 3;
|
||||
const auto label = Pm4::DecodeLabelWrite(packet);
|
||||
if (!label.has_value()) {
|
||||
if (opcode != 0x49) return false;
|
||||
|
||||
Reference in new issue
Block a user