Skip to content

AMD Windows: GPL-mode cache failures (alpha/wave32 pass after local driver update) #4768

Open

Description

@Amoenus

Updated-driver confirmation of the three outstanding fixtures — 26 October 2026

27 October independent cache-order evidence: LeandroLP23 reports 48 controlled executions on a Radeon 860M / AMD32.0.13058.8001: the mode run first with an empty AMD cache passes all three fixtures, while switching GPL mode against that populated cache fails; reversing the priming order reverses the winner. The original cache was restored. This is stronger evidence for cross-mode driver-cache reuse than our as-found-cache comparison below, which does not isolate a cause. It is a contributor report on a different GPU/driver, not a new local reproduction or proof that either mode is faulty alone. Keep open; our original source-pinned results remain below. AI-assisted maintenance: yes (Codex).

Keep open: the separate sampled-storage/direct-ordering/cube failures reproduce locally. Literal main d3b397b750bf55fed924036a344917c1e6fa920f, Windows11 Enterprise26200, WinLibs GCC15.2r7/UCRT Release. AMD Radeon Graphics 1002:13c0, Windows driver32.0.21045.16010 / Vulkan26.10.1; NVIDIA RTX5080 10de:2c02, driver621.01 /32.0.16.2101.

Each cell totals two repetitions in each of two rounds, using the same executable/native runtime throughout:

Fixture AMD default / forced GPL-off NVIDIA default / forced GPL-off
agc_sampled_storage_base_level_usage 4/4 pass / 0/4 pass 4/4 / 4/4 pass
agc_copied_direct_ordering 4/4 pass / 0/4 pass 4/4 / 4/4 pass
agc_recorder_cube 4/4 pass / 0/4 pass 4/4 / 4/4 pass

The AMD forced-off failures match CrimsonMac's report: sampled sRGB base level reads0 instead of0.215860; direct ordering reports vkQueueSubmit recorder: Vulkan result -4; cube sampling reads0 instead of0.062745. 48 processes: 36 pass /12 fail, no skips/timeouts or Vulkan validation warnings/errors/VUIDs; max0.610s. Required Vulkan, loaded Khronos1.4.363 and actual physical GPU identity verified per process; app shader cache/journal disabled. Full native libraries/relinker/real recorder fixture build; pre/post executable and runtime hashes match.

Sequence per GPU: default → forced-off → forced-off → default. Default means APS5_NO_GPL unset; forced-off means APS5_NO_GPL=1. This recorder does not print its final resolved GPL feature flag. Driver cache and implicit layers were retained; no full-suite cache priming or clean-cache controls were performed. This confirms the mode-dependent failures on this setup, not that switching modes caused them or that the driver/cache is proved to be their cause. Source, driver and cache identities differ from historical reports, so this is not a driver-only comparison.

The original alpha/wave32 cases separately passed36/36 on main 5b5d24cb223ede690fe5eab1fe2f7a1736b801a5 after the driver update, including original/copied alpha paths and both modes. Their retained logs and72 known alpha output warnings remain in the same evidence Gist. Those passes do not close these three failures.

Exact source/artifact pins, all48 outcomes and complete verbose logs. AI-assisted: yes (Codex).

Previous evidence and source-pinned history

Latest confirmation: main338f, 2026-10-21 UTC

Keep open. The residual original-path AMD GPL-on alpha failure still reproduces on unmodified main 338f22e493c113d71df6cd4b032fe3740283d0fd, including merged #6436. This matrix no longer shows the older full mode inversion: the copied location and GPL-off agree; original-path GPL-on remains the exception.

Physical GPU; alpha passes / fresh processes Original GPL on Original GPL off Copied GPL on Copied GPL off
AMD Radeon Graphics 1002:13c0 /32.0.21036.18 0/3 3/3 3/3 3/3
NVIDIA RTX5080 10de:2c02 /610.62 3/3 3/3 3/3 3/3

Other hardware (contributor result): @thuanquang reports 10/10 passes for original-path GPL-on alpha on main a07e985c8, RX 6700 XT/gfx1031, Windows driver 32.0.21045.5002, with the driver cache retained. This is a different GPU, driver and executable/cache identity; it narrows affected configurations but does not explain or close our gfx1036/32.0.21036.18 failure. It is not our own run.

All three failures retain the same assertion:

alpha 0x00000000 with alpha-to-coverage on: channel 0 of pixel (0, 0) inside the scissor holds half 0x0000, expected 0.5

24 processes: 21 passes /3 assertion failures, maximum1.142s. Alpha only; the earlier wave32 results remain historical. The real AlphaToCoverage.cpp and required target libraries build on literal main, with two GCC vector-comparison warnings retained. Source, executable and all360 runtime/sidecar files are unchanged through the matrix. Original and copied executables are byte-identical (be5f922151f39437894d00c8e2020408ec45c6a2b3a0546157d024db192e5962); same original output path, cwd and DLL search path, fresh external copy directory. Both GPL modes run three planned serial processes per location, on before off. No source workaround in this run.

Windows11 Enterprise26200, WinLibs GCC15.2.0r7/UCRT Release, SPIRV-Tools ON. Required Vulkan, application shader cache/journal disabled, verbose CTest with30s bounds; actual adapter and loaded Khronos1.4.363 confirmed per log. Zero VUIDs, validation errors, skips or timeouts. Each successful alpha process reports the same three unused-fragment-output warnings:27 Undefined-Value-ShaderOutputNotConsumed-DynamicRendering and36 Undefined-Value-ShaderOutputNotConsumed total. These are assertion passes with disclosed warnings.

Driver cache remains as found, apart from normal driver writes; no reset, rename, ACL or driver change. The previous one-line generator control f12fa1d972 remains pinned to main5b59: it made the same original-path failure pass3/3, and restoring the baseline library restored failure3/3. That establishes metadata-key/driver sensitivity, not whether stale cache reuse or generator-sensitive compilation causes it. The control is not repeated or promoted as a production fix here.

Supported-control capability check: both adapters advertise VK_KHR_pipeline_binary and pipelineBinaries=true. AMD reports pipelineBinaryInternalCache=true but pipelineBinaryInternalCacheControl=false (AMD proprietary25.10.36); NVIDIA reports the control true. Khronos requires that property to be true before setting disableInternalCache=true (VUID-...-09602). We did not attempt the unsupported AMD setting. NVIDIA's capability does not settle the AMD cause. The next distinguishing measurement still needs a supported cache-reset/disable control on AMD; no cold-cache result is claimed.

No full-default build, full suite, title, performance, Linux or console result. AlphaToCoverage.cpp, Context.hpp, Pipeline.cpp and the test device helper are unchanged from main5b59; device target settings evolved, so this is not an isolated source bisect. Newer checked main ec7eacc62d adds unrelated library exports/debt only and is not separately runtime-tested here. AI-assisted: yes (Codex); author responsible.

Historical observations and controls at their original source pins

Previous generator control: main5b59, 2026-10-21 UTC

Keep open. Unmodified main 5b59fbc553 (with #6436) still fails alpha at the original executable path on our AMD iGPU. A one-line change to shader generator metadata makes that path pass; restoring the byte-identical baseline library restores the failure.

AMD alpha; passes / fresh processes Original GPL on Original GPL off Copied GPL on Copied GPL off
Unmodified main 0/3 3/3 3/3 3/3
One-line generator control 3/3 3/3 1/1 1/1
Restored baseline library 0/3 1/1 1/1 Not run

NVIDIA RTX 5080 passes once per mode at both locations on baseline main, and once per mode at the original location for both the control and restoration. An additional AMD original/GPL-on confirmation fails 3/3 immediately before the unsuccessful cache-isolation attempt. 36 processes total: 27 passes and nine retained baseline assertion failures, maximum measured duration 1.149 s. This follow-up is alpha only; the earlier wave32 matrix remains historical below.

The diagnostic fork commit f12fa1d972 adds keyed[2] ^= 0x4000u to the common CreateShaderModule helper for both modes, retaining #6436's existing GPL-off 0x8000u marker. It builds on the original PYTHONRETARDE/LeandroLP23 work. SPIR-V section 2.3, word 2 gives generator metadata no module-semantic effect; the pinned tool registry leaves its low 16 bits for supplier use. This establishes metadata-key/driver sensitivity. It does not distinguish stale disk-cache reuse from generator-sensitive compilation or qualify a production fix.

Identity/setup: the same original/copied executable bytes and paths throughout, SHA-256 bfa144ba719561e6764711f726c11a760630213b2a7c40fa02e0218bcc0dc97b; same cwd and DLL search path. Only libSceAgcDriver.prx changes in the control; all 360 runtime files, executable hashes and main source are verified restored afterwards. WinLibs GCC15.2r7/UCRT Release, Windows11 Enterprise26200; physical Radeon Graphics 1002:13c0 /32.0.21036.18 and RTX5080 10de:2c02 /610.62 verified in logs. Real alpha fixture and required library builds pass; conventions pass. No full-suite, full-default-build, title or performance qualification.

Required Vulkan, disabled AnyPS5 shader cache/pipeline journal, verbose serial CTest and loaded Khronos1.4.363 throughout. Zero VUIDs/validation errors/skips/timeouts. Every successful alpha process logs the same three unused-fragment-output warnings as main (GPL-on Undefined-Value-ShaderOutputNotConsumed-DynamicRendering, GPL-off Undefined-Value-ShaderOutputNotConsumed): 81 warnings total, retained rather than hidden.

Driver cache: retained, apart from normal driver writes. Renaming %LOCALAPPDATA%\AMD\VkCache was denied before any move, so no empty-cache/restored-cache-file control completed. No ACL/driver change was made. Older untagged entries surviving #6436 are one possible explanation from its source, unconfirmed. The fork commit is a reproducible diagnostic, not a new PR or title unblock. Results retain their main5b59 pin; newer checked main e10b4d6190 was not runtime-tested here. AI-assisted: yes (Codex).

Current-main confirmation, 2026-10-20 UTC

A residual location-sensitive failure remains on our AMD device after #6436. In response to LeandroLP23's request, rebuilt the two genuine fixtures from unmodified main 73b6a4cc7144d80ba5c720306ec1516728dfb59b, including merged #6436 (2ea00aae4). Production, fixtures and registrations are unchanged. The earlier complete GPL inversion is not reproduced by this matrix: wave32 and GPL-off cells now agree, while original-location GPL-on alpha still fails.

Five fresh serial processes per fixture/mode/location on Windows 11 Enterprise 26200, WinLibs GCC 15.2.0 r7/UCRT Release, bundled dependencies/SPIRV-Tools ON:

Actual GPU Executable location GPL on: alpha / wave32 GPL off: alpha / wave32
AMD Radeon(TM) Graphics 1002:13c0, driver 32.0.21036.18 original gpl4152-main/tests 0/5 / 5/5 5/5 / 5/5
same AMD new empty folder, only byte-identical executables copied 5/5 / 5/5 5/5 / 5/5
NVIDIA GeForce RTX 5080 10de:2c02, driver 610.62/32.0.16.1062 original 5/5 / 5/5 5/5 / 5/5
same NVIDIA same copied executables 5/5 / 5/5 5/5 / 5/5

All five AMD failures stop at the original assertion:

alpha 0x00000000 with alpha-to-coverage on: channel 0 of pixel (0, 0) inside the scissor holds half 0x0000, expected 0.5

Controls and limits:

  • Required Vulkan; actual requested physical adapter confirmed in every log; loaded Khronos 1.4.363; application shader cache and pipeline journal disabled. GPL on leaves APS5_NO_GPL absent; off sets it to 1. The sequence was on then off, original/copy per fixture; this is not an off-first or cache-cold campaign.
  • Same current directory, PATH and original runtime libraries for both locations. Original test directory is first on the common PATH so copied programs also use its standard-runtime DLLs. Executable and all 358 original runtime/sidecar files hash-identical before/after; copied folder holds only the two executables. Alpha SHA-256 68618c3e3d81e92f66814e9dc7b84e647d4b27084e67d816c22d22a85d4ba32f; wave32 946003ffa1a74f0d7c3613769123b815f9c7b4a07ecab546d405e9450a945dfe.
  • AMD's driver cache was left intact: no clearing, moving, renaming or isolation. Existing cache content versus a new executable identity remains a confounder. This result does not establish the failure's cause or causally disprove the new mode separation. The current helper marks GPL-off modules; whether an older GPL-on cache entry remains involved needs a separate distinguishing control.
  • 75 passes / 5 assertion failures, zero skips/timeouts or VUID/validation errors. Each of the 35 successful alpha runs logs three shader-output-not-consumed warnings during its later depth-only coverage checks: 45 Undefined-Value-ShaderOutputNotConsumed-DynamicRendering warnings with GPL on and 60 Undefined-Value-ShaderOutputNotConsumed warnings with GPL off (105 total). Wave32 runs have zero warnings. Failing alpha runs stop before those later checks. These are functional passes with disclosed warnings, not validation-clean alpha results.

Logs, build receipt, exact environment and SHA-256 manifests retained locally. No source workaround, title/FPS, Linux, driver-cache-cold or whole-suite claim. This issue stays open because the requested original/copied cells still disagree. AI-assisted: yes (Codex); author responsible.

Latest main4f-based candidate (2026-10-14 UTC)

#4451 head246d16a03, base main4f618, is fully rebuilt with SPIRV-Tools ON. Full build/libs/checkers and three compatibility/state controls ×20 pass. All13 NVIDIA groups ×5 in both GPL modes pass without skips (maximum5.44858s). AMD-selected groups retain the pattern below: standard/dithered coverage fail GPL-on; BDA span, wave32 exec-lane and subgroup fail GPL-off; the other groups pass ×5. No selected skips. Targetless32_AR behavior from merged #5521 is retained.

This is a fresh candidate run; the matched unchanged-main controls below remain pinned to main872. Their agreement does not establish exclusion against unchanged main4f. No new cause, workaround, title or full-suite claim. Hardware/OS and mode definitions remain the same as below.

Earlier same-build main872 comparison (2026-10-14 UTC)

Unmodified main 872f52320382aff45faa4b70f9c03d28228b6991 and restored #4451 head365850f33 run in the same S checkout/build directory, Windows11 Enterprise26200, AMD1002:13c0/32.0.21036.18, WinLibs15.2.0r7 Release/SPIRV-Tools ON. Stock builds full runtime libraries and five existing fixtures; the candidate is then restored and fully rebuilt. Vulkan required, AnyPS5 cache disabled, serial30s limits, five repetitions for passes; failures stop on the first run.

Existing control, both main and restored candidate GPL on GPL off
Standard alpha-to-coverage Fail first Pass ×5
BDA span reads Pass ×5 Fail first
Wave32 exec-lane bits Pass ×5 Fail first
Wave32 subgroup Pass ×5 Fail first
BDA device helper Pass ×5 Pass ×5

GPU-selection logs confirm AMD for the native failures. Diagnostics match on both:

  • alpha zero: pixel(0,0) holds half0x0000, expected0.5;
  • span: wave32 byte32768 stays0xcdcdcdcd, expected0x523f7ebd;
  • exec-lane: lane0 stays0xdeadbeef, expected64;
  • subgroup: thread0 stays0xdeadbeef, expected0.

NVIDIA RTX5080/610.62 passes all five existing controls ×5 in both modes on stock main and restored candidate. Candidate three compatibility/state controls pass20 times; all13 selected controls pass ×5 in both NVIDIA modes (maximum5.42903s). In the AMD-selected candidate runs, other controls pass ×5; CPU/helper controls are not separate AMD hardware coverage. No selected skips.

The new dithered fixture fails GPL-on at alpha zero (resolved0, expected0.249023438 for mask00) and passes GPL-off ×5. Main has no such fixture, so the existing-control comparison does not exclude a dither-specific regression. Layered-volume, byte-identical placement, LTO, cause-bisect and driver-cache-coldness campaigns are not repeated here. The earlier source/location evidence keeps its own pins.

Source fact: VulkanDevice::Target at this main derives both fixedPushSlots and registrationModules from graphicsPipelineLibrary. Thus the GPL switch also changes compiler-target settings consumed by compute; this does not prove either setting causes these failures.

#4451 is updated to the tested head; no production workaround added. AI-assisted: Codex.

Earlier original-location retest (2026-10-13)

Staged alpha heada5a282 on pinned main b0d, reconstructed from actual updated #5097/#5137 commits: the original-location AMD standard/dithered-on and wave32/layered-off failures persist; other selected cases pass5. Exact affected groups, forced-off/helper device scope and the passing NVIDIA suite are in the maintained #4451 report. This retest does not repeat the placement or unmodified-main controls and establishes no root cause or absence of a regression. The earlier exact e152 placement evidence below retains its own head/base and one-run counts.

Compute follow-up: On the same staged a5/mainb0d stack, existing buffer-load/store passes GPL-on and fails GPL-off at both original and copied executable locations, once per cell, with unchanged executable/runtime hashes. The exact 0xdeadbeef diagnostic and device-setup source observation are in the distinct validation reply. Alpha retains its different mode/location pattern; no uniform all-stage failure or root cause is established.

Earlier e152 alpha placement comparison (2026-10-13)

Staged #4451 head46dea, pinned main e152ba8; same Windows/AMD1002:13c0 setup below. The PR's published head remains unchanged pending dependency merges. Fresh original-location standard and dithered tests each fail their first GPL-on run and pass GPL-off five times; wave32 passes on/fails off. Layered failures and full validation scope are in the updated PR report.

Copy this exact registered alpha executable into an otherwise empty external directory; retain cwd and PATH to the original runtime libraries. SHA-256 of both executables and every unpatched runtime .prx remains identical before/after. Each copied mode runs once:

Copied executable AMD GPL on AMD GPL off
Standard alpha Pass Alpha-zero mismatch
--dithered8 Pass Resolved-color mismatch

This reproduces the original/copy mode inversion on this exact head. The initial harness expected the wrong dither success marker and aborted after its third actual execution; its record is preserved, the real success marker verified, and only the fourth case run separately. GPU/mode identities are verified; no skips. No driver cache was cleared, and root cause remains unknown. This is not an unchanged-e152 main control or proof of no production regression.

Earlier scoped main5aaa evidence: untouched main GPL-off standard-alpha and original layered white-band vertex each fail5/5; restoration fails each once. Its optional GPL-on alpha passes once before a truncated-JUnit harness assertion. Separately compiled original/extended fixtures against the same alpha libraries at one external path each pass on/fail off once; those images are not byte-identical and do not isolate a cause. No new title result. AI-assisted: Codex.

What

On Windows AMD RDNA2, native AGC tests change their GPL-on/off pass/fail pattern after copying byte-identical executables to another directory. The same runtime libraries are used. This is not isolated to the alpha change in #4451: a stock production-source/fixture control of main 2f4cc8983be9b9eacb878a4c705bdf5fcdc2d84f, built in the same directory, reproduces it.

Device/setup: Windows 11 Enterprise 26200, Ryzen 9950X3D iGPU, AMD Radeon(TM) Graphics 1002:13c0, driver 32.0.21036.18; WinLibs GCC 15.2.0 r7 / Release, testing ON, bundled dependencies, SPIRV-Tools OFF, ASAN OFF. RTX 5080 10de:2c02 is the passing control.

Results

Each cell below covers five fresh process executions of each existing fixture: agc_driver_alpha_to_coverage_tests.exe and agc_driver_wave32_subgroup_tests.exe.

Stock main production/fixtures AMD GPL on AMD GPL off AMD GPL on, pipeline LTO off
Original build executable location 0/5 pass each 5/5 pass each 0/5 pass each
NVIDIA, original location 5/5 pass each 5/5 pass each 5/5 pass each

Both stock main and restored #4451 give the same pattern in the original build location. The main control temporarily replaced all changed core files except CMakeLists with exact base sources; git diff <base> --name-only -- core then listed only the CMake test additions. Production, headers and the two fixtures therefore match the stated main commit. Candidate sources were restored byte-for-byte and rebuilt afterwards. This is a matched production/fixture control, not a claim of an untouched whole-checkout build.

A further #4451 placement control checks SHA-256 equality of the original and two copied executables, and equality of every copied runtime .prx. For all three groups (the two above plus dithered alpha coverage):

Executable location; same current directory AMD GPL on AMD GPL off
Original <build>/tests 0/5 pass each 5/5 pass each
Empty temporary directory containing only copied executables; original build libraries via PATH 5/5 pass each 0/5 pass each
Copied executables and copied libraries together 5/5 pass each 0/5 pass each

The copied stock-main executables also show the inverse pattern in single-execution controls, whether the current directory is the repo or their temporary folder. The five-run placement matrix is on #4451 3040cd741.

Failure signatures

alpha 0x00000000 with alpha-to-coverage on: channel 0 of pixel (0, 0) inside the scissor holds half 0x0000, expected 0.5
AGC graphics: wave32 subgroup: thread 0 v_mbcnt_lo_u32_b32 is 3735928559, expected 0

The new dithered group similarly loses its preserved background at alpha zero (resolved 0, expected 0.249023438). These are mismatches, not a crash in amdvlk64.dll. The same fixture groups on the candidate's NVIDIA build pass in both GPL modes; its full suite passes 990/0/7 of 997.

Reproduction

Build the stated main commit and the two named native targets in Release. Set ANYPS5_GPU=AMD Radeon, ANYPS5_REQUIRE_VULKAN=1, ANYPS5_NO_SHADER_CACHE=1, and prepend <build>/core/libs/libs/unpatched and the toolchain bin to PATH. Leave APS5_NO_GPL absent for on; set it to 1 for off. Setting 0 also disables GPL, because the code checks presence.

  1. Run each executable from <build>/tests five times, serially (30-second bound per process).
  2. Copy only the two executables to a new empty temporary directory. Verify their SHA-256 hashes match. Use the same PATH and current directory, then run each copy five times in both modes.
  3. For the existing LTO control, leave GPL on and set APS5_NO_PIPELINE_LTO=1.

GDB module probes confirm the intended runtime locations. They also show different ASLR addresses for the executable's Output array after relocation; this does not prove ASLR is the cause. Driver shader caches were not cleared. The relocation control changes executable identity/path as seen by the OS/driver. No production workaround, environment switch or tolerance was added.

Scope and related reports

Root cause is unknown. This does not establish an alpha regression, request-serialization defect, or recurrence of #4435's resolved shader-module-lifetime crash. #3882 reports another AMD device with unwritten draws, but not this RDNA2 executable-location/GPL inversion; #2009 concerns faulted pixel-interlock stores. Searches for AMD/GPL, AMD/unwritten and executable/relocation found no existing report of this control pattern.

The earlier different-runtime observations and corrections remain in #4435 and #4451. A fresh later-main control is recorded below; it does not reproduce the relocation inversion in that build. No new title launch or PS5 hardware measurement. Private game assets are not attached.

AI-assisted: yes (Codex); author responsible.

Later-main control (2026-10-13)

A newly configured native build of unchanged main 5f01c808219237ba9bdcbf02f6e1db5075fd61a9 uses the same WinLibs release/Release/testing/bundled-dependency options (its C++ compiler command is c++.exe). The two existing groups above and agc_driver_packed_mip_tail_target each pass 5/5 with AMD GPL on and fail 5/5 with GPL off, both at the original location and after copying only the executables. All three groups pass 5/5 on NVIDIA in both modes and both locations. This later build retains an AMD mode-sensitive mismatch but does not reproduce the relocation inversion. It is not an isolated cause bisect: source revision, build directory and executable images changed. The older byte-identical relocation controls above remain scoped to their own artifacts. No driver cache was cleared and no all-main-suite pass is claimed from this selected native run.

Current alpha main075 comparison (2026-10-13)

#4451 head 0bcf45842, pinned main 075169f7b3faeae1216efc35df41c44fac9f3190, same gpl4152-main location/toolchain/driver/cache conventions as above. Fifteen groups x5 are attempted in each mode:

Group AMD GPL on AMD GPL off
Existing undithered coverage Fails first run Passes x5
New dithered coverage Fails first run Passes x5
Wave32 Passes x5 Fails first run
Other twelve groups Pass x5 Pass x5

NVIDIA passes all 15 groups x5 in both modes. Replacing all 15 changed core production/header/fixture files with exact main 075 (CMake registrations retained), then byte-exact restoration/full rebuild, gives the same original-fixture undithered-on/wave32-off failures in both controls. Main lacks the new dithered fixture; no baseline dithered result is claimed. No placement inversion, LTO or driver-cache-clearing campaign was repeated here. Older placement observations remain scoped to their own artifacts; no root cause or alpha-specific regression is established.

Full NVIDIA: 1054 passed / 0 failed / 8 skipped of 1062, maximum 24.0818 s; BDA device/span/interlock each pass five serial repetitions with matched main and restored candidate, and restored sparse CPU/native controls pass x5. Historical main-77 at head9ea was 1046/0/8 of 1054, max23.0308 s, before the canonical-21 collision; that is not current compatibility proof. Historical main-4bb loader error 127 is covered by merged #5025. No new title/Linux/console claim or production workaround. AI-assisted: Codex.

Previous alpha main2cc comparison (2026-10-13)

Exact #4451 head3d3ad6a92, base main 2cc97e1057aaffd5b37b38af5def142899375ea5, original build location gpl4152-main, g++.exe/empty launcher. Full build/libraries pass. The eleven-group campaign changes the earlier head4a pattern:

Group, current head AMD GPL on AMD GPL off
Existing undithered coverage Fails first run Passes five repeats
New dithered coverage Fails first run Passes five repeats
Wave32 Passes five repeats Fails first run
Other eight selected groups Pass five repeats Pass five repeats

NVIDIA passes all11 groups five times in both modes. The first AMD alpha failure still loses the preserved background at alpha0; wave32 leaves0xdeadbeef. Stronger current comparison: replace all15 changed core production/header/fixture files with exact2cc main (retaining CMake test registrations), rebuild the selected native targets and libraries, and run the original undithered/wave32 fixtures:

Production and original fixtures Undithered on/off Wave32 on/off
Exact2cc main Fail / pass x5 Pass x5 / fail
Byte-exact source restoration and full rebuild Fail / pass x5 Pass x5 / fail

Failing fixtures stop on their first execution. Main lacks the new dithered fixture, so it is not part of that main control. This is a matched production/fixture comparison, not a whole untouched checkout. No location/LTO/driver-cache-clearing control was repeated here. The older inversion observations above retain their own artifact scope; no root cause or alpha-specific regression is established.

Full NVIDIA 1029/2/8 of1039, max24.406s. BDA span/interlock failures also reproduce with matched2cc main and restored head; #3291 records them. Decoder compatibility controls and conflict-adjacent sparse CPU/native groups pass. Environment/GPU/cache conventions remain as above. Previous review head4a on510a had three GPL-on failures and passed GPL-off; it was a different revision/build, not a cause bisect. No production workaround or new title/Linux/console claim. AI-assisted: Codex.

Activity

  1. simonbbby commented on Oct 13, 2026

    @simonbbby
    Contributor

    Linux/RADV control on the same PCI device (1002:13c0): both existing fixtures pass 5/5 with GPL on and 5/5 with GPL off, at both the original build location and after copying only the executables to an empty directory. That is 40/40 passing processes; no location inversion or GPL-mode mismatch in this control.

    Tested agc_driver_alpha_to_coverage_tests and agc_driver_wave32_subgroup_tests from the existing clean regression build at main 2a5eca11cd1bf583db39ce67034e8453842ac244. Copies have identical SHA-256 digests. Every run uses the same current directory (build) and the original .prx files via LD_LIBRARY_PATH; ldd confirms the same library paths. All 40 logs select RADV RAPHAEL_MENDOCINO, vendor 0x1002, device 0x13c0, subgroup 64.

    Ubuntu 24.04 / Linux 7.0, Ryzen 9 9950X iGPU (gfx1036), Mesa 25.2.8, GCC 13.3, Release, SPIRV-Tools ON. VK_DRIVER_FILES=radeon_icd.json, ANYPS5_GPU=RADV, ANYPS5_REQUIRE_VULKAN=1, ANYPS5_NO_SHADER_CACHE=1, MESA_SHADER_CACHE_DISABLE=true; GPL on leaves APS5_NO_GPL absent, off sets it to 1. Five serial runs per cell, 30 s bound, no skips.

    This uses an older main than the Windows controls in the issue, a different OS/driver, and SPIRV-Tools ON. It is a scoped Linux datapoint, not a matched-current-main comparison or proof that the Windows driver alone causes the failure. The dithered fixture and #4451 head were not tested in this run.

  2. LeandroLP23 commented on Oct 13, 2026

    @LeandroLP23
    Contributor

    A second AMD Windows data point, on a different RDNA generation and driver: Windows 11 (26300), Radeon 860M (RDNA 3.5, 1002:1114), driver 32.0.13058.8001, WinLibs GCC 15.2.0, Release, testing ON, SPIRV-Tools OFF, main 8bcd97cd5. Each cell is five fresh processes, run from the same current directory (the checkout root) with ANYPS5_NO_SHADER_CACHE=1. The copies are SHA-256 identical to the build outputs.

    Fixture Location GPL on APS5_NO_GPL=1
    agc_driver_alpha_to_coverage_tests build dir 5/5 0/5
    agc_driver_alpha_to_coverage_tests copied to an empty dir 5/5 0/5
    agc_driver_wave32_subgroup_tests build dir 5/5 0/5
    agc_driver_wave32_subgroup_tests copied to an empty dir 5/5 0/5

    So on this machine, where the executable sits makes no difference. The GPL mode does, and it fails the other way round from your RDNA2 result. With GPL off, both fixtures fail on every run:

    • alpha 0x00000000 with alpha-to-coverage on: channel 0 of pixel (0, 0) inside the scissor holds half 0x0000, expected 0.5
    • wave32 subgroup: thread 0 v_mbcnt_lo_u32_b32 is 3735928559, expected 0. The 0xdeadbeef fill was never overwritten.

    With GPL on, the full ctest -R '^agc_' -j 1 passes on this machine (464/464). This suggests that, on AMD's Windows driver, the result depends on which pipeline compile path is used (library vs monolithic), and which path breaks depends on the driver version. The path to the executable shouldn't matter by itself.

  3. LeandroLP23 commented on Oct 13, 2026

    @LeandroLP23
    Contributor

    On this machine (Radeon 860M, driver 32.0.13058.8001, main 5d50886ee), GPL-off is broken for more than those two fixtures: with APS5_NO_GPL=1, ctest -R '^agc_' -j 1 passes 196/470. Compute-only fixtures fail too, for example agc_driver_buffer_load_store: lane 0 load_ubyte is 0xdeadbeef, expected 0x00000000. So nothing a pipeline writes lands, whatever the stage. Without the variable the suite passes except for one test:

    Your RDNA2 (driver 32.0.21036), NVIDIA and RADV runs pass GPL-off. That points at the older AMD Windows driver's non-library device configuration, and not at the relocation.

  4. Amoenus commented on Oct 13, 2026

    @Amoenus
    ContributorAuthor

    @LeandroLP23 Confirmed a compute-only failure on our RDNA2 Windows device as well: AMD Radeon(TM) Graphics 1002:13c0 / gfx1036, driver32.0.21036.18, Windows11 Enterprise26200.

    a5a282cd on pinned main b0d, adapted #5097/#5137 + #4451 stack. Existing agc_driver_buffer_load_store runs once per cell:

    Location GPL on GPL off
    Original build directory Pass Fail
    Copied executable in an empty directory Pass Fail

    Both failures report:

    AGC graphics: buffer load store wave32: lane 0 load_ubyte is 0xdeadbeef, expected 0x00000000
    

    Executable SHA-256 matches between locations; every original unpatched runtime .prx hash stays unchanged before/after. Same cwd/PATH, verified device and mode, no skips, all processes under0.72s, AnyPS5 shader cache disabled; driver cache untouched. This is one execution per cell, not five or an all-compute-suite result.

    Our original-location alpha still has the opposite mode pattern (on fails/off passes), while the earlier e152 alpha copy control in the body reverses it. These observations do not establish uniform failure across all stages or one shared cause.

    Source observation: VulkanDevice.cpp enables six extensions and the GPL/extended-dynamic-state/dynamic-rendering feature chain when GPL is available and enabled. The switch therefore changes logical-device setup too. That file is byte-identical to pinned main b0d in this stack; the run remains an adapted-stack test, with no unchanged-main or root-cause claim. No production workaround added. AI-assisted: Codex.

  5. simonbronk commented on Oct 14, 2026

    @simonbronk
    Contributor

    The mode inversions here come from the AMD Windows driver's own on-disk pipeline cache (%LOCALAPPDATA%\AMD\VkCache). Whichever GPL mode compiles a pipeline first stores it there. A process in the other mode then gets that cached binary, and its writes never land. With the cache emptied before each run, both modes pass every time.

    Same device as @Amoenus: AMD Radeon(TM) Graphics 1002:13c0 / gfx1036, driver 32.0.21036.18, Windows 11 Pro 26200, WinLibs GCC 15.2.0 r7, Release, main 5a6ad0e, ANYPS5_NO_SHADER_CACHE=1 (so AnyPS5's own vk-pipelines-*.bin is not used). Fixtures: agc_driver_alpha_to_coverage, agc_driver_buffer_load_store, agc_driver_wave32_exec_lane_bits, agc_driver_layered_volume_vertex. To empty the cache I renamed VkCache away between runs.

    Driver cache before the run Mode All four fixtures
    as found (filled by earlier GPL-on suite runs) GPL on pass
    as found GPL off fail (0xdeadbeef / 0x40 untouched)
    empty GPL off pass
    then, cache now filled by that GPL-off run GPL on fail
    then GPL off pass
    empty before each run, 4 runs alternating on/off either pass every time

    Fresh-cache runs take about 0.7 s and cached ones about 0.3 s, so the second process really is served from the cache. Changing VkApplicationInfo::pApplicationName per mode doesn't separate the entries: the same four .parc files are written and the inversion stays.

    Before I found the cache, I bisected the GPL switch with temporary overrides. fixedPushSlots and registrationModules forced to the GPL-on values don't fix GPL-off. With GPL off, enabling only VK_KHR_pipeline_library + VK_EXT_graphics_pipeline_library (with the feature) on the device makes compute writes land. That run used the GPL-filled cache, so it fits the picture above: the driver compiles differently when that feature is enabled on the device, and its cache key doesn't include it.

    This explains:

    agc_driver_lds_mixed_width_atomics is not this; it fails on this device with an empty cache too.

    A user who never switches mode shouldn't hit it. Still, anything that changes enabled device features between AnyPS5 builds could hit the same reuse, if it changes how this driver compiles. I haven't tested that.

    AI-assisted (Claude Code).

  6. PYTHONRETARDE commented on Oct 15, 2026

    @PYTHONRETARDE
    Contributor

    A workaround on the AnyPS5 side, following @simonbronk's finding that the driver cache doesn't key on the enabled GPL feature: with the library feature off, flip bit 15 of the SPIR-V generator word (header word 2) of every module before vkCreateShaderModule. No driver interprets that word, but it changes the module bytes, so the two modes get separate cache entries.

    Commit on my fork, on main 839d2424: bf140983. It covers all 11 module sites: the recompiled compute (VulkanDevice.cpp) and graphics (Pipeline.cpp) programs, and the embedded colour transfer, detile, CMASK clear, sample counter/dumps, mesh arguments and presentation shaders, through one CacheKeyedSpirv helper in Context.hpp. Tagging only the two recompiled paths fixed the compute fixtures but not alpha_to_coverage and layered_volume_vertex; the embedded shaders have to be keyed too.

    RX 7800 XT (RDNA 3, 1002:747e), driver 32.0.31041.1004, Windows 11 Pro 26200, WinLibs GCC 15.2.0 r7, Release, ANYPS5_NO_SHADER_CACHE=1. VkCache emptied, then the four fixtures from the table above (alpha_to_coverage, buffer_load_store, wave32_exec_lane_bits, layered_volume_vertex) run per mode in sequence:

    Sequence from an empty cache main 839d2424 with bf140983
    GPL off → on → off on: 4/4 fail 4/4 pass in every step
    GPL on → off → on off and the second on: 4/4 fail 4/4 pass in every step

    Full CTest with bf140983 from an empty VkCache: 1245 of 1247 pass, including agc_driver_layered_volume_vertex_no_gpl (fails in every full run on main here, as in #5271). The two failures are unrelated: guest_kqueue (user name equals computer name, fix in #6173) and guest_memory (passes 5/5 alone).

    Not tested: other AMD GPUs or drivers, NVIDIA, Intel, Linux, any title. The cost is one copy of the SPIR-V per module creation. I can't open it as a PR until #6173 is merged or closed (one open PR at a time); if someone wants to take it sooner, it's yours.

    AI-assisted: yes (Claude Code).

  7. LeandroLP23 commented on Oct 15, 2026

    @LeandroLP23
    Contributor

    @PYTHONRETARDE your bf140983 also fixes the inversion on a second AMD generation and driver.

    Windows 11 (26300), Radeon 860M (RDNA 3.5, 1002:1114), driver 32.0.13058.8001, WinLibs GCC 15.2.0, Release. The commit was cherry-picked cleanly onto main d92a8dad3. ANYPS5_NO_SHADER_CACHE=1, the libraries from build/core/libs/libs/unpatched first on PATH, and %LOCALAPPDATA%\AMD\VkCache emptied before each sequence. Each step runs the same four fixtures: alpha_to_coverage, buffer_load_store, wave32_exec_lane_bits and layered_volume_draw --vertex-only.

    Sequence from an empty cache main d92a8dad3 with bf140983
    GPL off → on → off on: 4/4 fail; both off steps pass 4/4 pass in every step
    GPL on → off → on off: 4/4 fail; both on steps pass 4/4 pass in every step
    • Difference from your RX 7800 XT: here the second on step of the second sequence passes on main. Only the mode that differs from the one that filled the cache fails.
    • Full suite: ctest -R '^agc_' -j 1 with the commit, from an empty VkCache and tests/shader_cache: 569 of 570 pass, including agc_driver_layered_volume_vertex_no_gpl, which fails in every full run on main on this machine.
    • The one failure is unrelated: agc_driver_quad_pixel_mask (implicit-LOD sample with quad pixel mask 2: pixel (0, 0) channel 2 is 2, expected 0). It fails 3 of 3 on main d92a8dad3 without the commit as well, with GPL on and off.

    Not tested: titles, NVIDIA, Intel, Linux.

    AI-assisted: yes (Claude Code).

  8. LeandroLP23 commented on Oct 15, 2026

    @LeandroLP23
    Contributor

    @PYTHONRETARDE I took you up on the offer: #6436 carries bf140983 with your authorship, rebased onto current main. It adds one commit of mine for a module site that landed after your base (the compute pipeline replay). Your RX 7800 XT results are credited there next to the 860M runs. If you'd rather open it yourself once #6173 is through, say so and I'll close mine.

  9. LeandroLP23 commented on Oct 20, 2026

    @LeandroLP23
    Contributor

    #6436 is now on main (2ea00aa). It routes every vkCreateShaderModule through one helper, which marks the module's SPIR-V generator word when GPL is off. So AMD's per-executable driver cache can no longer serve a module built in one GPL mode to the other. That is the cross-mode cache sharing this issue's location-dependent pattern points at. I can't confirm the fix from my hardware, though, because the pattern doesn't reproduce here even without #6436:

    Radeon 860M (RDNA 3.5, 1002:1114, driver 32.0.13058.8001), Windows 11 26300, WinLibs GCC 15.2.0, Release. The recipe above was followed: ANYPS5_GPU=AMD Radeon, ANYPS5_REQUIRE_VULKAN=1, ANYPS5_NO_SHADER_CACHE=1, APS5_NO_GPL=1 for off, and the driver cache not cleared.

    Build Location GPL on GPL off
    main aa1b1bf (with #6436) build/tests 5/5 and 5/5 5/5 and 5/5
    same copied, byte-identical 5/5 and 5/5 5/5 and 5/5
    2cdb062 (the parent of #6436's merge) build/tests 5/5 and 5/5 5/5 and 5/5
    same copied, byte-identical 5/5 and 5/5 5/5 and 5/5

    Each cell is agc_driver_alpha_to_coverage_tests then agc_driver_wave32_subgroup_tests. On the parent build I also tried first-use order: a fresh copy under a new name (so a new driver cache identity), run once in one mode and then five times in the other, both ways round. Every run passed. The same held three times for agc_driver_layered_volume_draw_tests --vertex-only, the case that failed here on #6436's branch with an old, populated driver cache.

    So on this device it stays clean either way. @Amoenus, could you rerun the two fixtures on current main with your 1002:13c0 setup? Can @PYTHONRETARDE do the same on the RX 7800 XT? If the original-location and copied-location cells now agree, this can be closed.

    AI-assisted: yes (Claude Code)

  10. Amoenus commented on Oct 20, 2026

    @Amoenus
    ContributorAuthor

    @LeandroLP23 retested the real alpha fixture on unmodified main 338f22e493, including #6436. Original-path AMD GPL-on still fails 3/3 with the same alpha-zero mismatch; copied GPL-on and both GPL-off locations pass3/3. RTX5080 passes all four mode/location cells3/3.

    24 processes:21 passes /3 retained assertion failures. Required Vulkan and loaded Khronos1.4.363, no skips/timeouts/VUIDs/validation errors. The63 existing unused-output warnings are disclosed in the updated issue summary, alongside exact artifact identities and scope. All360 runtime files and both executable hashes remain unchanged during the matrix; driver cache remains as found.

    A supported-control probe adds one limit: this AMD driver advertises VK_KHR_pipeline_binary but reports pipelineBinaryInternalCacheControl=false, so Vulkan does not permit disabling its internal cache through that API. NVIDIA reports true; we did not apply the unsupported setting on AMD. Stale-cache reuse versus generator-sensitive compilation remains unresolved. The earlier generator marker remains a diagnostic at its original main5b59 pin, not a qualified production fix.

    AI-assisted: yes (Codex); author responsible.

  11. changed the title [-]AMD Windows: identical AGC executables invert GPL pass/fail results after relocation[/-] [+]AMD Windows: alpha-to-coverage still fails at the original executable path after #6436[/+] on Oct 21, 2026
  12. thuanquang commented on Oct 21, 2026

    @thuanquang
    Contributor

    One more AMD data point for the matrix: a discrete RDNA 2 card, RX 6700 XT (gfx1031), AMD Windows driver 32.0.21045.5002, Windows 11 26200, MinGW GCC 15.2.0, Release.

    On main a07e985c8, which includes #6436, agc_driver_alpha_to_coverage passes 10 of 10. It ran from its original build path through CTest (--repeat until-fail:10), with GPL on and ANYPS5_REQUIRE_VULKAN=1, and the driver's cache for that executable left as it was. That is the cell your iGPU fails.

    So this original-path failure doesn't reproduce on this GPU and driver. That fits a cause tied to what your 32.0.21036.18 cache holds for that path, but it can't rule it out, since this cache was filled by recent builds only.

  13. CrimsonMac commented on Oct 23, 2026

    @CrimsonMac
    Contributor

    After #6436, AMD's driver cache still crosses GPL modes for three tests here. In each of them, every SPIR-V module already differs between the two modes.

    Ryzen 5 7600 iGPU (1002:164e, gfx1036), AMD Windows driver 32.0.21042.62, Windows 11 26100, WinLibs GCC 15.2.0 r7, Release, main 11e8ad293. In each sequence, %LOCALAPPDATA%\AMD\VkCache was emptied, then the whole ^agc_ group ran with -j8:

    Sequence 1st run 2nd run
    GPL on → APS5_NO_GPL=1 3 failures (agc_driver_sample_order*, #9313) the same 3 + the 3 below
    APS5_NO_GPL=1 → GPL on 3 failures (agc_driver_sample_order*) the same 3 + the 3 below
    • agc_sampled_storage_base_level_usage: sampled sRGB base level: read 0.000000, expected 0.215860
    • agc_copied_direct_ordering: vkQueueSubmit recorder: Vulkan result -4 (device lost)
    • agc_recorder_cube: single cube snapshot sampled the wrong face: read 0.000000, expected 0.062745

    Whichever mode fills the cache first passes. The other mode then fails all three, every time, until VkCache is emptied. That also holds with ANYPS5_NO_SHADER_CACHE=1 APS5_NO_PIPELINE_JOURNAL=1, so AnyPS5's own caches aren't involved.

    What I ruled out, with temporary local changes (none of them proposed):

    • The module keying itself. I dumped every module Graphics::CreateShaderModule creates in agc_driver_recorder_tests --cube-only, from an empty cache in each mode. It creates three modules in each mode, and none of the six is byte-identical across modes.
    • The three module sites that still bypass the helper. MultisampleUpload.cpp, SampleOrder.cpp and TextureDetiler.cpp (the depth sample copy) landed around the same time as fix(agc): key shader modules by the pipeline library mode #6436, so their modules aren't keyed yet. Routing them through CreateShaderModule changes nothing. The whole-suite matrix above is identical with and without that change.
    • Keying on a different header word. Also bumping the SPIR-V ID bound (header word 3) when GPL is off changes nothing.
    • The application identity. Changing VkApplicationInfo::applicationVersion or pApplicationName per mode changes nothing either. The driver keeps writing one .parc file under the same name.

    All three tests copy or sample textures through the recorder (an sRGB base level, a cube face, copied direct writes). So my guess is that the stale entries are pipelines the driver builds itself for copies, blits or clears, which no change to our SPIR-V can key. I haven't confirmed that. If anyone knows a way to give those internal pipelines separate cache entries per device configuration, this would be the place to try it. Otherwise, clearing VkCache between GPL modes stays the workaround for AMD Windows test runs.

    AI-assisted: yes (Claude Code).

  14. PYTHONRETARDE commented on Oct 24, 2026

    @PYTHONRETARDE
    Contributor

    @LeandroLP23 sorry for the delay, here is the RX 7800 XT rerun. RDNA 3 (1002:747e), driver 32.0.31041.1004, Windows 11 Pro 26200, WinLibs GCC 15.2.0 r7, Release, main 6cd36e6 (with #6436). Same setup as CTest: the repo root as the current directory, build/core/libs/libs/unpatched first on PATH, ANYPS5_REQUIRE_VULKAN=1, ANYPS5_NO_SHADER_CACHE=1, APS5_NO_PIPELINE_JOURNAL=1, APS5_NO_GPL=1 for off. VkCache was left as found (32 files from earlier runs). Both copies are SHA-256 identical to the build outputs.

    Location GPL on GPL off
    build/tests 5/5 and 5/5 5/5 and 5/5
    copied to an empty directory 5/5 and 5/5 5/5 and 5/5

    Each cell is agc_driver_alpha_to_coverage_tests then agc_driver_wave32_subgroup_tests. The first run of each cell took 1.0–1.4 s and the other four about 0.25 s, so each mode built its own pipelines instead of reusing the other mode's. On main 839d242 (before #6436) these fixtures failed in whichever mode didn't fill the cache, so the location and mode cells now agree here.

    @CrimsonMac your three tests also cross modes on this card and driver, on the same main. VkCache was emptied before each sequence, and each step ran the three tests through CTest:

    Sequence 1st 2nd 3rd
    on → off → on 3/3 pass 3/3 fail 3/3 pass
    off → on → off 3/3 pass 3/3 fail 3/3 pass

    The failures are the same as yours:

    • sampled sRGB base level: read 0.000000, expected 0.215860
    • AGC graphics: vkQueueSubmit recorder: Vulkan result -4
    • single cube snapshot sampled the wrong face: read 0.000000, expected 0.062745

    So it isn't specific to gfx1036 or driver 32.0.21042.62. I didn't repeat the changes you ruled out.

    AI-assisted: yes (Claude Code).

  15. changed the title [-]AMD Windows: alpha-to-coverage still fails at the original executable path after #6436[/-] [+]AMD Windows: GPL-mode cache failures (alpha/wave32 pass after local driver update)[/+] on Oct 26, 2026
  16. Amoenus commented on Oct 26, 2026

    @Amoenus
    ContributorAuthor

    @CrimsonMac your three reported fixtures also reproduce on our updated AMD iGPU driver32.0.21045.16010 (Vulkan26.10.1), on literal main d3b397b750bf55fed924036a344917c1e6fa920f. For each fixture: default4/4 pass, forced GPL-off0/4 pass; the matching RTX5080/621.01 controls pass4/4 in both modes. The assertion values/device-loss error match your report.

    All48 source-pinned results and verbose logs; the issue body now has the concise table. Actual GPU and loaded Khronos layer verified; no VUIDs or timeouts. Caches/implicit layers were left as found, without full-suite priming or clean-cache controls, so this does not prove cache poisoning or a driver-only cause. The original alpha/wave32 passes after our driver update do not resolve these distinct cases. Keeping the issue open. AI-assisted: yes (Codex).

  17. LeandroLP23 commented on Oct 27, 2026

    @LeandroLP23
    Contributor

    A run with clean-cache controls, since the last two comments left caches as found. On this GPU, whichever GPL mode runs first against the AMD driver cache passes, and the other mode then fails.

    Setup. Radeon 860M (Ryzen AI 7 350, gfx1150 / RDNA 3.5), AMD Windows driver 32.0.13058.8001, Windows 11 Home 26300, WinLibs GCC 15.2.0 r7, Release, main cb45ae2ddf. Every run had ANYPS5_REQUIRE_VULKAN=1 ANYPS5_NO_SHADER_CACHE=1 APS5_NO_PIPELINE_JOURNAL=1 VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation, run through ctest -V from build. "off" adds APS5_NO_GPL=1. The validation layer from Vulkan SDK 1.4.363.0 was confirmed loaded with VK_LOADER_DEBUG=layer. The AMD cache is %LOCALAPPDATA%\AMD\VkCache.

    The three fixtures are agc_sampled_storage_base_level_usage, agc_copied_direct_ordering and agc_recorder_cube. Each step ran all three twice, in this order:

    Phase AMD cache at start Step Mode Passed
    A as found (1589 files) 1 default 6/6
    2 off 0/6
    3 off 0/6
    4 default 6/6
    B removed (moved aside) 1 off 6/6
    2 default 0/6
    C removed again 1 default 6/6
    2 off 0/6

    Phase B is the deciding run: with an empty cache, forced GPL-off passes all three fixtures, and the default mode then fails all three. Phase C reverses the order, and so does the result. A failing mode did not change the outcome for the mode that filled the cache (A4 still passes after A2 and A3).

    The failures match CrimsonMac's and Amoenus' reports:

    • sampled sRGB base level: read 0.000000, expected 0.215860
    • fresh direct consumer ran before copied write-back
    • single cube snapshot sampled the wrong face: read 0.000000, expected 0.062745

    No VUID- lines and no missing layer in any of the 48 runs. The original cache was restored afterwards.

    So on RDNA 3.5 with this driver, too, the result follows which mode filled the cache first. This supports the cache-crossing explanation over a fault in either GPL mode on its own.

    AI-assisted: yes (Claude Code)

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