D787 - A split draw travels as one command

Status: decided Date: 2026-10-11

A non-indexed draw that D741 splits into chunks reaches the backend as one command, RenderCommand::DrawChunks: how many chunks, the vertices each full chunk draws, the vertices the last one draws, the first vertex, and how far each chunk's first vertex lies past the one before. The driver hands the backend the chunks it names, each as the Draw it would have been, so the device sees what it saw before: one draw-data record and one mesh workgroup per chunk, in one dispatch while nothing else changes.

What changes is the host's work between the guest's packet and the device. Every pass over a submission's commands - binding draw buffers and textures, censusing them, counting - meets one command per guest draw instead of one per chunk. Craft drew about 8,800 chunks a submission, 63 vertices each, and those passes, about a microsecond a chunk, were most of its frame on the host.

An indexed draw's chunks still travel separately: each reads its own range of the guest's index buffer, bound before it.

Why: the user chose it on 2026-10-11 over leaving D741's chunks as separate draws, once the per-chunk cost was measured (ORBISTOUN_PERF_DETAIL: 264,000 chunks a second in Craft, with the draw-buffer and texture passes at about 300 ms of each second).

Rejected: