Skip to content

fix(agc): key shader modules by the pipeline library mode - #6436

Merged
oneandonlydean merged 3 commits into
boykopovar:mainfrom
LeandroLP23:fix/agc-key-modules-by-gpl-mode
Oct 20, 2026
Merged

oneandonlydean merged 3 commits into
boykopovar:mainfrom
LeandroLP23:fix/agc-key-modules-by-gpl-mode

Conversation

@LeandroLP23

@LeandroLP23 LeandroLP23 commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

What

Carries @PYTHONRETARDE's workaround for #4768 (and #5271), with his authorship. He offered it in #4768 while he can't open another PR.

AMD's Windows driver compiles pipelines differently when VK_EXT_graphics_pipeline_library is enabled on the device. Its on-disk cache (%LOCALAPPDATA%\AMD\VkCache) doesn't key on that, a finding by @simonbronk. A process in one mode is then served pipelines compiled in the other, and their writes never land. That's why identical test executables pass or fail depending on which GPL mode filled the cache first, and why agc_driver_layered_volume_vertex_no_gpl fails in every full run on AMD Windows.

  • 6d25bbe34 (PYTHONRETARDE): with the library feature off, every shader module flips bit 15 of the SPIR-V generator word (header word 2) before vkCreateShaderModule. No driver interprets that word, but it changes the module bytes, so the two modes get separate cache entries. It covers the recompiled compute and graphics programs and the embedded shaders (colour transfer, detile, CMASK clear, sample counter and dumps, mesh arguments, presentation), through Graphics::CacheKeyedSpirv in Context.hpp.
  • 28ce7bc0b (mine, after review): Graphics::CreateShaderModule in Context.hpp now keys the word and creates the module in one place. Every module the driver creates goes through it: the sites above, the six added to main since (splitComputePipeline, multisample readback, dispatch arguments, texture repack, the performance overlay), and the inline copies in Pipeline.cpp and createComputePipeline. agc_driver_graphics checks the key through a mock vkCreateShaderModule.
  • f7b8ea1cb (mine): the compute pipeline replay (ComputePipelineReplay) creates its module the same way, so a replay with the feature off hits the same cache entries as the run it reproduces. That module creation was added to main after the original commit.

The cost is one copy of the SPIR-V per module creation with the feature off. Nothing changes with it on.

Tested

RX 7800 XT (RDNA 3, 1002:747e, driver 32.0.31041.1004, Windows 11 Pro 26200), by @PYTHONRETARDE on 839d2424. Each sequence starts from an empty VkCache and runs the four fixtures of #4768 in every step:

Sequence main this change
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

He also ran a full CTest from an empty VkCache: 1245 of 1247, both failures unrelated.

Radeon 860M (RDNA 3.5, 1002:1114, driver 32.0.13058.8001, Windows 11 26300), WinLibs GCC 15.2.0, Release:

  • On d92a8dad3 (#4768): main fails the mode that differs from the one that filled the cache, 4/4. The commit passes 4/4 in every step of both sequences.
  • On this branch (main ff23657f3 + both commits): the same two sequences pass 4/4 in every step, 24 of 24 runs.
  • ctest -R '^agc_' -j 1 from an empty VkCache and tests/shader_cache: 593 of 596 pass. agc_driver_layered_volume_vertex_no_gpl passes; it fails in every full run on main on this machine. The three failures are unrelated:
  • tools/check_conventions.py --base origin/main passes; git diff --check is clean.

Not tested: NVIDIA, Intel, any title. @thuanquang ran the four #4768 fixtures and the full suite on an RX 6700 XT (RDNA 2): every GPL sequence passes, agc_driver_layered_volume_vertex_no_gpl fails on the base and passes here. @savvaniss ran both sequences on an RX 9070 XT (RDNA 4, driver 32.0.31041.1004): the base fails the mode that differs from the one that filled the cache, this head passes 4/4 in every step.

Fork CI (run): linux (including agc_compute_pipeline_replay), windows and the three relinker jobs pass everything except conventions_ci_gate and build_eligibility, which fail only on the fork's older workflow.

Checklist

@github-actions

github-actions Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Other open pull requests touch the same code. Merging one will break the other, or both implement the same thing. If this one builds on them, list them in Depends on.

Pull request Conflicting files (lines on main) Same exports Same new files
PR 6262 core/libs/prx/libSceAgcDriver/Execution/src/PresentationPass.cpp L73-80
core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp L4874-4878
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp L22
core/libs/prx/libSceAgcDriver/Graphics/src/GpuColorTransfer.cpp L31-34
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp L361-365
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp L2078-2081, L2097-2099, L2394-2397
core/libs/prx/libSceAgcDriver/Graphics/src/TextureDetiler.cpp L92-95, L171-174, L350-354
PR 6804 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp L339
PR 6905 core/libs/prx/libSceAgcDriver/Graphics/src/TextureDetiler.cpp L170-174

Some comparisons could not be completed because a pull request conflicts with the base branch. Review these shared files manually before concluding that there is no overlap.

Pull request Shared files not compared
PR 1395 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 2434 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 4040 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 4072 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 4472 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 5021 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 5431 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 5441 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 5499 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/TextureDetiler.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 5581 core/libs/prx/libSceAgcDriver/Graphics/src/GpuColorTransfer.cpp
PR 5609 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 5925 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6146 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6185 core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 6186 core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 6188 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6194 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6202 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6235 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6280 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6290 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6481 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6539 core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 6548 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6636 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6682 core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 6683 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6788 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6808 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 6946 core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 6947 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 6960 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 6977 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/TextureDetiler.cpp
PR 7002 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
core/libs/prx/libSceAgcDriver/Graphics/src/TextureDetiler.cpp
PR 7085 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 7154 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 7201 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
PR 7256 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 7449 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 7464 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 7484 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 7642 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Recorder.cpp
PR 7800 core/libs/prx/libSceAgcDriver/Graphics/include/Context.hpp
PR 7888 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
core/libs/prx/libSceAgcDriver/Graphics/src/Pipeline.cpp
PR 7922 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 8004 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp
PR 8014 core/libs/prx/libSceAgcDriver/Execution/src/VulkanDevice.cpp

@PYTHONRETARDE

Copy link
Copy Markdown
Contributor

Thanks for carrying it and for the 860M runs. Keep #6436 open, no need to wait for #6173.

@thuanquang

Copy link
Copy Markdown
Contributor

An RDNA2 run, the architecture #4768 was first seen on: with this change both GPL modes work on a discrete RX 6700 XT.

Setup: AMD Radeon RX 6700 XT (gfx1031, 1002:73df), Adrenalin 26.8.1 (driver 32.0.21045.5002), Windows 11 26200, WinLibs GCC 15.2.0 r7, Release, BUILD_TESTING=ON, ANYPS5_REQUIRE_VULKAN=1. Base: main fa9365ca7 with #6452 merged, because main does not compile GpuIndirectArgumentsMisalignedWriterAhead.cpp with MinGW (requested alignment '65536' exceeds object file maximum 8192); this head f7b8ea1cb merged on top. VkCache was not emptied; earlier full-suite runs on this machine had filled it.

The four fixtures of #4768 (agc_driver_alpha_to_coverage, agc_driver_buffer_load_store, agc_driver_wave32_exec_lane_bits, agc_driver_layered_volume_vertex), ANYPS5_NO_SHADER_CACHE=1, ctest --parallel 1 per step, each sequence twice:

Sequence Base This change
GPL off → on → off off: 0/4 in both off steps; on: 4/4 4/4 in every step
GPL on → off → on off: 0/4; on: 4/4 in both on steps 4/4 in every step

The base's GPL-off runs report buffer load store wave32: lane 0 load_ubyte is 0xdeadbeef, expected 0x00000000, wave32 lane 0 is 3735928559, expected 64 and vertex draw: slice 1 texel (0, 0) channel 0 is 64, expected 255 (the band of layer 0).

Full suite, ctest --parallel 4 --timeout 120, 1296 tests on both:

  • agc_driver_layered_volume_vertex_no_gpl fails on the base and passes with this change (5/5 alone).
  • agc_driver_pixel_interlock and agc_driver_lds_mixed_width_atomics fail on both (agc_* tests: 3 of 483 fail on AMD Radeon RX 6400, pass on NVIDIA RTX 4080 SUPER #5271).
  • agc_driver_same_queue_label_wait failed once in this change's run. It is intermittent on the base too: 1 of 20 alone fail there, 20 of 20 pass alone with this change.
  • The tools tests conventions_function_bodies* and hardware_oracle_compare hit their 30 s and 20 s limits on this machine in both runs; unrelated.

Not tested: a run from an empty VkCache, and any title.

AI-assisted: yes (Claude Code).

@LeandroLP23
LeandroLP23 marked this pull request as ready for review October 15, 2026 22:13
@github-actions github-actions Bot added agc libSceAgc* needs rebase Conflicts with main, rebase needed labels Oct 16, 2026
@LeandroLP23
LeandroLP23 force-pushed the fix/agc-key-modules-by-gpl-mode branch from f7b8ea1 to 719f8df Compare October 16, 2026 13:19
@LeandroLP23

Copy link
Copy Markdown
Contributor Author

Rebased onto main 82ddae75b: #5875 moved compute pipeline creation into createComputePipeline, so the keyed module now lives there. The journal's prebuild goes through it as well.

Retested on the rebased head 719f8dffe, Radeon 860M (driver 32.0.13058.8001, Windows 11 26300), WinLibs GCC 15.2.0, Release:

@savvaniss

Copy link
Copy Markdown
Contributor

RDNA 4 data point: with this change both GPL modes work on an RX 9070 XT.

AMD Radeon RX 9070 XT (1002:7550), driver 32.0.31041.1004 (Vulkan driver info 26.8.1), Windows 11 Pro 26300, WinLibs GCC 15.2.0 r7, Release. Base: main a7f108030 + #6452 (4fe92c9c2, needed to build on Windows); this head 719f8dffe merged on top. The four #4768 fixtures (agc_driver_alpha_to_coverage, agc_driver_buffer_load_store, agc_driver_wave32_exec_lane_bits, agc_driver_layered_volume_vertex), ANYPS5_NO_SHADER_CACHE=1, ctest --parallel 1, VkCache emptied at the start of each sequence.

Sequence Base This change, 2 rounds
GPL off → on → off on: 4/4 fail; off steps pass 4/4 pass in every step
GPL on → off → on off: 4/4 fail; on steps pass 4/4 pass in every step

The base failures are those of #4768: lane 0 load_ubyte is 0xdeadbeef, wave32 lane 0 is 3735928559, expected 64, holds half 0x0000, expected 0.5 and slice 1 texel (0, 0) channel 0 is 64, expected 255.

agc_pipeline_library_off, agc_driver_layered_volume_draw and agc_driver_layered_volume_vertex_no_gpl pass ×3. Full CTest with this PR, #6255 and #6647 together, from an empty VkCache: 1338 of 1339 (select_tests, symlink privilege on this machine). On main 406fd9ea9 the full run failed agc_driver_layered_volume_vertex_no_gpl.

AI-assisted: yes (Claude Code)

@LeandroLP23

Copy link
Copy Markdown
Contributor Author

Another data point, on current main: this PR fixes agc_driver_layered_volume_vertex_no_gpl on the Radeon 860M. That test fails on main there every time (#5271).

Radeon 860M (RDNA 3.5), driver 32.0.13058.8001, Windows 11 26300, WinLibs GCC 15.2.0 r7, Release. Same main commit fb9a1eb8f, with and without this PR (719f8dffe), clean merge. I rebuilt the test executable each time I switched, and went main → PR → main → PR.

Build layered_volume_vertex_no_gpl layered_volume_draw, _vertex, _submit
main fails, 3/3 (slice 1 texel (0, 0) channel 0 is 64, expected 255) pass, 3/3
main + this PR passes, 3/3 (and again after switching back from main) pass, 3/3

This matches @thuanquang's RX 6700 XT measurement in #7376: the layered-volume failures are the GPL cache-order effect, and with this PR they're gone. Together with #7623, that is what #7376 needs before #7351's AMD robustBufferAccess2 exclusion can go.

AI-assisted

@MaxLikesCode

Copy link
Copy Markdown
Contributor

A non-AMD check that the flipped generator word is harmless: NVIDIA GeForce RTX 4090, driver 617.42, Windows 11 Pro 26200, WinLibs GCC 15.2.0 r7, Release, BUILD_TESTING=ON with every execution test built. This head (719f8df) merged into main ad502d7.

#6262 makes the same change; this result should hold for it too.

AI-assisted: yes (Claude Code)

@thuanquang

thuanquang commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Another test this fixes on AMD's Windows driver, with a harder symptom than wrong pixels: agc_driver_stencil_replay (the executable behind agc_driver_stencil_replay and agc_driver_stencil_replay_no_gpl). RX 6700 XT (gfx1031), driver 32.0.21045.5002, Windows 11 26200. Each sequence runs one renamed copy of the executable, so the driver cache starts empty:

steps (GPL mode per run) main 7f596df48 + #7769 main 7f596df48 + #7074 + #7725 + this PR (719f8dffe)
off, on, off the GPL-on run fails: vkQueueSubmit recorder: Vulkan result -4 all pass
on, off, on the GPL-off run fails the same way all pass

So without this change the second GPL mode loses the device here, not only renders wrong. The other PRs in both trees touch neither pipelines nor shader modules: #7769 is a storage-flush wait, #7074 the f16 fma NaN translation, #7725 one stencil refusal.

@oneandonlydean

Copy link
Copy Markdown
Collaborator

Thanks for carrying this. main has added six vkCreateShaderModule calls since this branch's base, and they don't go through CacheKeyedSpirv yet: splitComputePipeline in Execution/src/VulkanDevice.cpp (recompiled compute programs), Graphics/src/MultisampleReadback.cpp (readback depth/uint), the dispatch-arguments module in Graphics/src/Recorder.cpp, the texture-repack module in Graphics/src/TextureDetiler.cpp, and the two modules in Execution/src/PerformanceOverlay.cpp. On AMD's Windows driver these would still share cache entries across GPL modes. Could you rebase and key them too? Routing every module creation, including the inline copies in Pipeline.cpp and createComputePipeline, through the one helper would keep new call sites from missing it.

PYTHONRETARDE and others added 2 commits October 20, 2026 18:06
AMD's Windows driver compiles pipelines differently when
VK_EXT_graphics_pipeline_library is enabled on the device, but its
on-disk cache (%LOCALAPPDATA%\AMD\VkCache) does not key on it. A process
in one mode is then served pipelines compiled in the other, and their
writes never land (boykopovar#4768, boykopovar#5271).

With the library feature off, every module now flips bit 15 of the SPIR-V
generator word, which no driver interprets, so the two modes hash to
separate cache entries.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…brary mode

The replay rebuilds a captured compute pipeline to time it. With the
library feature off, production now flips the SPIR-V generator word
before vkCreateShaderModule. The replay creates the same module, so it
hits the same AMD driver cache entries as the run it reproduces.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he key

Six vkCreateShaderModule calls added to main since this branch's base
still passed their SPIR-V unchanged, so on AMD's Windows driver they
shared on-disk cache entries across the two pipeline library modes:
splitComputePipeline's recompiled compute programs, the multisample
readback modules, the dispatch-arguments module, the texture repack
module and the two performance overlay modules.

Graphics::CreateShaderModule now keys the generator word and creates the
module in one place. Every module the driver creates goes through it,
including the recompiled graphics and compute programs that copied the
key inline, so new call sites can't skip it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@LeandroLP23
LeandroLP23 force-pushed the fix/agc-key-modules-by-gpl-mode branch from 719f8df to 28ce7bc Compare October 20, 2026 16:41
@LeandroLP23

Copy link
Copy Markdown
Contributor Author

Done. The branch is rebased onto main 75787d2; the two original commits applied cleanly. A new commit, 28ce7bc, routes every module creation through one helper.

  • Graphics::CreateShaderModule(create, device, graphicsPipelineLibrary, code, bytes, operation) keys the generator word, creates the module and checks the result. A Context overload fills in the first three arguments. It replaces CacheKeyedSpirv, so the key now exists in a single place.
  • It now covers the six sites you listed: splitComputePipeline, the two multisample readback modules, dispatch arguments, texture repack, and both performance overlay modules.
  • It also covers the inline copies in Pipeline.cpp (graphics programs) and createComputePipeline, the compute pipeline replay, and the sites that already used CacheKeyedSpirv: color transfer, detile, detile image, CMASK clear, sample counter and dumps, mesh arguments, presentation.
  • Outside the helper, VkShaderModuleCreateInfo now appears only in test fixtures.
  • New check in agc_driver_graphics, through a mock vkCreateShaderModule: with libraries on, the module bytes are unchanged; without, only bit 15 of word 2 flips; the source words stay intact. Negative control: with the flip disabled, it fails with a shader module without graphics pipeline libraries kept the generator word of the other mode.

Tested on a Radeon 860M (1002:1114, AMD driver 32.0.13058.8001), Windows 11 26300, WinLibs GCC 15.2.0, Release, ANYPS5_REQUIRE_VULKAN=1:

  • ctest -R "agc|shader|spirv|recomp" -j4: 841 of 842 pass, 3 skipped for device features. The one left is agc_driver_image_array_window_past_layer_limit, which doesn't compile under MinGW (requested alignment '65536' exceeds object file maximum 8192), also on main.
  • AGC: root cause of the AMD proprietary failures behind the robustBufferAccess2 exclusion (#7351) is still open #7376's library-mode sequences, using renamed copies of agc_driver_layered_volume_draw_tests.exe so the driver cache starts empty, run twice each. Every step exits 0:
    • off (--vertex-only), on, on (--vertex-only), off (--vertex-only);
    • on, on (--vertex-only), off (--vertex-only), on.
  • The three layered-volume tests run concurrently on a fresh copy, then --vertex-only alone with APS5_NO_GPL=1: passes, 3 of 3.

One caveat. Before I cleared the driver cache, this machine's existing AMD cache for agc_driver_layered_volume_draw_tests.exe made agc_driver_layered_volume_vertex_no_gpl fail 3 of 3 with the rebased original commits: vertex draw: slice 1 texel (0, 0) channel 0 is 64, expected 255. main passed 3 of 3 on that same cache. With %LOCALAPPDATA%\AMD\VkCache moved aside (and restored afterwards), the PR passed 3 of 3. That cache had been filled by many builds of the same test binary today, and I couldn't reproduce how the bad entry got there, not even with concurrent runs. Flagging it in case it shows up for someone else as a first-run failure after switching to this branch.

AI-assisted: yes (Claude Code)

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

Labels

agc libSceAgc*

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants