D888 - A guest dispatch runs on a queue of its own
Status: measured Date: 2026-10-15
Amends: D805 - a guest dispatch settled every draw queued on the device before it ran.
Where the device has one, a guest dispatch runs on a queue apart from the one draws are recorded to: the first queue of a compute-only family, else a second queue of the draws' family. Every dispatch runs there, so the buffers, images and pools dispatches share are only ever used by that family. A guest dispatch on a queue of its own no longer settles the device first. A device with one queue in its family runs dispatches on the draws' queue and settles first, as before.
A dispatch needs nothing a queued draw produces on the device: its window, images and buffers are uploaded by the host for it, its results are read back to the host, and what a draw writes on the device reaches guest memory only through a write-back the command processor has already made. On the draws' queue it waited for every draw ahead of it - the settle first, and then its fence, which the queue orders behind them. The console's compute work runs on queues of its own beside the graphics ring.
Why: CRFT00001 waited on the device for a third of
its run while the device worked a fifth of it; its three dispatches a
frame each waited out the frame's queued draws.
orbistoun-cli ab against d4801ab7, three rounds of 30 s,
beside another program keeping the GPU 70-98% busy: CRFT00001 8.7 ->
14.1 fps (every run of the change above every run of the baseline),
STKT00001 27.8 -> 36.1, MCUB00001 67.6 against 67.4;
device: setup: settle went to nothing in each, and every
flip the baselines repeated was drawn alike. A second queue of the
graphics family alone moved the wait into the dispatch's fence
(CRFT00001 device: run: wait 1.8% -> 12.2%, its rate
unmoved).
On an idle GPU, against 0271b972, three rounds of 30 s: CRFT00001
31.6 -> 34.4 fps, MCUB00001 137.5 -> 141.3, STKT00001 98.9 ->
90.7 with its median frame time unmoved (7.2 -> 7.1 ms; two of its
runs read 84 and 86); device: setup: settle went to nothing
in each and the dispatch's own wait grew by a tenth of it, every
repeated flip drawn alike.
Known limits: the gain is largest beside other GPU work, where dispatches no longer queue behind draws it slows; on an idle GPU it is the settle alone, a few percent of a dispatch-heavy title.