mirror of
https://github.com/mitch030504/Wiicompiled_VR_Frame.git
synced 2026-10-06 01:00:14 +02:00
Documented the Quest foveation measurements
- Luigi Circuit Grand Prix start on a Quest 3, same-session A/B through the debug properties: one render pass per eye saves 12% of eye GPU time at render_scale 0.8 and 8% at 1.3. - Foveation is neutral at 0.8 (eyes are geometry and full-resolution tile-store bound) and saves 8/14/22% at Low/Medium/High at 1.3, so it stays off by default. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
cc653272c8
commit
11084d13d9
2 files changed
+41
-2
No files matched your search
@@ -657,6 +657,21 @@ enabled" at startup, one "eye foveation" line per eye and level with the map's s
|
||||
replay plan" lines. `debug.wiicompiled.foveation <0-3>` overrides the level for A/B timing, and
|
||||
`debug.wiicompiled.fdm 0` launches without density maps at all (`docs/quest-port.md`).
|
||||
|
||||
What it saves depends on how much of an eye's cost is shading pixels. The numbers below are from a
|
||||
Quest 3 at Luigi Circuit's Grand Prix start: GPU time of both eyes per frame, all settings
|
||||
interleaved within one session (`docs/quest-port.md` has the method).
|
||||
|
||||
| `render_scale` (eye size) | One pass per recorded pass | `single_pass_eyes` | `low` | `medium` | `high` |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| 0.8 (1344x1408) | 5.82 ms | 5.11 ms | 5.09 ms | 5.36 ms | 5.11 ms |
|
||||
| 1.3 (2184x2288) | 6.32 ms | 5.81 ms | 5.33 ms | 5.00 ms | 4.56 ms |
|
||||
|
||||
At the Quest's default 0.8 an eye's time goes mostly to geometry and to storing its tiles at full
|
||||
resolution. The Wii's shading is cheap, so foveation saves nothing measurable there, although the
|
||||
density map verifiably applies (4x4 blocks at the view's edges on High). That is why it defaults to
|
||||
`off`. At higher render scales it takes 8 to 22% off the eyes, which is where it earns its keep,
|
||||
bought with a softer periphery.
|
||||
|
||||
## Diagnostics
|
||||
|
||||
**F10 > Diagnostics** holds two bug-report aids.
|
||||
|
||||
+26
-2
@@ -151,6 +151,30 @@ Changing the level is live. The launch decides whether the device has density
|
||||
maps at all, because every pipeline carries the flag and Dawn's pipeline cache
|
||||
keys on it: the first launch with foveation on recompiles every pipeline once.
|
||||
|
||||
Measured on the Quest 3 on 2026-09-24. The game was launched with `foveation = "medium"` and
|
||||
`debug.wiicompiled.fpslog 1`, then taken by injected presses to Luigi Circuit's Grand Prix
|
||||
start, first-person cockpit, player idle. Settings were set through
|
||||
`debug.wiicompiled.eye_passes` and `debug.wiicompiled.foveation`, interleaved in 11 s windows
|
||||
over three or four rounds. Each 5 s `GPU ms/frame` line was assigned to the setting active for
|
||||
all of it, using the runtime's own switch log lines. The GPU stayed at clock level 3 (492 MHz)
|
||||
at 0.8, and 492 to 525 MHz at 1.3, the unfoveated windows running at the higher clocks.
|
||||
|
||||
- `render_scale` 0.8 (1344x1408): eyes 5.82 ms with one render pass per recorded pass
|
||||
(the race's 4 EFB passes), 5.11 ms merged into one (-12%). Low, Medium and High gave 5.09,
|
||||
5.36 and 5.11 ms: no change beyond the spread between windows (up to ±0.4 ms). Compositor app GPU
|
||||
time went from 8.31 to 7.66 ms with the merge, and the headset held 60 FPS throughout.
|
||||
- `render_scale` 1.3 (2184x2288): 6.32 ms split, 5.81 ms merged (-8%); Low, Medium and High
|
||||
gave 5.33, 5.00 and 4.56 ms (-8, -14 and -22%), each window within ±0.2 ms of its
|
||||
setting's mean. The compositor showed about 35 FPS at every setting: that scale is too heavy
|
||||
for other reasons, the copies of such large eyes among them.
|
||||
- A compositor screenshot (`TAKE_SCREENSHOT`, headset still on a desk) at High shows 4x4 pixel
|
||||
blocks on the kart body at the bottom of the view, and smooth shading with foveation off.
|
||||
|
||||
So at the default render scale an eye's time is mostly geometry and full-resolution tile stores,
|
||||
which a density map does not reduce (the stores stay full size for non-subsampled images).
|
||||
Foveation stays off by default; it pays when `render_scale` is raised. Heavy Retro Rewind tracks
|
||||
such as SNES Ghost Valley 2 were not measured.
|
||||
|
||||
### Controllers
|
||||
|
||||
Quest Touch controllers are not HID gamepads, so `openxr_input.cpp` syncs an
|
||||
@@ -1062,8 +1086,8 @@ or `EndAccess` errors); a black mirror too points at Aurora itself.
|
||||
(about half a minute); later runs load Dawn's pipeline cache from `Cache/`
|
||||
next to `DATA`. `render_scale` defaults to 0.8 here (1.0 on
|
||||
PC); lower it further if the compositor reports missed frames.
|
||||
Foveated rendering (above) is off by default until its device measurements
|
||||
pick a level.
|
||||
Foveated rendering (above) is off by default: at `render_scale` 0.8 it saves
|
||||
nothing measurable, above that 8 to 22% of the eyes' GPU time.
|
||||
- **Lifecycle.** Backgrounding (the Quest menu, guardian) pauses the session
|
||||
through the ordinary `STOPPING`/`READY` events; SDL's Android surface loss is
|
||||
handled by Aurora's existing Android paths. Neither has been exercised.
|
||||
|
||||
Reference in new issue
Block a user