Skip to content

#1267 makes agc_driver_flat_loads*, agc_driver_global_loads* and agc_driver_pixel_interlock fail on NVIDIA (Windows) #3087

Closed

Description

@TheTerr4

Build: Windows 11 Pro (10.0.26200), MinGW-w64 GCC 15.2.0 (WinLibs x86_64-ucrt-posix-seh, r7), Release, BUILD_TESTING=ON. NVIDIA GeForce RTX 4080 SUPER, driver 591.86 (Vulkan 1.4.325).

Since #1267, seven execution tests fail on this machine, both under parallel ctest and alone with -j1. Still failing on main 262c0316. Windows CI skips them (no Vulkan device), so it does not see this.

Failures

agc_driver_flat_loads, agc_driver_flat_loads_x2_x3, agc_driver_flat_loads_x4, agc_driver_global_loads, agc_driver_global_loads_x2_x3, agc_driver_global_loads_x4 each abort after ~65 s (they pass in ~0.4 s before #1267):

terminate called after throwing an instance of 'std::runtime_error'
  what():  guest allocation 0x1d31b890000+0x10000 is still pinned by GPU work or an import (waited 60000 ms for the lease (APS5_PIN_WAIT_MS))
FATAL: abort() (SIGABRT) on thread 15828

agc_driver_pixel_interlock fails after ~5 s:

vkDeviceWaitIdle: Vulkan result -4

Bisect

git bisect --first-parent over 54f28f2d..b69270dd, testing agc_driver_flat_loads and agc_driver_pixel_interlock at each step; both changed state at the same commit every time.

Commit flat_loads pixel_interlock
cb9734cd (main before the merge) pass pass
5c26edf5 (merge of #1267) fail fail
d70b8998 (base of #1267) pass pass
5623c0e9 (#1267's only commit, unmerged) fail fail

The commit fails on its own base, so it is not an interaction with other merges.

On main 262c0316, APS5_BDA_BYTE_READS=1 makes all three of agc_driver_flat_loads, agc_driver_global_loads and agc_driver_pixel_interlock pass (0.4-0.6 s). That path skips the probe and the read_bda_span* functions, which points at the shared span read rather than the rest of the BDA path.

Not established

  • What in read_bda_span* the NVIDIA driver mishandles (the GPU appears to hang: the pin wait never ends, and pixel_interlock reports device lost).
  • Other NVIDIA GPUs or drivers, AMD/Intel, and Linux on this GPU.

#2259 (device-scope atomic loads for coherent BDA reads, same read sites) does not fix this: with 8d6f765b merged into 262c0316, all seven still fail with the same errors. Its new CrossWorkgroupFlag.cpp does not compile on 262c0316 (no matching function for call to 'GuestAllocations::Mutation::Add(uint8_t*&, const std::size_t&, bool, bool)'), so it was left out of that run.

Investigated with AI assistance (Claude).

Activity

  1. Silverash-i8 commented on Oct 10, 2026

    @Silverash-i8
    Contributor

    A data point that may narrow this down: I can't reproduce it on a newer NVIDIA driver.

    Windows 11 Home (26200), WinLibs GCC 15.2.0 r7, Release, main dc105f8a (which includes #1267). RTX 5060 Laptop GPU (Blackwell), driver 617.42 (32.0.16.1742), selected with ANYPS5_GPU=NVIDIA. All seven tests (agc_driver_flat_loads, _x2_x3, _x4, the three global_loads and pixel_interlock) pass:

    • alone with -j1: 0.34 to 0.44 s each
    • -j6 --repeat until-fail:5: 5 of 5 rounds pass
    • every cache cold (ANYPS5_NO_SHADER_CACHE=1 APS5_NO_PIPELINE_CACHE=1 __GL_SHADER_DISK_CACHE=0): pass
    • the same seven on the Intel iGPU in this laptop (Arrow Lake, 32.0.101.8991): pass

    So the shared read_bda_span* functions run fine on this driver, which makes a bug in the older driver's compiler (591.86) look likely, or something specific to Ada. If you can, it would be worth trying the current NVIDIA driver on the 4080 SUPER. If it passes there, the question becomes whether the project wants a workaround for older drivers (for example forcing the byte-read path, as APS5_BDA_BYTE_READS=1 does, below some driver version). If it still fails, it's Ada-specific, and someone with a 30- or 40-series card on a current driver would be the next data point.

    AI-assisted (Claude Code); I ran everything above on my machine.

  2. TheTerr4 commented on Oct 10, 2026

    @TheTerr4
    Author

    Updated the driver on the RTX 4080 SUPER from 591.86 to 610.62 (newest I can install on this machine) and reran the same binaries (main 262c0316, not rebuilt). All seven pass:

    • alone with -j1, every cache cold (ANYPS5_NO_SHADER_CACHE=1 APS5_NO_PIPELINE_CACHE=1 __GL_SHADER_DISK_CACHE=0): 0.4 to 1.1 s each
    • alone with -j1, default caches: pass
    • -j6 --repeat until-fail:5: 5 of 5 rounds pass

    So this is the 591.86 driver, not Ada in general. I have not narrowed down which driver between 591.86 and 610.62 fixes it.

    Whether to work around it for older drivers (e.g. force the byte-read path below some version) is up to the maintainers. If not, this can be closed.

    AI-assisted (Claude Code); I ran everything above on my machine.

  3. danzaio commented on Oct 11, 2026

    @danzaio
    Contributor

    Another data point from the Ada side: all seven pass here.

    Windows 11, MinGW-w64 GCC 15.2.0 (WinLibs r7), Release, main ecafb64 plus two sysmodule commits that do not touch AGC. RTX 4050 Laptop GPU, driver 546.18, ANYPS5_GPU=NVIDIA.

    First run: 7/7 pass in 21.04 s (flat_loads, flat_loads_x2_x3, flat_loads_x4, global_loads, global_loads_x2_x3, global_loads_x4, pixel_interlock). Repeat until-fail:3: all three rounds pass.

    It passes on 546.18 and on 617.42 but fails on 591.86, so the regression looks like the 59x driver series rather than anything Ada-specific. The 4050 is Ada too.

    AI-assisted: yes.

  4. oneandonlydean commented on Oct 11, 2026

    @oneandonlydean
    Collaborator

    Closing: only the 591.86 driver fails; 546.18, 610.62 and 617.42 pass. Updating the driver fixes it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions