Repository navigation
fix(agc): decode cube descriptors with slices past their last whole cube - #7533
hugodearaujo wants to merge 1 commit into
Conversation
|
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.
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.
|
|
Intel and AMD Windows data: with this PR the 68 tests from Windows 11 Pro 26300, WinLibs GCC 15.2.0 r7, Release, every execution test built,
I also ran full CTest with this PR and the 14 other open AGC PRs I tested in the same batch merged together (#7647, #7641, #7630, #7627, #7603, #7600, #7591, #7579, #7535, #7474, #7462, #7050, #7048, #7650). Neither GPU showed a failure beyond AI-assisted: yes (Claude Code) |
|
@savvaniss Thanks, that's the cross-vendor data this needed, and the without-PR run is a good control. I added it to the Tested section. |
|
NVIDIA data to go with the AMD and Intel runs: GeForce RTX 4090, driver 617.42, Windows 11 Pro 26200, WinLibs GCC 15.2.0 r7, Release,
AI-assisted: yes (Claude Code) |
|
@MaxLikesCode Thanks, that adds the NVIDIA run this PR was missing. I added it to the Tested section. |
What
A cube texture descriptor whose range,
BASE_ARRAYtoDEPTH, holds six slices or more but not a whole number of cubes threw (does not contain a multiple of 6 array slices). It now decodes with every slice of that range, and the views a sampled texture is made of (the snapshot of guest memory, the view of a storage image, and its depth and repacked copies) hold them all.DEPTH, so the slices past the last whole cube are kept.Title
Assassin's Creed Mirage (PPSA13960, 01.007.000), with #6343 and #7532 applied, binds this cube to compute shader
0x1000b28c00: R32_FLOAT, 128x128,SW_64KB_S,BASE_ARRAY0,DEPTH6.The shader samples it once (
image_sample_lzwithdim:SQ_RSRC_IMG_CUBE), taking the face fromv_cubeidwith no array index, so it reads faces 0 to 5 of the first cube. It writes the result to slices12(its z group) of a six-slice R8 2D array.On
mainthe dispatch throws:Runs on
main0d078f75dwith onlylibSceAgcDriver.prxdiffering, both with the title's shaders compiled by an earlier run:main: that error.This PR: past it, then the next unimplemented path. feat(agc): preserve initial native multisample color contents #6973, feat(agc): snapshot resident multisample color bytes #6987, feat(agc): publish completed native color snapshots #6989, feat(agc): publish native color before guest memory reads #6995 and feat(agc): publish native color for read-only shader buffers #7002 change that path.
Tested
agc_driver_graphics: a cube descriptor withBASE_ARRAY0 andDEPTH6 decodes with seven slices, and its surface holds them.DEPTH4 still throws. It fails onmain.agc_driver_recorder_tests --cube-only(RADV): 64x64 cubes with seven slices, each slice filled with its own value, are sampled at every slice through the four views: the snapshot and the storage view of an R8 cube, the depth copy of an R32_FLOAT cube and the repacked copy of a format 43 cube. It fails onmainwith the error above, and with the check of the depth or the repacked copy as onmainit fails at that copy.-j8, 1437 of 1438 pass.agc_driver_tessellationsegfaults the same way without this PR.BUILD_TESTING=ON, no GPU: full CTest, no failures out of 1478;agc_driver_gated_dispatch_capture_short_timeoutis skipped there.mainf305942. The 68 tests fromtests/Recorder.cppandtests/GuestTextureResource.cpppass on the RX 9070 XT, and 61 pass with 7 import-settle tests skipped on the UHD 770; with only this PR's test files onmain,agc_driver_graphicsfails on both with the 7-slice cube refusal.mainad502d7.agc_driver_recorder_tests --cube-onlypasses 3 of 3, andagc_driver_graphicsand the cube teststools/select_tests.pyreaches pass; of the 975 tests it selects, 957 pass, 15 skip and 3 fail, the same 3 that fail onmainon that GPU (agc_driver_bda_device times out in vkWaitForFences since the BDA anchor lookup (#5859, d422c760c) #7584, agc_driver_image_table_reuse fails on Windows since #6346: the Windows-only CpuWriteResolutions is stale #7710, AGC: agc_driver_pixel_lds loses the device on its wave32 bounded draw on an RTX 4090 (Windows) #7708).tools/check_conventions.pypasses.tools/pr_overlap.pylists perf(agc): import adjacent host ranges as aligned blocks and stop re-trying budget refusals #6457, perf(agc): take the host import budget from the device's memory budget #6479 and perf(agc): remember an evicting import request's budget refusal until it could succeed #6730: they change the technical debt entry on the line above the cube entry, so a merge with any of them conflicts on those two adjacent lines ofdocs/dev/debt/libSceAgcDriver.md. No code overlaps.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)🤖 Generated with Claude Code