D752 - An unwritten compute start is the queue's zero

Status: decided Date: 2026-10-06

A compute dispatch whose initiator does not force its start to zero, on a queue where no submission wrote COMPUTE_START_X/Y/Z, starts its grid at group zero. A start the stream did write is still read as written, and a non-zero one is still refused as not modelled. This is the one register reset value the pipeline models. It is assumed, so a hardware row that contradicts it retires it.

Why: the AGC library's own dispatch never writes a start. sceAgcCbDispatch emits DISPATCH_DIRECT with initiator 0x41, which does not set FORCE_START_AT_000, and nothing else (166-agc, measured). obSCEne's REQ-cs02 found that the shader header's register table names no COMPUTE_START_* either. PPSA03416 and PPSA02664 dispatch this way, and so does every title built on that library. They work on hardware, so the start their queue holds is one under which the dispatch covers its whole grid. Mesa's drivers say the same of the queue: radv's queue preamble and radeonsi's set COMPUTE_START_X/Y/Z to zero once (radv_queue.c:647, si_mesh_shader.c:522), and a dispatch writes them only when it has a base (radv_cmd_buffer.c:14832). The CP's shadowed compute range begins at COMPUTE_START_X (ac_shadowed_regs.c:458), so the value is queue state and not per-dispatch.

Hardware could not settle it. REQ-cs01 and REQ-cs02 built the dispatch twice, bare and through oops-sdk's compute queue, and neither retired its fence.

Rejected: