D991 - A device-addressed dispatch is traced on the host with its images

Status: decided Date: 2026-10-25 known_by: measured

orbistoun-cli trace-dispatch runs a device-addressed capture (D980) on the host evaluator and compares what it stores with what the device stores, over the same inputs. The host trace reads the capture's guest ranges where they lay, and its images through wave_trace_with_images. A device run places the guest ranges again and compares them as guest-<n>.bin. Stored images are compared texel by texel. A capture that noted its source supplies its own program and context, so --kept is no longer needed.

What the host trace models. Reads and writes:

It also computes:

Several groups, or all. --group x,y repeats. --every-group runs every group and compares each stored image whole. A texel the device changed that no host store wrote also counts as a difference.

A global access's offset is signed. The OFFSET field of a global or scratch access is a signed twelve-bit number (RDNA 2 instruction set, FLAT). The reference assembler encodes offset:-2048 as 0x800. The decoder hands the field as it lies. The translator, the host evaluator and native lane runs read it through model::flat_offset, which sign-extends it for those two segments. Before this, a probe's store at offset:-2048 landed 2048 bytes above its address on the device. The test is a_global_access_below_its_address_reaches_below_it.

Measured on GTA V's ray-traversal pass at 0x74005b7e8600. Its 2,171 instructions run as [240, 135, 1] groups of one wave of sixty-four, device-addressed (D964), two lanes an invocation (D973). The capture is from run 347's in-world frames. The pass writes a one-channel shadow mask at half resolution. It casts one shadow ray a pixel, wave-coherently: the wave walks the hierarchy together on a stack held in lanes, and box and triangle nodes go to image_bvh_intersect_ray.

So the pass's output is correct as translated. The coloured static on in-world frames is not this pass's: it writes one channel, and its replayed mask is plain lit or shadowed, noisy only on the characters, as a one-ray-a-pixel shadow is before its denoiser.

Limits. The device and the host approximate the transcendentals and v_rcp_f32 differently in their last places, as the guest's hardware does too. For this pass, one-ulp changes to each of them on the host changed no texel. A sampled image is filtered at the eight sub-texel bits a device uses, so a bilinear sample can differ in its last bits. Atomics are not modelled. The tile flags the pass ORs into its buffer are compared only through the stored image.

Rejected: