mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-10-22 16:43:05 -05:00
A RELEASE_MEM with an interrupt select drained the device: the queue worker submitted everything recorded and waited for the GPU before it stored the label and delivered the interrupt. PPSA21564 issues about 300 of them per frame, so the worker and the GPU took turns. The label is now recorded like any other (on the GPU behind the work, or as a completion action behind pending write-backs), and the delivery becomes a completion action of the batch holding the work before the packet (Recorder::AfterRecordedWork, after the batch's earlier completions). It is counted with the completion labels, so idle workers and pollers reap it, and it starts the label flush deadline. With draws or dispatches recorded since the last submit the batch is submitted at once. A batch holding only label stores stays open and goes out with the next work, at the label flush deadline, at a wait, at a flip or at the end of the submission, like any other pending label. A label the GPU cannot store, or one that does not decode, still drains. The interrupt so never arrives before the work ahead of it completed and its label landed; it can only arrive later, by at most the flush deadline plus the work recorded into the same batch.