Skip to content

fix(libSceAgcDriver): export raw 32-bit values into UINT color targets as integers - #9789

Open
rooklz wants to merge 1 commit into
boykopovar:mainfrom
rooklz:fix/agc-uint-color-export
Open

rooklz wants to merge 1 commit into
boykopovar:mainfrom
rooklz:fix/agc-uint-color-export

Conversation

@rooklz

@rooklz rooklz commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

What

A pixel shader that exports raw 32-bit values (32_R, 32_GR, 32_AR, 32_ABGR) into a color target whose number type is UINT reached Vulkan as a float4 output on an integer attachment: State.cpp picked the UINT attachment format from the target, but only a UINT16_ABGR export (uintExport) made the fragment output uint4. NVIDIA and AMD drivers write the float's bits, which is what the console's CB stores for 32-bit channels, but Metal refuses the pipeline, so on macOS two catalog titles stop at their first draw (#9783):

[mvk-error] VK_ERROR_INITIALIZATION_FAILED: Render pipeline compile failed (Error code 3):
output of type float4 is not compatible with a MTLPixelFormatRGBA32Uint color attachment
[gpu] driver failure: AGC graphics: vkCreateGraphicsPipelines: Vulkan result -3

(PPSA99313 Doom 3 BFG, COLOR_32_32_32_32 UINT; PPSA59322 ccleste the same with COLOR_8 UINT and MTLPixelFormatR8Uint.)

The fragment-output specialization already retypes a float4 output to uint4 with a bitcast for the two word-packed targets (Unorm10_11_11, Float11_11_10). This adds a third kind, Uint, that does only that retype. DecodeColorFormat sets it for every UINT number type whose decode has no packing of its own, the UINT16 export keeps its existing uintExport path (the output is already uint4 there, so the packing is cleared), and the other 16-bit export formats into a UINT target throw as the packed targets do. The rules that only make sense for packed targets, no partial writes, no blending, no DCC and no CB resolve, stay on the packed kinds (Unorm10_11_11, Float11_11_10 and, since #8563, Unorm4_4_4_4) through WordPacked; Uint is the last enumerator, after #8563's.

Blending on a UINT target is dropped at decode: the Vulkan framebuffer chapter says Blending is only defined for floating-point, UNORM, SNORM, and sRGB formats, Metal refuses it, and Doom 3 BFG has it enabled on that same target. A CB resolve whose source is a UINT target keeps working: the resolve guard that refuses the two word-packed sources now tests WordPacked instead of any packing, with a decode case for a UINT-source resolve. The debt entry records what is not measured on a console: the CB's conversion of a raw export into 8- and 16-bit UINT channels and whether it blends into integer targets.

Tested

  • macOS 26.2, Apple M5, Apple clang 21, x86-64 under Rosetta 2, MoltenVK, on @mugurc's ci/macos-series-2 integration tree at 53db0badb with fix(tests): compare the Bessel exports with fixed reference values #7524, the code of feat(libkernel): JIT shared memory on macOS hosts #7937 and the libSceSsl change of feat: macOS on Apple Silicon host support (Rosetta 2 and MoltenVK) #7332: the two titles: PPSA99313 Doom 3 BFG on that tree without this change dies at its first rect-list draw with the lines above; with it the pipeline compiles and the title runs through to its own data check and exits 0 (Sys_Error: Could not load default font, Doom 3 BFG (PPSA99313) #9787). PPSA59322 ccleste moves from the same compile error to the MoltenVK barycentric gap noted on macOS support #1 (ccleste (PPSA59322) #9788). MoltenVK still prints Blending is enabled for attachment with format VK_FORMAT_R8G8B8A8_UINT, which does not support it for these targets: its MVKPipeline.mm prints that for every attachment whose format cannot blend, whatever blendEnable says, and a log line I added before vkCreateGraphicsPipelines confirmed no integer attachment reached it with blending on. agc_driver_packed_float_color_target and agc_driver_packed_unorm_color_target pass 3 of 3 on MoltenVK with the corrected SelectExportPacking, and both title results above were re-run on that code with the same outcome; the integration tree is older than main and cannot build the new execution test or run agc_driver_graphics_tests to the new checks (it stops earlier on a check of main's test file against the tree's older State.cpp), so those two are covered by the hosted run below.
  • Linux, hosted runner (Ubuntu 24.04, GCC, Release, lavapipe): the verify run on my fork on fced1e175d, the head before the resolve-guard change, fails the job on any ctest failure and passes agc_driver_graphics (with uintTargetTests), agc_driver_graphics_maps_fallback, agc_driver_uint_color_target (the new execution test), agc_driver_packed_float_color_target, agc_driver_packed_unorm_color_target, agc_driver_packed_unorm4444_color_target and the shader_recompiler tests. Its only failure, agc_driver_sgpr_pattern_fill_keys, fails the same way on main on that runner (the base side of https://github.com/rooklz/AnyPS5/actions/runs/39845397298). The same run on the current head f23f7dcd90, rebased over feat(agc): render 4_4_4_4 UNORM color targets through packed R16_UINT exports #8563, is https://github.com/rooklz/AnyPS5/actions/runs/40010114899 (and on 05a84816f6 before it, https://github.com/rooklz/AnyPS5/actions/runs/39982371741): every targeted test passes, and its two failures, agc_driver_queued_index_read_order and agc_driver_sgpr_pattern_fill_keys, are main's on that runner. An earlier version of this section called a run on 81d67188b6 passing when its log had the new execution test failing: SelectExportPacking in the SPIR-V backend packed every non-None kind as a word, so a UINT target received the 10_11_11 UNORM packing of the float instead of its bits; @adriadam10 found it in that log.
  • Linux x86-64 container (Ubuntu 24.04, GCC 13.3, Release, llvmpipe), this head's diff on main a6dcea9279: agc_driver_graphics_tests passes plain and with --maps-fallback (both reach the new uintTargetTests and the UINT-source resolve check), and agc_driver_uint_color_target_tests, agc_driver_packed_float_color_target_tests and agc_driver_packed_unorm_color_target_tests pass, each binary run directly with its exit status checked.
  • agc_driver_graphics_tests gains uintTargetTests: a COLOR_32 UINT target decodes to R32_UINT with the Uint packing and its blend dropped, COLOR_8 UINT to R8_UINT the same, a UINT16_ABGR export keeps uintExport with no packing, an FP16_ABGR export into it is refused, and a 32-bit float target keeps no packing. The new agc_driver_uint_color_target_tests draws eight 32-bit words (0, 1, the bits of 1.0f, a quiet NaN, negative infinity, negative zero, 0xdeadbeef, 0xffffffff) through a 32_R export into tiled and linear R32_UINT targets and reads each back bit for bit, the way agc_driver_packed_float_color_target_tests does for the 11_11_10 target.
  • Windows 11, Core i7-13650HX, NVIDIA RTX 4060 Laptop GPU (driver 610.62), WinLibs GCC 15.2.0, Release, Khronos validation layer on, by @valenciana-nc on f9b349a056 merged onto main c383e3772b: agc_driver_graphics, agc_driver_packed_float_color_target, agc_driver_packed_unorm_color_target and agc_driver_uint_color_target pass 3 of 3 each with no validation message; main passes the first three. PPSA59322 ccleste reaches its first level on main and with this change (two runs each, A/B/B/A, natural exit 0); main logs six Undefined-Value-ShaderFragmentOutputMismatch-DynamicRendering warnings for the float output into R8_UINT, and this change logs none (details on ccleste (PPSA59322) #9788).
  • check_conventions.py passes. pr_overlap.py reports feat(agc): render 4_4_4_4 UNORM color targets through packed R16_UINT exports #8563 and feat(agc): merge partial writes into 4_4_4_4 UNORM color targets #8564 (4_4_4_4 UNORM packings) in DecodeColorFormat and feat: macOS host support (Apple Silicon via Rosetta 2, Vulkan on MoltenVK) #8658 next to the uintExport line; none implements this, and whichever lands second rebases a few lines.
  • GPUs tested: Apple M5 through MoltenVK (macOS); lavapipe on the hosted Linux runner; NVIDIA RTX 4060 Laptop (driver 610.62, Windows 11) by @valenciana-nc, see below. Not yet run on AMD.

Checklist

@rooklz

rooklz commented Oct 22, 2026

Copy link
Copy Markdown
Contributor Author

Head 1a57150054: the new execution test needs the recompiler's Optimization include directory like agc_driver_packed_float_color_target_tests does; the first hosted run failed to compile it for that reason. Same diff otherwise; the hosted run link in the description is the new one.

@github-actions

github-actions Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

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 1191 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
PR 1368 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 1395 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 1896 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 2434 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 4040 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 4448 docs/dev/debt/libSceAgcDriver.md
PR 5021 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5058 docs/dev/debt/libSceAgcDriver.md
PR 5371 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 5441 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 5609 core/shader/recompiler/Recompiler.hpp
PR 5925 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/Recompiler.hpp
docs/dev/debt/libSceAgcDriver.md
PR 6044 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6186 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6187 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6188 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/shader/recompiler/Recompiler.hpp
PR 6192 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6194 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6209 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6223 docs/dev/debt/libSceAgcDriver.md
PR 6235 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/ControlFlow/src/RequestSerializer.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 6273 docs/dev/debt/libSceAgcDriver.md
PR 6280 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6300 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 6412 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/shader/recompiler/Recompiler.hpp
docs/dev/debt/libSceAgcDriver.md
PR 6481 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6539 core/shader/recompiler/Recompiler.hpp
PR 6548 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6549 docs/dev/debt/libSceAgcDriver.md
PR 6612 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6642 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 6808 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 6867 docs/dev/debt/libSceAgcDriver.md
PR 6977 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7048 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7201 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 7223 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7256 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7275 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7410 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/ControlFlow/src/RequestSerializer.cpp
core/shader/recompiler/Recompiler.hpp
PR 7449 docs/dev/debt/libSceAgcDriver.md
PR 7457 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 7484 core/shader/recompiler/Recompiler.hpp
PR 7604 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 7642 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7668 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 7677 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 7689 core/shader/recompiler/Recompiler.hpp
PR 7910 docs/dev/debt/libSceAgcDriver.md
PR 7978 docs/dev/debt/libSceAgcDriver.md
PR 8004 core/shader/recompiler/ControlFlow/src/RequestSerializer.cpp
core/shader/recompiler/Recompiler.hpp
PR 8014 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 8223 docs/dev/debt/libSceAgcDriver.md
PR 8246 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
PR 8319 docs/dev/debt/libSceAgcDriver.md
PR 8365 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 8484 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 8542 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 8592 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9193 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/ControlFlow/src/RequestSerializer.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 9348 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9356 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/ControlFlow/src/RequestSerializer.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9361 docs/dev/debt/libSceAgcDriver.md
PR 9387 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/ControlFlow/src/RequestSerializer.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9393 docs/dev/debt/libSceAgcDriver.md
PR 9431 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9432 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9508 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9521 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 9592 docs/dev/debt/libSceAgcDriver.md
PR 9672 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9673 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9674 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9675 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9676 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9685 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9700 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9842 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9879 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9891 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9892 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9893 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9895 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
docs/dev/debt/libSceAgcDriver.md
PR 9897 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/Recompiler.hpp
PR 9898 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9904 docs/dev/debt/libSceAgcDriver.md
PR 9905 docs/dev/debt/libSceAgcDriver.md
PR 9906 docs/dev/debt/libSceAgcDriver.md
PR 9940 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9941 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 9969 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10193 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10194 core/libs/prx/libSceAgcDriver/CMakeLists.txt
PR 10233 core/libs/prx/libSceAgcDriver/CMakeLists.txt
docs/dev/debt/libSceAgcDriver.md
PR 10348 core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/ControlFlow/src/RequestSerializer.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
PR 10420 core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10472 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
docs/dev/debt/libSceAgcDriver.md
PR 10515 core/libs/prx/libSceAgcDriver/CMakeLists.txt
core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp
core/libs/prx/libSceAgcDriver/tests/Graphics.cpp
core/shader/recompiler/ControlFlow/src/RequestSerializer.cpp
core/shader/recompiler/Recompiler.hpp
core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp
docs/dev/debt/libSceAgcDriver.md

@github-actions github-actions Bot added the fix error Closes an issue (Fixes #N) label Oct 22, 2026

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The exact-head C++20 syntax check found a blocking compile error in the new execution test. UintColorTarget.cpp opens an anonymous namespace at line 35, but it never closes it before defining main(); the file ends at line 281 still inside that namespace. Compiling the exact PR file with the repository headers fails with expected '}' at end of input (matching the namespace opened at line 35). Please close the helper namespace before main(), then rerun the focused target/build.

The hosted eligibility, conventions, labels and report checks pass, but the product build/test jobs are skipped, so they do not catch this compile failure. I ran only a syntax-only compile locally; no runtime test ran here.

After the fix, please consider adding a 32-bit raw export into an R8_UINT target to the execution test as well. The issue's ccleste case uses R8_UINT; the current execution test covers tiled and linear R32_UINT, while the 8-bit path is only covered by state-decode assertions and a title run that proceeds to a later failure.

@rooklz

rooklz commented Oct 22, 2026

Copy link
Copy Markdown
Contributor Author

Head 81d67188b6: the second hosted run found a missing closing brace in the new execution test (the anonymous namespace), which the older macOS tree never got far enough to compile. Fixed and syntax-checked locally with the project's flags; hosted run https://github.com/rooklz/AnyPS5/actions/runs/39811668668.

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The state decode and output specialization changes are consistent with the intended raw UINT path, and the new decode checks cover unsupported packed exports plus blend suppression. Current-main check_conventions.py and git diff --check pass. I did not build/run the Vulkan execution test locally. The fork verification workflow for the fix/agc-uint-color-export ref is still in progress at the time of this review; I have not counted its results as passing. The upstream PR checks themselves show eligibility/conventions/labels, while full product builds are skipped.

Two follow-ups before merge:

  • This head is eight commits behind live main (8499ea52e571b0edfc1feecfd3f6b9944012b359). CONTRIBUTING.md requires branches to be based on and kept up to date with main; please sync and rerun the checks on the final head.
  • The execution test bit-checks 32_R output into R32_UINT in tiled and linear layouts. The implementation also accepts 32_GR, 32_AR and 32_ABGR, while the decode unit tests currently check R32 and R8. Please add focused multi-channel execution coverage for those accepted export formats, or narrow the supported-format claim to the formats covered by the evidence.

The issue #9783 is open and correctly linked with Fixes #9783; I found no duplicate fix in its comments.

@MarcZX10 MarcZX10 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The latest head 81d67188b66510d2465ef10ba8dd15743e90b586 fixes the previously reported test compile issues according to the author’s follow-up and macOS workflow link. Current-main conventions and git diff --check pass, and the merge tree is clean. The PR reports valuable MoltenVK/title validation and the upstream hosted product jobs are skipped. This VM has no Vulkan device for the required paired validation-layer run, so those results remain contributor-reported. The branch is still 21 commits behind current main (11f976b27c16ed91633f00039dba5dfd97dd7cc1); please rebase and rerun the execution test and main/change validation comparison on the current base before merge.

@rooklz

rooklz commented Oct 22, 2026

Copy link
Copy Markdown
Contributor Author

The hosted Linux run on 81d67188b6 passed: agc_driver_graphics with the new uintTargetTests, the new agc_driver_uint_color_target execution test on lavapipe, both packed-target execution tests and the shader_recompiler tests (https://github.com/rooklz/AnyPS5/actions/runs/39811668668). GPUs so far: Apple M5 through MoltenVK and lavapipe; an NVIDIA run follows tomorrow.

@MarcZX10

MarcZX10 commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

I reviewed the changed decode, specialization, serialization, and execution-test paths. The Uint packing is propagated through the serialized enum and fragment output specialization; the execution test exercises bit-preserving 32-bit writes and both tiled and linear layouts. The hosted lavapipe run is useful evidence, though I did not run the GPU test locally (this workspace is on an older checkout and does not have a usable Vulkan test setup).

One coordination point before merge: the PR currently targets base 8499ea52, while upstream main is 9062485e (the base is substantially behind). The checklist says “Based on current main” and pr_overlap.py reports shared DecodeColorFormat/uintExport edits with #8563, #8564, and #8658. Those PRs remain open. Could you rebase onto current main, rerun the relevant checks, and update the dependency/merge-order note to make explicit how these shared edits should land? This will let reviewers verify the final combined state and avoid accidentally overwriting adjacent format-decoding work.

@adriadam10 adriadam10 self-assigned this Oct 22, 2026

@adriadam10 adriadam10 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The new execution test fails on your own hosted run, and the cause is in the shader, which this PR doesn't touch:

  • Your verify run 39811668668 on 81d67188b6 is green only because its ctest step ends in || true. Its ctest.log artifact has agc_driver_uint_color_target failing: a 32_R export of 0x00000001 into a tiled 32-bit UINT target: pixel (0, 0) inside the scissor holds 0x00000000, expected 0x00000001. The same log also has agc_driver_graphics failing (alternate color blend constants were not swizzled with the export), along with three other agc tests. Please check whether those also fail on the base you ran on.
  • Cause: SelectExportPacking (core/shader/recompiler/SpirvBackend/src/SpirvModuleEmitter.cpp:427-441) treats any packing other than None as a packed word. With Uint it takes the Format11_11_10UNorm path, writes PackExport(...) into component 0 and zeroes the rest. The specialization then bitcasts that word to uint4, so a UINT target gets the 10_11_11 UNORM packing of the float, not its raw bits. Word 0 survives that and word 1 (a denormal) becomes 0, which matches the failure above. So the Doom 3 BFG pipeline compiles on MoltenVK, but the target doesn't get the values the console's CB stores.
  • Suggested fix: in SelectExportPacking, set packed only for Unorm10_11_11 and Float11_11_10, so that Uint passes the color through and the existing retype does the bitcast. Then make sure agc_driver_uint_color_target passes on a run whose ctest failures fail the job. Please also update the "Tested" section, which currently says the hosted run passes.

@rooklz
rooklz force-pushed the fix/agc-uint-color-export branch 2 times, most recently from ca9a64a to cdfc5fe Compare October 22, 2026 20:08
@rooklz

rooklz commented Oct 22, 2026

Copy link
Copy Markdown
Contributor Author

@adriadam10 you're right on both counts, and thanks for reading the log. My fork workflow ends its ctest step in || true and I read the job result instead of its failures.txt, so the "passes" in the description and in my earlier comment was wrong: on 81d67188b6 that run has agc_driver_uint_color_target, agc_driver_graphics and agc_driver_graphics_maps_fallback failing, plus agc_driver_queued_index_read_order and agc_driver_sgpr_pattern_fill_keys, which also fail on the libc-only runs of #9763 and so are lavapipe failures of main. The workflow now fails the job when failures.txt is non-empty.

Head cdfc5fe689 (rebased onto f6075c2f4a) has two changes: SelectExportPacking sets packed only for Unorm10_11_11 and Float11_11_10, so a Uint target gets the colour through unchanged and the existing retype does the bitcast; and the blend drop moves after the blend decode, because hdrComponentSwapTests expects the blend constants of a 16-bit UINT target to be swizzled with the export, and clearing blendEnable before that block skipped the decode. The verify run on this head is https://github.com/rooklz/AnyPS5/actions/runs/39846282162; I'll post its failures.txt here and correct the Tested section whichever way it comes out.

@rooklz
rooklz force-pushed the fix/agc-uint-color-export branch from cdfc5fe to 2297b5a Compare October 22, 2026 20:41

@adriadam10 adriadam10 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the fix: SelectExportPacking now passes the color through for Uint, and agc_driver_uint_color_target passes on your run of cdfc5fe689. Two things remain:

  • core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp:2025: the CB resolve guard is source.packing != ColorExportPacking::None. Every UINT target now has packing == Uint, so a resolve of a UINT target throws "CB resolves of unsigned integer color targets are unsupported", where on main it was accepted (the format/extent checks above are the only ones it had). Use WordPacked(source.packing) there, as you did for the DCC check at line 1856, and add a case to Graphics.cpp that decodes a resolve with a UINT source and expects it to pass.
  • Your run 39846282162 on cdfc5fe689 still fails agc_driver_graphics (ctest.log has it failing after 0.10 s, with no message). Your earlier comment lists it among the failures from 81d67188b6, but not among those that also fail on main. Please show the failing assertion and whether main fails it too on the same job; if it is the PR (e.g. the static_cast<ColorExportPacking>(4) change in float11_11_10TargetTests or the new uintTargetTests), it needs fixing.

Also please correct the "Tested" section so it states which tests pass and which fail on a run whose ctest failures fail the job.

@rooklz
rooklz force-pushed the fix/agc-uint-color-export branch from 2297b5a to d7b372d Compare October 22, 2026 21:36

@adriadam10 adriadam10 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the update. The first point from the last review is still open:

  • core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp:2027: the CB resolve guard is still source.packing != ColorExportPacking::None. DecodeColorFormat (line 1748) now gives every UINT target packing == Uint, so a resolve of a UINT target throws "CB resolves of unsigned integer color targets are unsupported", where main accepted it (the format/extent checks above were its only ones). Use WordPacked(source.packing) there, as at line 1858, and add a case next to the resolve checks in Graphics.cpp (around line 3790; the loop there only covers the 10_11_11 and 11_11_10 targets) that decodes a resolve with a UINT source and expects it to pass.

The change to uintTargetTests (zeroing context[0x105..0x108]) is not explained: if it fixes the agc_driver_graphics failure from your fork run, please post the failing assertion it addressed and a run on this head whose ctest failures fail the job, so the "Tested" section can say which tests pass and which fail (and whether main fails them too).

@rooklz
rooklz force-pushed the fix/agc-uint-color-export branch from d7b372d to fced1e1 Compare October 22, 2026 22:20

@adriadam10 adriadam10 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the update. The head only adds words.context[0x1e0] = 0 to the test; the main point is still open:

  • core/libs/prx/libSceAgcDriver/Graphics/src/State.cpp:2027: the CB resolve guard is still source.packing != ColorExportPacking::None. Every UINT target now has packing == Uint, so resolving a UINT target throws "CB resolves of unsigned integer color targets are unsupported", where main accepted it. Use WordPacked(source.packing) there, as at line 1858, and add a case next to the resolve checks in Graphics.cpp (around line 3790, where the loop only covers 10_11_11 and 11_11_10) that decodes a resolve with a UINT source and expects it to pass.
  • uintTargetTests: please say which assertion the context[0x1e0] = 0 line fixes, and show a run on this head so the "Tested" section lists what passes and what fails (and whether main fails the same tests).

@MarcZX10

Copy link
Copy Markdown
Contributor

I checked the completed fork verification run 39846282162 and downloaded its failures.txt/CTest log. On run head d882f462, the Linux full job failed 4/1,851 tests: agc_driver_graphics, agc_driver_graphics_maps_fallback, agc_driver_queued_index_read_order, and agc_driver_sgpr_pattern_fill_keys. The log includes AGC graphics: queued index read: the image write left no pending result to order against and AGC graphics: the dispatch completed 17 times without a pending write over the keys. The prior author note says some failures also occur on a libc-only tree, but this run has no main comparison job, so it does not establish which failures are baseline. The PR head has since moved to fced1e17 on current main; please update the Tested section with this completed result and rerun the focused UINT/graphics tests on the exact current head, with the same tests on current main to classify existing failures. The latest hosted PR checks are policy checks only; Linux/Windows product jobs are skipped.

@MarcZX10

Copy link
Copy Markdown
Contributor

I rechecked the current head fced1e175d62943078ca3645d2ca278fe1401698. The UINT resolve regression is still present: DecodeColorFormat now assigns ColorExportPacking::Uint, but DecodeColorMetadataPass still rejects every source whose packing is not None at the CB resolve guard. That changes the previously accepted UINT resolve path. Please restrict this guard to the word-packed formats (for example WordPacked(source.packing)) and add the UINT-source resolve regression case; the corresponding fix was also identified in the outstanding review above.

The requested exact-head test evidence also remains incomplete: the last downloaded fork run failed four tests, including agc_driver_graphics, and its log does not establish which failures are baseline. The current hosted PR checks are policy checks, with product jobs skipped. I cannot build/run locally here because the filesystem is full. Please report a strict focused run on this head and the same focused tests on current main, with the ctest failure exit preserved and the unexplained test-context change identified. This is a correctness and test-evidence blocker, unrelated to PR volume.

1 similar comment
@MarcZX10

Copy link
Copy Markdown
Contributor

I rechecked the current head fced1e175d62943078ca3645d2ca278fe1401698. The UINT resolve regression is still present: DecodeColorFormat now assigns ColorExportPacking::Uint, but DecodeColorMetadataPass still rejects every source whose packing is not None at the CB resolve guard. That changes the previously accepted UINT resolve path. Please restrict this guard to the word-packed formats (for example WordPacked(source.packing)) and add the UINT-source resolve regression case; the corresponding fix was also identified in the outstanding review above.

The requested exact-head test evidence also remains incomplete: the last downloaded fork run failed four tests, including agc_driver_graphics, and its log does not establish which failures are baseline. The current hosted PR checks are policy checks, with product jobs skipped. I cannot build/run locally here because the filesystem is full. Please report a strict focused run on this head and the same focused tests on current main, with the ctest failure exit preserved and the unexplained test-context change identified. This is a correctness and test-evidence blocker, unrelated to PR volume.

@rooklz

rooklz commented Oct 22, 2026

Copy link
Copy Markdown
Contributor Author

@adriadam10 @MarcZX10 head fced1e175d (rebased onto f6075c2f4a) is the version the description now describes, and the hosted run on it fails the job on any ctest failure: https://github.com/rooklz/AnyPS5/actions/runs/39864295356. Its failures.txt is agc_driver_sgpr_pattern_fill_keys alone, which main at f6075c2f4a also fails on that runner (base side of https://github.com/rooklz/AnyPS5/actions/runs/39845397298); agc_driver_graphics, agc_driver_graphics_maps_fallback, agc_driver_uint_color_target and the packed-target and recompiler tests pass.

What changed since 81d67188b6, each found by the runs in turn:

  • SelectExportPacking packs a word only for Unorm10_11_11 and Float11_11_10; a Uint target gets the colour through and the existing retype bitcasts it. This is the fix for the 0x00000001 readback.
  • The blend drop for Uint targets moves after the blend decode. hdrComponentSwapTests expects the blend constants of a 16-bit UINT target to be swizzled with the export, which the decode does before blendEnable is cleared.
  • float11_11_10TargetTests used 3 as its invalid packing value; that is Uint now, so it uses 4.
  • uintTargetTests sets the four blend-constant registers it enables blending against, and turns blending off for its UINT16_ABGR case, which the existing blending into an unsigned integer target is unsupported rule rejects.

The graphics decode test also passes in both modes in a Linux container (Ubuntu 24.04, GCC 13.3) with this diff on main a6dcea9279. On macOS the two titles and the two packed-target execution tests were re-run on the corrected emitter with the same results as before, which the description now states explicitly.

@github-actions github-actions Bot added the build label Oct 23, 2026
@github-actions github-actions Bot added shader core/shader docs agc libSceAgc* labels Oct 23, 2026
@rooklz
rooklz force-pushed the fix/agc-uint-color-export branch from fced1e1 to f9b349a Compare October 23, 2026 08:18
@rooklz

rooklz commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

@adriadam10 @MarcZX10 the resolve guard is fixed in head f9b349a056: DecodeColorMetadataPass now refuses only WordPacked(source.packing) sources, as the DCC check does, so a resolve of a UINT target decodes as it did on main, and the resolve tests gain a case that sets number type UINT on both buffers and expects a Resolve pass whose source carries the Uint packing. The description's What and Tested sections cover both.

On the test evidence: the context[0x105..0x108] line in uintTargetTests answers AGC graphics: missing register in context bank at DWORD 0x105 (261), and the words.context[0x1e0] = 0 line answers AGC graphics: blending into an unsigned integer target is unsupported; both came up once the blend decode stopped being skipped for UINT targets, and both are the registers the other decode tests set for the same reason. The run that fails the job on any ctest failure is https://github.com/rooklz/AnyPS5/actions/runs/39864295356 on fced1e175d: one failure, agc_driver_sgpr_pattern_fill_keys, which main at f6075c2f4a fails on the same runner (base side of https://github.com/rooklz/AnyPS5/actions/runs/39845397298, where agc_driver_queued_index_read_order also fails on both sides).

GitHub has disabled Actions on my fork since then, so the current head is covered by a container run instead: Ubuntu 24.04, GCC 13.3, Release, llvmpipe, this head's diff on main a6dcea9279. agc_driver_graphics_tests passes plain and with --maps-fallback, and agc_driver_uint_color_target_tests, agc_driver_packed_float_color_target_tests and agc_driver_packed_unorm_color_target_tests pass, each run directly with its exit status checked. I'll rerun the hosted job on this head when Actions is back.

@valenciana-nc

Copy link
Copy Markdown
Contributor

Independent Windows/NVIDIA validation of head f9b349a056af885ef2f3142d2195e8c959f73c78, merged cleanly into main c383e3772be19e6f9139f1a620d37569981614ac (local integration 7c9b4cdc69b128ece0b50526f3d324f58433d431). No implementation changes from me.

Host: Windows 11 x86-64 26300.9711, Core i7-13650HX, NVIDIA GeForce RTX 4060 Laptop GPU, driver 610.62, WinLibs GCC 15.2.0 r7, Release, BUILD_TESTING=ON. On AC; the internal display reports 1920×1200 at 165 Hz. Vulkan validation is Khronos nightly 0fd41425506a16356d4ae15b13911f99589b7107 (manifest API 1.4.365); loader logs confirm its DLL is inserted into the instance and device.

Focused tests

Built actual libs and the focused targets. Both sides used:

ANYPS5_GPU=NVIDIA GeForce RTX 4060 Laptop GPU
ANYPS5_REQUIRE_VULKAN=1
ANYPS5_NO_SHADER_CACHE=1
VK_INSTANCE_LAYERS=VK_LAYER_KHRONOS_validation
VK_LAYER_PATH=<downloaded Khronos Windows layer directory>
VK_LOADER_DEBUG=layer
  • Unmodified main: ctest --test-dir build -R '^agc_driver_(graphics|packed_(float|unorm)_color_target)$' -V: 3/3 passed, exit 0, 13.50 s.
  • Main + this PR: the same three tests plus agc_driver_uint_color_target, --repeat until-fail:3 -V: 4/4 passed, each three times (12 passes), exit 0, 26.97 s.
  • Both logs have no VUID- messages, no Validation Warning/Error messages, and no missing-layer diagnostic. This is a Windows run; the Linux-only maps-fallback test was not run.
  • Conventions against synchronized origin/main and git diff --check pass. No full CTest suite, Linux/macOS, console, or Doom 3 BFG run by me.

ccleste A/B

Release 1.00, PPSA59322, content version 01.000.000. ZIP SHA-256 verified against the published asset digest: 96861b81c1fbaac818080d1bf958b575e6b44d2c258684e1931f2940cee2fb43. Unwrapped the released executable and its GPL platform libc.prx, converted with --windows --to-intel --registry, and staged the original assets and converted guest module. Import audit: 0 absent, 5 throwing import entries (not demonstrated runtime stops).

The executable, guest module and all other system libraries are hash-identical between the two runtimes: only libs/libSceAgcDriver.prx differs. PR-library SHA-256: 64b76ae4eff25a8eedb64a01cf665978f8c7ba9f7dbf6a31ea9875299b871aa2.

Both use the settings above plus APS5_NO_PAD_INPUT=1, APS5_PAD_INPUT_FILE=<run>/pad.txt, SDL_AUDIODRIVER=dummy, APS5_PROFILE_DRAW=1, APS5_LOG_TIMESTAMPS=1, APS5_TRACE_SUMMARY_EVERY=10, APS5_TRACE_DIR=<run>, APS5_DUMP_FRAMES=6, APS5_DUMP_FRAMES_EVERY=600, APS5_DUMP_SCALE=4. Application shader cache disabled; driver cache uncontrolled. After four seconds, the harness queues the same timeline: Cross at +5 s (250 ms), Right +9 s (900 ms), Right+Cross +10 s (250 ms), Cross +12 s (250 ms), Square +14 s (250 ms), Options +20 s (1800 ms). Times are relative to timeline consumption, not process launch.

Order Runtime Wall time Exit Output-mismatch warnings
A main 25.52 s 0, natural 6
B main + PR 25.78 s 0, natural 0
B main + PR 25.45 s 0, natural 0
A main 25.65 s 0, natural 6

All four reach the first level; captured display readbacks show the player in different positions after the scripted movement/jump inputs. Options hold exits normally before the 40 s cap. Main renders on this NVIDIA driver but emits:

Validation Warning: [ Undefined-Value-ShaderFragmentOutputMismatch-DynamicRendering ]
vkCmdDraw(): ... Location 0, "out_mrt_0" ... numeric type of FLOAT ... VK_FORMAT_R8_UINT (numeric type of UINT) ... resulting values written will be undefined.

The PR removes those warnings in both runs, with no Validation Warning/Error or VUID messages. No fatal or driver failure in any of the four runs. This is a Vulkan-correctness/portability result, not a newly playable title or performance improvement: main already reaches this first level on NVIDIA.

Two earlier main runs are excluded from that four-run comparison: a 25 s no-input run, and a 35 s run whose timeline was incorrectly queued before startup and therefore ignored as stale. Both were harness-terminated, not natural exits. The harness was corrected before the table's runs; no runtime code was changed for input.

Audible sound, physical controller, motion/rumble, longer gameplay and console semantics were not tested. Audio uses the dummy backend. Logs/readbacks are retained locally; this report is measured data plus frame inspection, not a claim to have reproduced the MoltenVK failure on NVIDIA.

AI-assisted execution, log/frame inspection and report: yes.

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 23, 2026
@rooklz
rooklz force-pushed the fix/agc-uint-color-export branch from f9b349a to 05a8481 Compare October 23, 2026 15:55
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 23, 2026
@rooklz

rooklz commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

@valenciana-nc thank you, that is the NVIDIA data this PR lacked and it answers the "GPUs tested" line: the four tests passing 3 of 3 under the validation layer with no message, and ccleste on main logging six ShaderFragmentOutputMismatch warnings for the float output into R8_UINT that this change removes, with the title reaching the same point either way. The description's Tested section and GPUs-tested line now cite your run.

Rebased onto current main (15e71dbe11): head 05a84816f6, same diff; the only conflict was the debt file, where main added a GPU allocation recovery entry next to this one, and both are kept. Hosted run on this head: https://github.com/rooklz/AnyPS5/actions/runs/39982371741 (Ubuntu 24.04, GCC, Release, lavapipe, fails the job on any ctest failure): its failures are agc_driver_queued_index_read_order and agc_driver_sgpr_pattern_fill_keys, which main fails on that runner (base side of https://github.com/rooklz/AnyPS5/actions/runs/39845397298); the agc_driver_pipelined_fill failure of the previous head's run did not repeat, and every targeted test passes.

@github-actions github-actions Bot added the needs rebase Conflicts with main, rebase needed label Oct 23, 2026
@rooklz
rooklz force-pushed the fix/agc-uint-color-export branch from 05a8481 to f23f7dc Compare October 23, 2026 19:16
@github-actions github-actions Bot removed the needs rebase Conflicts with main, rebase needed label Oct 23, 2026
@rooklz

rooklz commented Oct 23, 2026

Copy link
Copy Markdown
Contributor Author

Rebased onto current main (d7948b09f9) over #8563, which adds the Unorm4_4_4_4 packing kind: head f23f7dcd90. The six conflicts were the enum (Uint is now the last enumerator, after Unorm4_4_4_4), the two bounds checks on it, PackedColorTargetName, the test list and SelectExportPacking, where the packed word is now chosen for the three packed kinds and Uint still passes the colour through; WordPacked includes Unorm4_4_4_4, so #8563's rules (no partial writes, blend, DCC or resolve on it) are unchanged, and the invalid-packing test value moved past Uint. Hosted run https://github.com/rooklz/AnyPS5/actions/runs/40010114899 (Ubuntu 24.04, GCC, Release, lavapipe, fails the job on any ctest failure): agc_driver_graphics in both modes, agc_driver_uint_color_target, the three packed-target execution tests (4_4_4_4 included) and the recompiler tests pass; the two failures, agc_driver_queued_index_read_order and agc_driver_sgpr_pattern_fill_keys, are main's on that runner.

@adriadam10 adriadam10 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-checked on the current head: the code stands as reviewed (CB resolve guard, UINT-source resolve case, serializer and specialization bounds, debt entry), and valenciana-nc's Windows/NVIDIA run covers the draw path. The merge queue refuses it only because of @MarcZX10's open change request (2026-10-22 16:30), which his later comment does not clear and our approval cannot override. The point still open:

  • core/libs/prx/libSceAgcDriver/tests/execution/UintColorTarget.cpp:225 (TargetTests): the execution test draws only a 32_R export (Word32Export) into tiled and linear R32_UINT. The description and the debt entry say 32_GR, 32_AR and 32_ABGR exports are stored as raw bits too, and the ccleste case is an R8_UINT target; both are covered only by decode assertions. Either add execution cases for those exports (bit-exact read-back of each exported channel, plus a 32-bit export into an R8_UINT target with the expected channel conversion) or narrow the claim in the description and the debt entry to what the test pins.

Once that is pushed, please ping @MarcZX10 for a re-review so the request is cleared; the rest is ready to merge.

This branch has not been deployed

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

Labels

agc libSceAgc* build docs fix error Closes an issue (Fixes #N) shader core/shader unblocks title Names a title ID on the Unblocks line

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AGC: a raw 32-bit float export into a UINT color target fails pipeline creation on MoltenVK (Doom 3 BFG, ccleste)

4 participants