Files

2.1 KiB

Automatic GPU output orientation

At graphics-device initialization the application renders an invisible asymmetric 16x8 calibration image into an offscreen texture. It reads the actual GPU pixels and checks their top/bottom and left/right order. It then checks the production copy shader and chooses the output transform that restores the known order.

No orientation setting or headset recentering is needed. The old experimental [vr] race_image_orientation key is ignored. Nothing is inferred from a screenshot of the race, the player's head pose, the name of a headset or GPU, or Windows GPU scheduling settings.

The result is logged as VR GPU orientation probe. A timeout, unsupported format, or unrecognized pixel pattern leaves the orientation unchanged. The bounded readback happens only during device initialization, never every frame. It is repeated when the graphics device is recreated. A normal native-resolution race keeps its direct copy path; adaptive upscaling uses the verified copy transform. If the raster probe is inverted, the race output is corrected after the world, hands and HUD are rendered. Both eyes use the same device calibration. Room-anchored menus and tutorials are unchanged.

Scope

This detects orientation in the application's GPU raster/copy path. It cannot observe an inversion introduced afterwards by a streaming encoder, compositor or headset display. Nor does an offscreen probe diagnose a bad game-camera matrix. The users' reported race-only inversion has not been reproduced locally; its association with Virtual Desktop or hardware GPU scheduling is unconfirmed. If it persists with an upright probe result, collect the session log, a headset capture and the affected runtime/GPU versions instead of adding a blanket flip.

Validation

output_orientation_gpu_test reads the production WGSL and checks asymmetric pixels through D3D12 rendering/readback at native and doubled sizes. It also runs the production automatic probe with each possible default copy orientation injected and verifies that the upright pipeline is selected. These GPU tests do not reproduce a remote user's compositor/streaming environment.