WIP: fix(vk): float adds native on Panther Lake iGPUs, where the loop lost the exposure's adds #816

Draft
ertomas wants to merge 1 commit from ertomas/Longshot:fix/vk-ptl-native-fadd into main
First-time contributor

Type: fix · Risk: low · Tested on: Windows 11, Intel Arc B390 (Panther Lake iGPU), driver 101.9150 · Needs: a Linux build of the renderer (Test Farm)

Why

On Intel's Panther Lake laptops (the Arc B390 iGPU), Kokiri Forest is covered by a steady, milky near-white haze that washes out the trees, the houses, the ground and the characters. The game measures how bright the scene is to set its exposure, and on these GPUs that measurement lost part of its sums, so the game exposed the picture about 8 times too bright. An Arc B580 at the same spot shows only the forest's light mist.

The same sums are the program the GPU was lost in on this PC a few minutes into play (#606), and #444 made the same change on the Arc B-series for that program: with this change, the device was not lost in 40 minutes of play here.

Fixes #618
See #606

How to reproduce

Seen on: Windows 11 Insider 26220, Intel Arc B390 (Panther Lake iGPU, PCI 0xB080, no VRAM mirror), driver 32.0.101.9150, Core Ultra X7 358H, 32 GB
Settings and switches: defaults (Auto (this PC) preset); RX_VK_NO_INTEL_SERIAL=1 for the shader preparation only
Steps: load a save in Kokiri Forest, stand by Link's house next to Saria, or walk the path towards the Deku Tree
Expected: the forest with its light mist and sun shafts, full contrast and colour (as on an Arc B580)
Actual: the whole picture behind a near-white veil, steady, on every build of main tried (f647a072, fbd42024, 414f56e2, and #189, #443, #459)

What changed

The shaders' float adds to storage buffers are now the GPU's own atomic (OpAtomicFAddEXT) by default on Intel's Windows driver for Panther Lake iGPUs (PCI device 0xB0xx) from driver 101.9150, as they already are on Meteor Lake, Arrow Lake and Battlemage. Before, these GPUs ran the compare-exchange loop, which gives up after 1024 attempts and loses that add.

  • vk: native_fadd_wanted() in gpu/vk/vk_main.cpp takes 0xB0xx from 101.9150; the log line vk: float atomic add on storage buffers: names Panther Lake.
  • tests: tests/test_native_float_atomic_add.py's table has six Panther Lake cases: the B390 at 101.9150 and another 0xB0xx device native; an older driver, Meteor Lake at 9150, Mesa's driver and RX_VK_NATIVE_FADD=0 the loop. It fails on main (device 0xb080, version 101.9150: the loop) and passes here.
  • docs: the RX_VK_NATIVE_FADD row in docs/development.md; the runs in docs/tested/2026-11-14-igpu-haze-ertomas-run01.md and docs/tested/2026-11-15-igpu-haze-ertomas-run02.md.

How it was found (frame dumps, RX_VK_DUMP, on this PC):

  • Six runtime switches left the haze as it was: RX_VK_MIRROR=1, RX_VK_UB_SNAPSHOT=0 (=1 is this PC's default), RX_VK_SPLIT_UBFLUSH=1, RX_VK_READBACK_LATE=newest, RX_VK_CHUNK=0. So it is not stale or half-written memory without a VRAM mirror.
  • In the hazy frame, everything after the tonemap (ab368194) passes the picture through faithfully: the TAAU stand-in's output equals the tonemap's, and the last copy's sRGB encode is the game's own (NVN_FORMAT_RGBA8_SRGB). The tonemap's linear output had a mean of 0.71, against about 0.19 in a B580 screenshot of the same spot.
  • With RX_VK_NATIVE_FADD=1, every write to the scene target was about 8x darker from the first one on (the sky, 489438d7: mean 20.7 → 2.59; after the fog pass 1a7482c0: 0.78 → 0.11): the game's pre-exposure. The frame's float adds include 499dbfd0, one workgroup summing a 256x256 sky texture (#444's "sky's light sums"): one workgroup adding into a few words is the case where the loop runs out of attempts.

Measurements

Verdict: fixed. In four interleaved runs at Saria's spot (main, this PR, main, this PR), the screen with this PR is as bright as on an Arc B580 (linear mean 0.205 against 0.199), where main is about 4x brighter (0.778); the two runs of each side agree within 0.003. No device loss in about 40 minutes of play with native adds; one with the loop in about 20 minutes of short runs, at 499dbfd0.

Hardware: Windows 11 Insider 26220, Intel Arc B390 (Panther Lake iGPU, 0xB080, no VRAM mirror), driver 32.0.101.9150, Core Ultra X7 358H, 32 GB
Scene: Kokiri Forest, child, by Link's house next to Saria, daytime; Auto (this PC) preset, the game's upscaler (the TAAU stand-in on this card)
Method: screenshots (Win+Alt+PrtScn), mean of the scene area (5-70 % across, 5-75 % down, HUD left out) in linear light; the scene target's mean from the frame dump's log lines (RX_VK_DUMP); device losses from longshot_log.txt
How to reproduce: scripts/dev_packs.py runtimes: main 53f96d78 (its own renderer pack) and this PR over 53f96d78 (its renderer pack), no switch, run alternately; the frame dumps from runtimes over main 414f56e2, one with RX_VK_NATIVE_FADD=1

Interleaved A/B, screen linear mean (R, G, B), Saria's spot, in the order run:

Run Before: main @ 53f96d78 After: this PR's change over 53f96d78
1 0.779 0.727 0.568 0.204 0.197 0.164
2 0.777 0.724 0.563 0.206 0.199 0.164
Median 0.778 0.726 0.566 0.205 0.198 0.164

Arc B580 at the same spot (screenshot from #459): 0.199 0.191 0.156.

Measured over main 53f96d78; the PR is now on bbe6fdf2. The numbers still hold: this PR's diff is the same, and none of main's commits since touches the float-add choice, the float-add translation or the passes that set the exposure (git diff 53f96d78 bbe6fdf2 has no change to native_fadd_wanted, OpAtomicFAddEXT or the compare-exchange loop).

Where the brightness comes from (frame dumps, runtimes over main 414f56e2):

Before: main @ 414f56e2 After, RX_VK_NATIVE_FADD=1: main @ 414f56e2
Scene after the fog pass 1a7482c0, mean 0.780 0.590 0.354 0.111 0.097 0.077
Tonemap output ab368194, mean 0.712 0.646 0.455 0.154 0.139 0.099

Device lost: with the loop, once (499dbfd0) in about 20 minutes of short runs on main 414f56e2; with native adds, none in 37 minutes (this change over 414f56e2) plus the A/B runs.

main:   vk: float atomic add on storage buffers: compare-exchange loop, by default only with NVIDIA's driver and Intel's Windows driver on Meteor Lake and Arrow Lake (RX_VK_NATIVE_FADD=1: native where the GPU has it)
main:   vk: dump 249 pass c0 prog 1a7482c0ec9991ea #3485: ... mean 0.7797 0.5901 0.3535 1, ... max 33 24.25 14.5 1
main:   vk: dump 286 pass c0 prog ab3681946f93594a #4247: ... mean 0.7119 0.6461 0.4553 1, ... max 1 1 1 1
main:   vk: device lost: 2 checkpoints (1085666 markers set)
main:   vk:   stage 0x1: marker 1085480 (dispatch of program 499dbfd0721d2858, frame 2170)
switch: vk: float atomic add on storage buffers: native (VK_EXT_shader_atomic_float), RX_VK_NATIVE_FADD=1
switch: vk: dump 237 pass c0 prog 1a7482c0ec9991ea #200: ... mean 0.1107 0.09746 0.07739 1, ... max 3.219 2.438 1.438 1
switch: vk: dump ... pass c0 prog ab3681946f93594a #1077: ... mean 0.1542 0.1389 0.09899 1, ... max 0.9688 0.9531 0.9062 1
this PR: vk: float atomic add on storage buffers: native (VK_EXT_shader_atomic_float), Intel's Windows driver, Meteor Lake, Arrow Lake, Panther Lake or Battlemage

Screenshots of the same spot are in the first comment: the four A/B runs, the Deku Tree path, and the B580 reference.

Flags and settings

The default of RX_VK_NATIVE_FADD changes on Panther Lake iGPUs; no switch is added.

Flag What it is Before this PR After this PR Effect Helps / doesn't help / untested Recommendation
RX_VK_NATIVE_FADD (unset) float adds to storage buffers: the GPU's own atomic, or the compare-exchange loop the loop on Panther Lake native on Panther Lake (0xB0xx) from driver 101.9150 the game's exposure right; no haze helps on the Arc B390 (0xB080), 101.9150; other 0xB0xx devices untested on for Panther Lake; RX_VK_NATIVE_FADD=0 gives the loop back

Testing

Tested:

  • In the game, this change rebased on main 53f96d78 (the same diff as here; the PR is now on main bbe6fdf2), Windows 11 Insider 26220, Arc B390 (0xB080), driver 101.9150: four interleaved runs at Saria's spot against main 53f96d78 (main, this PR, main, this PR): the haze in both main runs, gone in both runs of this PR; the logs show the loop on main and native adds by the new default here; no device loss.
  • Earlier, in the game, Windows 11 Insider 26220, Arc B390 (0xB080), driver 101.9150: Kokiri Forest at Saria's spot and on the Deku Tree path, with this change's renderer pack over main 414f56e2 and no switch: the haze is gone, the picture as on a B580; 37 minutes of play, no device loss, a clean close. The log line confirms native adds by the new default.
  • RX_VK_NATIVE_FADD=1 on main 414f56e2: the same picture, so the native add alone is what changes it.
  • tests/test_native_float_atomic_add.py run directly with clang (llvm-mingw) and the Vulkan SDK's spirv-val: fails on main, passes here (48 cases), and main's own version of the check passes on this rule. run_all skips it on Windows (it needs spirv-val).
  • python -I -B tests/run_all.py on Windows, this PR @ f121f6bd over main bbe6fdf2: 552 passed, 18 failed, 36 skipped (Windows, 16 at once). None of the 18 reads this change, and each fails the same way on main bbe6fdf2 when run alone (test_tested_configurations is a CRLF/LF mismatch on Windows; test_vk_occlusion_queries doesn't find its C++ compiler on Windows): test_appimage_player_build, test_cpp_preflight, test_crash_dialog, test_env_on, test_lift_cleanup_error, test_linux_preflight, test_make_game_cache, test_make_game_prepare, test_missing_nup, test_oot_state_tap, test_options_budget_once, test_portable_builder_home, test_portable_builder_startup, test_readback_late, test_tested_configurations, test_vk_occlusion_queries, test_vk_pgo, test_walk_key.

Not tested:

  • Panther Lake devices other than the Arc B390, and drivers newer than 101.9150: none here.
  • Linux: Mesa's Intel driver keeps the loop (the check's table), so nothing changes there; the renderer was not built on Linux.

Must be tested:

  • Linux, any GPU (Test Farm: @Beanstalk linux, build the renderer): the renderer builds; no change in play is expected, since the rule only changes Intel's Windows driver.

Risks

What could break: on a Panther Lake iGPU, a driver whose native float add misbehaves; it was run on 101.9150 only. 0xB0xx is taken as Panther Lake's range, as 0x7Dxx is for Meteor Lake and Arrow Lake.

Turning it off: RX_VK_NATIVE_FADD=0 in longshot_env.txt, or revert the commit.

Compatibility: on Panther Lake iGPUs, the first start after updating translates the shaders and prepares the pipelines again (the program cache's stamp holds the float-add choice): one long start, about 24 minutes here with compiles side by side. Nothing changes on other GPUs, saves or the options file; no vk ABI change.

Issues

Fixes #618
See #606

Checklist

Everyone

  • One topic.
  • The title is a Conventional Commit (type(scope): description) of the status line's type.
  • Why gives the reason plainly and links the issues that fit (the tracker searched).
  • Measurements has a verdict, or one line saying why there is nothing to measure.
  • Testing names what was tested, what wasn't, and what must still be tested, where and how.
  • Rebased on current main.
  • python -I -B tests/run_all.py passes (any failure that also fails on main is named).
  • No game files, dumps, build output or generated files.
  • third_party/ untouched (a new folder with a PROVENANCE.md instead).
  • The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled.

When it applies

  • AI assistance recorded with Assisted-by: / Co-Authored-By: trailers.
  • Numbers from the same PC, scene and settings, at least 2 interleaved runs each, the median reported.
  • Switches documented (docs/development.md; the README for a menu row) and shipped at their recommended value.
  • Screenshots of the same spot, captioned like the Measurements columns, for a change that shows on screen.
  • A file in docs/tested/ for each new measured run (format in docs/tested-configurations.md).
  • A game-free test added for the fix, failing on main and passing here.
  • A check under tests/ that reads changed source updated in this PR, not weakened.
  • Host code builds on both Windows (llvm-mingw) and Linux, with UTF-8 paths. (Built on Windows; Linux not built: Must be tested.)
  • Docs updated.

🤖 Generated with Claude Code

**Type:** fix · **Risk:** low · **Tested on:** Windows 11, Intel Arc B390 (Panther Lake iGPU), driver 101.9150 · **Needs:** a Linux build of the renderer (Test Farm) ## Why On Intel's Panther Lake laptops (the Arc B390 iGPU), Kokiri Forest is covered by a steady, milky near-white haze that washes out the trees, the houses, the ground and the characters. The game measures how bright the scene is to set its exposure, and on these GPUs that measurement lost part of its sums, so the game exposed the picture about 8 times too bright. An Arc B580 at the same spot shows only the forest's light mist. The same sums are the program the GPU was lost in on this PC a few minutes into play (#606), and #444 made the same change on the Arc B-series for that program: with this change, the device was not lost in 40 minutes of play here. Fixes #618 See #606 ## How to reproduce **Seen on:** Windows 11 Insider 26220, Intel Arc B390 (Panther Lake iGPU, PCI 0xB080, no VRAM mirror), driver 32.0.101.9150, Core Ultra X7 358H, 32 GB **Settings and switches:** defaults (Auto (this PC) preset); `RX_VK_NO_INTEL_SERIAL=1` for the shader preparation only **Steps:** load a save in Kokiri Forest, stand by Link's house next to Saria, or walk the path towards the Deku Tree **Expected:** the forest with its light mist and sun shafts, full contrast and colour (as on an Arc B580) **Actual:** the whole picture behind a near-white veil, steady, on every build of main tried (f647a072, fbd42024, 414f56e2, and #189, #443, #459) ## What changed The shaders' float adds to storage buffers are now the GPU's own atomic (`OpAtomicFAddEXT`) by default on Intel's Windows driver for Panther Lake iGPUs (PCI device 0xB0xx) from driver 101.9150, as they already are on Meteor Lake, Arrow Lake and Battlemage. Before, these GPUs ran the compare-exchange loop, which gives up after 1024 attempts and loses that add. - vk: `native_fadd_wanted()` in `gpu/vk/vk_main.cpp` takes 0xB0xx from 101.9150; the log line `vk: float atomic add on storage buffers:` names Panther Lake. - tests: `tests/test_native_float_atomic_add.py`'s table has six Panther Lake cases: the B390 at 101.9150 and another 0xB0xx device native; an older driver, Meteor Lake at 9150, Mesa's driver and `RX_VK_NATIVE_FADD=0` the loop. It fails on main (`device 0xb080, version 101.9150: the loop`) and passes here. - docs: the `RX_VK_NATIVE_FADD` row in `docs/development.md`; the runs in `docs/tested/2026-11-14-igpu-haze-ertomas-run01.md` and `docs/tested/2026-11-15-igpu-haze-ertomas-run02.md`. How it was found (frame dumps, `RX_VK_DUMP`, on this PC): - Six runtime switches left the haze as it was: `RX_VK_MIRROR=1`, `RX_VK_UB_SNAPSHOT=0` (`=1` is this PC's default), `RX_VK_SPLIT_UBFLUSH=1`, `RX_VK_READBACK_LATE=newest`, `RX_VK_CHUNK=0`. So it is not stale or half-written memory without a VRAM mirror. - In the hazy frame, everything after the tonemap (`ab368194`) passes the picture through faithfully: the TAAU stand-in's output equals the tonemap's, and the last copy's sRGB encode is the game's own (`NVN_FORMAT_RGBA8_SRGB`). The tonemap's linear output had a mean of 0.71, against about 0.19 in a B580 screenshot of the same spot. - With `RX_VK_NATIVE_FADD=1`, every write to the scene target was about 8x darker from the first one on (the sky, `489438d7`: mean 20.7 → 2.59; after the fog pass `1a7482c0`: 0.78 → 0.11): the game's pre-exposure. The frame's float adds include `499dbfd0`, one workgroup summing a 256x256 sky texture (#444's "sky's light sums"): one workgroup adding into a few words is the case where the loop runs out of attempts. ## Measurements **Verdict:** fixed. In four interleaved runs at Saria's spot (main, this PR, main, this PR), the screen with this PR is as bright as on an Arc B580 (linear mean 0.205 against 0.199), where main is about 4x brighter (0.778); the two runs of each side agree within 0.003. No device loss in about 40 minutes of play with native adds; one with the loop in about 20 minutes of short runs, at `499dbfd0`. Hardware: Windows 11 Insider 26220, Intel Arc B390 (Panther Lake iGPU, 0xB080, no VRAM mirror), driver 32.0.101.9150, Core Ultra X7 358H, 32 GB Scene: Kokiri Forest, child, by Link's house next to Saria, daytime; Auto (this PC) preset, the game's upscaler (the TAAU stand-in on this card) Method: screenshots (Win+Alt+PrtScn), mean of the scene area (5-70 % across, 5-75 % down, HUD left out) in linear light; the scene target's mean from the frame dump's log lines (`RX_VK_DUMP`); device losses from `longshot_log.txt` How to reproduce: `scripts/dev_packs.py` runtimes: main 53f96d78 (its own renderer pack) and this PR over 53f96d78 (its renderer pack), no switch, run alternately; the frame dumps from runtimes over main 414f56e2, one with `RX_VK_NATIVE_FADD=1` **Interleaved A/B, screen linear mean (R, G, B)**, Saria's spot, in the order run: | Run | Before: main @ 53f96d78 | After: this PR's change over 53f96d78 | |---|---|---| | 1 | 0.779 0.727 0.568 | 0.204 0.197 0.164 | | 2 | 0.777 0.724 0.563 | 0.206 0.199 0.164 | | **Median** | **0.778 0.726 0.566** | **0.205 0.198 0.164** | Arc B580 at the same spot (screenshot from #459): 0.199 0.191 0.156. Measured over main 53f96d78; the PR is now on bbe6fdf2. The numbers still hold: this PR's diff is the same, and none of main's commits since touches the float-add choice, the float-add translation or the passes that set the exposure (`git diff 53f96d78 bbe6fdf2` has no change to `native_fadd_wanted`, `OpAtomicFAddEXT` or the compare-exchange loop). **Where the brightness comes from** (frame dumps, runtimes over main 414f56e2): | | Before: main @ 414f56e2 | After, `RX_VK_NATIVE_FADD=1`: main @ 414f56e2 | |---|---|---| | Scene after the fog pass `1a7482c0`, mean | 0.780 0.590 0.354 | 0.111 0.097 0.077 | | Tonemap output `ab368194`, mean | 0.712 0.646 0.455 | 0.154 0.139 0.099 | **Device lost:** with the loop, once (`499dbfd0`) in about 20 minutes of short runs on main 414f56e2; with native adds, none in 37 minutes (this change over 414f56e2) plus the A/B runs. ``` main: vk: float atomic add on storage buffers: compare-exchange loop, by default only with NVIDIA's driver and Intel's Windows driver on Meteor Lake and Arrow Lake (RX_VK_NATIVE_FADD=1: native where the GPU has it) main: vk: dump 249 pass c0 prog 1a7482c0ec9991ea #3485: ... mean 0.7797 0.5901 0.3535 1, ... max 33 24.25 14.5 1 main: vk: dump 286 pass c0 prog ab3681946f93594a #4247: ... mean 0.7119 0.6461 0.4553 1, ... max 1 1 1 1 main: vk: device lost: 2 checkpoints (1085666 markers set) main: vk: stage 0x1: marker 1085480 (dispatch of program 499dbfd0721d2858, frame 2170) switch: vk: float atomic add on storage buffers: native (VK_EXT_shader_atomic_float), RX_VK_NATIVE_FADD=1 switch: vk: dump 237 pass c0 prog 1a7482c0ec9991ea #200: ... mean 0.1107 0.09746 0.07739 1, ... max 3.219 2.438 1.438 1 switch: vk: dump ... pass c0 prog ab3681946f93594a #1077: ... mean 0.1542 0.1389 0.09899 1, ... max 0.9688 0.9531 0.9062 1 this PR: vk: float atomic add on storage buffers: native (VK_EXT_shader_atomic_float), Intel's Windows driver, Meteor Lake, Arrow Lake, Panther Lake or Battlemage ``` Screenshots of the same spot are in the first comment: the four A/B runs, the Deku Tree path, and the B580 reference. ### Flags and settings The default of `RX_VK_NATIVE_FADD` changes on Panther Lake iGPUs; no switch is added. | Flag | What it is | Before this PR | After this PR | Effect | Helps / doesn't help / untested | Recommendation | |---|---|---|---|---|---|---| | `RX_VK_NATIVE_FADD` (unset) | float adds to storage buffers: the GPU's own atomic, or the compare-exchange loop | the loop on Panther Lake | native on Panther Lake (0xB0xx) from driver 101.9150 | the game's exposure right; no haze | helps on the Arc B390 (0xB080), 101.9150; other 0xB0xx devices untested | on for Panther Lake; `RX_VK_NATIVE_FADD=0` gives the loop back | ## Testing **Tested:** - In the game, this change rebased on main 53f96d78 (the same diff as here; the PR is now on main bbe6fdf2), Windows 11 Insider 26220, Arc B390 (0xB080), driver 101.9150: four interleaved runs at Saria's spot against main 53f96d78 (main, this PR, main, this PR): the haze in both main runs, gone in both runs of this PR; the logs show the loop on main and native adds by the new default here; no device loss. - Earlier, in the game, Windows 11 Insider 26220, Arc B390 (0xB080), driver 101.9150: Kokiri Forest at Saria's spot and on the Deku Tree path, with this change's renderer pack over main 414f56e2 and no switch: the haze is gone, the picture as on a B580; 37 minutes of play, no device loss, a clean close. The log line confirms native adds by the new default. - `RX_VK_NATIVE_FADD=1` on main 414f56e2: the same picture, so the native add alone is what changes it. - `tests/test_native_float_atomic_add.py` run directly with clang (llvm-mingw) and the Vulkan SDK's `spirv-val`: fails on main, passes here (48 cases), and main's own version of the check passes on this rule. `run_all` skips it on Windows (it needs `spirv-val`). - `python -I -B tests/run_all.py` on Windows, this PR @ f121f6bd over main bbe6fdf2: 552 passed, 18 failed, 36 skipped (Windows, 16 at once). None of the 18 reads this change, and each fails the same way on main bbe6fdf2 when run alone (test_tested_configurations is a CRLF/LF mismatch on Windows; test_vk_occlusion_queries doesn't find its C++ compiler on Windows): test_appimage_player_build, test_cpp_preflight, test_crash_dialog, test_env_on, test_lift_cleanup_error, test_linux_preflight, test_make_game_cache, test_make_game_prepare, test_missing_nup, test_oot_state_tap, test_options_budget_once, test_portable_builder_home, test_portable_builder_startup, test_readback_late, test_tested_configurations, test_vk_occlusion_queries, test_vk_pgo, test_walk_key. **Not tested:** - Panther Lake devices other than the Arc B390, and drivers newer than 101.9150: none here. - Linux: Mesa's Intel driver keeps the loop (the check's table), so nothing changes there; the renderer was not built on Linux. **Must be tested:** - Linux, any GPU (Test Farm: `@Beanstalk linux, build the renderer`): the renderer builds; no change in play is expected, since the rule only changes Intel's Windows driver. ## Risks **What could break:** on a Panther Lake iGPU, a driver whose native float add misbehaves; it was run on 101.9150 only. `0xB0xx` is taken as Panther Lake's range, as `0x7Dxx` is for Meteor Lake and Arrow Lake. **Turning it off:** `RX_VK_NATIVE_FADD=0` in `longshot_env.txt`, or revert the commit. **Compatibility:** on Panther Lake iGPUs, the first start after updating translates the shaders and prepares the pipelines again (the program cache's stamp holds the float-add choice): one long start, about 24 minutes here with compiles side by side. Nothing changes on other GPUs, saves or the options file; no vk ABI change. ## Issues Fixes #618 See #606 ## Checklist ### Everyone - [x] One topic. - [x] The title is a Conventional Commit (`type(scope): description`) of the status line's type. - [x] Why gives the reason plainly and links the issues that fit (the tracker searched). - [x] Measurements has a verdict, or one line saying why there is nothing to measure. - [x] Testing names what was tested, what wasn't, and what must still be tested, where and how. - [x] Rebased on current `main`. - [x] `python -I -B tests/run_all.py` passes (any failure that also fails on `main` is named). - [x] No game files, dumps, build output or generated files. - [x] `third_party/` untouched (a new folder with a `PROVENANCE.md` instead). - [x] The license is OK: GPL-3.0-or-later, nothing incompatible and nothing decompiled. ### When it applies - [x] AI assistance recorded with `Assisted-by:` / `Co-Authored-By:` trailers. - [x] Numbers from the same PC, scene and settings, at least 2 interleaved runs each, the median reported. - [x] Switches documented (docs/development.md; the README for a menu row) and shipped at their recommended value. - [x] Screenshots of the same spot, captioned like the Measurements columns, for a change that shows on screen. - [x] A file in `docs/tested/` for each new measured run (format in `docs/tested-configurations.md`). - [x] A game-free test added for the fix, failing on `main` and passing here. - [x] A check under `tests/` that reads changed source updated in this PR, not weakened. - [ ] Host code builds on both Windows (llvm-mingw) and Linux, with UTF-8 paths. (Built on Windows; Linux not built: Must be tested.) - [x] Docs updated. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(vk): float adds native on Panther Lake iGPUs, where the loop lost the exposure's adds
Some checks failed
beanstalk/approval waiting for a BigBean's 👍 on the request
PR description / Description follows the template (pull_request_target) Successful in 4s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Guide screenshots / Guide images and local UI source review (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
Website / Website on Cloudflare (pull_request) Has been cancelled
ee768482f1
On an Arc B390 (Panther Lake, 0xB080, driver 101.9150) the shaders' float adds to
storage buffers ran as the compare-exchange loop, and the game's exposure came out
about 8x too high: every write to the scene, from the sky on, was 8x too bright, and
a milky white haze covered Kokiri Forest (issue 618). With native adds the scene
matched an Arc B580's at the same spot, and the device was not lost in 40 minutes of
play, where the loop lost it at 499dbfd0, the sky's light sums (issue 606; #444 made
Battlemage native for the same program).

native_fadd_wanted now takes Intel's Windows driver on 0xB0xx from 101.9150 too,
beside Meteor Lake, Arrow Lake and Battlemage. The check's table has the Panther Lake
cases (failing on main, passing here); the log line and the switch's row in
docs/development.md name Panther Lake.

Fixes #618
See #606

Assisted-by: Claude Opus 5.5
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Author
First-time contributor

Screenshots, Windows 11, Arc B390 (Panther Lake iGPU, 0xB080), driver 101.9150, Kokiri Forest, the Auto (this PC) preset.

By Link's house, next to Saria

Four interleaved runs, in the order played:

Run 1, before: main @ 53f96d78

Run 2, after: this PR's change over 53f96d78, no switch

Run 3, before: main @ 53f96d78

Run 4, after: this PR's change over 53f96d78, no switch

Arc B580, driver 101.9154, from #459 (the reference)

The path towards the Deku Tree (the same area; the camera is not at exactly the same place)

Before: main @ 414f56e2

After: this PR (over 414f56e2), no switch

Screenshots, Windows 11, Arc B390 (Panther Lake iGPU, 0xB080), driver 101.9150, Kokiri Forest, the Auto (this PC) preset. **By Link's house, next to Saria** Four interleaved runs, in the order played: ![Run 1, before: main @ 53f96d78](https://git.magicbean.dev/attachments/34f392bb-5732-4e63-89b3-1cc84876cdaa) ![Run 2, after: this PR's change over 53f96d78, no switch](https://git.magicbean.dev/attachments/083abcf1-68b0-4cb3-8f18-ceed52db348a) ![Run 3, before: main @ 53f96d78](https://git.magicbean.dev/attachments/ba401d02-ae66-4f29-9ba9-d2eed4f9159f) ![Run 4, after: this PR's change over 53f96d78, no switch](https://git.magicbean.dev/attachments/533f8f0a-5a0b-439f-900b-b5553f89922f) ![Arc B580, driver 101.9154, from #459 (the reference)](https://git.magicbean.dev/attachments/331ef07f-c6aa-47a0-9d38-135e9c1144aa) **The path towards the Deku Tree** (the same area; the camera is not at exactly the same place) ![Before: main @ 414f56e2](https://git.magicbean.dev/attachments/7d4718c2-d39c-45a5-ae1e-285ed639a08b) ![After: this PR (over 414f56e2), no switch](https://git.magicbean.dev/attachments/6ade0fd3-8cf5-43bb-b1c5-ed2a9d1f7113)
Author
First-time contributor

Rebased on main aa95d35f before opening; the description says why the A/B numbers from 53f96d78 still hold, and run_all was run again on the rebase (the same 18 Windows failures as on main).

Rebased on main aa95d35f before opening; the description says why the A/B numbers from 53f96d78 still hold, and run_all was run again on the rebase (the same 18 Windows failures as on main).
Author
First-time contributor

@Beanstalk linux, build the renderer: the build succeeds; no change in play expected (the rule only changes Intel's Windows driver)

@Beanstalk linux, build the renderer: the build succeeds; no change in play expected (the rule only changes Intel's Windows driver)
Member

@ertomas only members of BigBeans can start the farm.

One of them can approve this request by reacting 👍 to it. This request was for ee76848, and the PR has changed since (f121f6b), so a 👍 no longer approves it. Comment @Beanstalk again to ask for the new commit.

@ertomas only members of `BigBeans` can start the farm. ~~One of them can approve this request by reacting 👍 to it.~~ This request was for `ee76848`, and the PR has changed since (`f121f6b`), so a 👍 no longer approves it. Comment `@Beanstalk` again to ask for the new commit.
HumanBean force-pushed fix/vk-ptl-native-fadd from ee768482f1
Some checks failed
beanstalk/approval waiting for a BigBean's 👍 on the request
PR description / Description follows the template (pull_request_target) Successful in 4s
CI / Conventional Commit title (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been cancelled
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been cancelled
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been cancelled
CI / Workflow lint (actionlint) (pull_request) Has been cancelled
Guide screenshots / Guide images and local UI source review (pull_request) Has been cancelled
Third-party parts / As their notes say (pull_request) Has been cancelled
Third-party parts / The same as upstream (pull_request) Has been cancelled
Website / Website on Cloudflare (pull_request) Has been cancelled
to f121f6bd5b
Some checks failed
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
beanstalk/approval waiting for a BigBean's 👍 on the request
PR description / Description follows the template (pull_request_target) Successful in 3s
CI / Conventional Commit title (pull_request) Successful in 3s
CI / Workflow lint (actionlint) (pull_request) Successful in 5s
Guide screenshots / Guide images and local UI source review (pull_request) Failing after 4s
Third-party parts / As their notes say (pull_request) Successful in 8s
2026-11-15 18:45:01 +00:00
Compare
Owner

Rebased onto main @ bbe6fdf2: no conflicts. No tests were run here; the test boxes stay yours.

Rebased onto `main` @ bbe6fdf2: no conflicts. No tests were run here; the test boxes stay yours.
Author
First-time contributor

Description updated for HumanBean's rebase onto main bbe6fdf2 (f121f6bd): run_all run again there (552 passed; the 18 failures fail the same way on main bbe6fdf2 alone), the fix's own check passes, and none of main's commits since the A/B touches the float-add rule.

Description updated for HumanBean's rebase onto main bbe6fdf2 (f121f6bd): run_all run again there (552 passed; the 18 failures fail the same way on main bbe6fdf2 alone), the fix's own check passes, and none of main's commits since the A/B touches the float-add rule.
Author
First-time contributor

@Beanstalk linux, build the renderer: the build succeeds; no change in play expected (the rule only changes Intel's Windows driver)

@Beanstalk linux, build the renderer: the build succeeds; no change in play expected (the rule only changes Intel's Windows driver)
Member

@ertomas only members of BigBeans can start the farm. One of them can approve this request by reacting 👍 to it.

@ertomas only members of `BigBeans` can start the farm. One of them can approve this request by reacting 👍 to it.
Some checks failed
CI / Python source checks (ubuntu-24.04, part 1/2) (pull_request) Has been skipped
CI / Python source checks (ubuntu-24.04, part 2/2) (pull_request) Has been skipped
CI / SPIR-V fixtures (global narrow load/store, direct surface atomics, F2I immediate) (pull_request) Has been skipped
Third-party parts / The same as upstream (pull_request) Has been skipped
Website / Website on Cloudflare (pull_request) Has been skipped
beanstalk/approval waiting for a BigBean's 👍 on the request
PR description / Description follows the template (pull_request_target) Successful in 3s
CI / Conventional Commit title (pull_request) Successful in 3s
CI / Workflow lint (actionlint) (pull_request) Successful in 5s
Guide screenshots / Guide images and local UI source review (pull_request) Failing after 4s
Third-party parts / As their notes say (pull_request) Successful in 8s
This pull request is marked as a work in progress.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u 'fix/vk-ptl-native-fadd:ertomas-fix/vk-ptl-native-fadd'
git switch 'ertomas-fix/vk-ptl-native-fadd'
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
MagicBeanDev/Longshot!816
No description provided.