Repository navigation
Conversation
|
Note: I couldn't run |
# Conflicts: # dm/gfx/nvn/nvn_mtl.m # docs/env_switches.tsv
With DM_NVN_BARRIER=game any game barrier gave the next draw pass the full consumer barrier. A barrier that orders only fragments (ORDER_FRAGMENTS / _TILED, INVALIDATE_TEXTURE) lets the next rendering's vertex work start early, and the last pass's relaxed end already orders its fragments before later fragment, compute and copy work, so the consumer barrier is left out. DM_NVN_BARRIER_FRAG=0 restores it. Breath of the Wild issues about 150 of these a frame (bits 0x12) and now uses draw_barriers game: full pass-start barriers fall from about 150 to about 33 a frame. iPad Pro 13" M4 at a 120 fps target, adjacent pairs (game / full): 90.3/89.6, 81.7/76.5, 68.3/69.9, 72.8/65.4 fps.
|
Rebased onto main (04811a6); no changes besides conflict resolution (enc_r_begin_pass keeps main's command memory marks, DM_NVN_BARRIER_FRAG sits before DM_NVN_BC_ALIAS in the switch table). |
…ment-only game barrier Upstream pull requests applied in this commit (their authors' work, brought onto this tree with a three-way merge; the description is in each PR): - seedds#1572 by Xipzer (open): Draw passes: no full consumer barrier after a fragment-only game barrier
|
Closing: superseded by e775054 (PR #2334). Main now keeps the game barrier's bits and skips the full consumer barrier unless they include Not on main from here: |
Draw passes no longer get the full consumer barrier after a game barrier that only orders fragments. Breath of the Wild now uses
draw_barriers game.With
draw_barriers game(DM_NVN_BARRIER=game), anynvnCommandBufferBarriergave the next draw pass the full consumer barrier (all stages before all stages).NVN_BARRIER_ORDER_FRAGMENTS/ORDER_FRAGMENTS_TILEDorder only fragment work: the next rendering's vertex work may start early (vertex reads of earlier results needORDER_PRIMITIVES). The last draw pass's relaxed end barrier (vertex and fragment stages before later fragment, dispatch and blit stages) already gives that order. So for barriers whose bits are only those two plusINVALIDATE_TEXTURE, the consumer barrier is left out, as when there was no barrier. Any other bit keeps the full barrier.DM_NVN_BARRIER_FRAG=0restores the old behaviour.Breath of the Wild issues about 150 barriers a frame with bits 0x12 (
ORDER_FRAGMENTS | INVALIDATE_TEXTURE), 25 with 0x1, and a few 0x11 / 0x1b / 0xff / 0x20. Its profile now usesdraw_barriers game: full pass-start barriers fall from about 150 to about 33 a frame (counter: 44370 full / 0 saved against about 9700 full / 35600 saved per window).iPad Pro 13" M4 at a 120 fps target (GPU-bound), Deadline boost on, adjacent pairs (game / full):
The device warmed over the runs. Mac (M4 Max) screenshots at the same spot match. Graphics tests give the same results as
mainwith and withoutDM_NVN_BARRIER=game(check_t_nvnandcheck_t_present_cropfail onmaintoo).For reference, upstream's own note for the mode: Ocarina of Time 25 to 18 ms GPU.