Repository navigation
Description
Title
Dragon Quest III HD-2D Remake (PPSA20612), content version 01.000.000.
Commit
Seen on 979ad7b6aaa0a3e0df120586230193e6f9a055b5. main has since moved and this was not repeated there. #4449 was not applied. The source tree for that boot was clean main.
What the window shows
The title screen draws the castle and the logo. Continue from Autosave reaches the Triangle skip prompt. After the skip, a later frame is in game: the camera is down on a green floor, and there is no player character, no other character, and no interface. The floor is a dithered smear. The window title was about 1.6 FPS. Nothing was thrown while that picture was up.
The screenshot of that frame could not be attached from this login (the attachment upload returned 404).
Log
The bad picture itself is not an exception. About 17 minutes in, the process aborted:
radv/amdgpu: Not enough memory for command submission.
[device-fault] result 0:
terminate called after throwing an instance of 'std::runtime_error'
what(): AGC graphics: vkQueueSubmit recorder: Vulkan result -4
Vulkan result -4 is VK_ERROR_DEVICE_LOST.
Why the picture is wrong
This boot could not import the guest GPU ranges, so it copied them.
On this APU (Radeon 760M, the large heap is device-local, 14.9 GiB RAM) importBudget() comes out near 669 MiB unless APS5_HOST_IMPORT_MIB is set. Refused imports become copies. Without that switch the boot dies on the copy cap. With only the budget raised, the same tree still dies on the small ranges:
FATAL: an address-based build copies 72 MiB of 1151 registered ranges, past 64 MiB (APS5_ADDRESS_COPY_MAX_MIB)
Raising the cap to 256 MiB died later at 296 MiB of 4735 ranges. The in-game boot set APS5_ADDRESS_COPY_MAX_MIB=4096, so those copies were allowed and the scene came up. A copy is a snapshot. Guest writes after it, including the textures the characters are drawn from, are not in the snapshot the GPU samples. That matches a floor made of noise and characters that are not there, with no throw from the graphics code. The same copies fill GTT until RADV cannot submit.
#4449 is the open change that imports a scattered direct-memory range as one dma-buf run list instead of copying each piece. It is still open and it conflicts with current main. It was not in this boot.
How it was run
Nobara Linux, kernel 7.2.6-201.nobara.fc44, Ryzen 5 7640U, Radeon 760M (RADV PHOENIX, PCI 1002:15bf), Mesa 26.2.3. udmabuf size_limit_mb was 2048. APS5_NO_LEASE_MIRROR was not set. No APS5_PROFILE_* or APS5_TRACE_*.
APS5_HOST_IMPORT_MIB=8192 APS5_ADDRESS_COPY_MAX_MIB=4096 DISPLAY=:0 XDG_RUNTIME_DIR=/run/user/1000 SDL_VIDEODRIVER=x11 ./eboot.elf
Not in this boot
Texture, image-table, and storage-write fixes landed after 979ad7b6a, including #5760, #5321, #5522, #5446, #5113, #5030, #4841, #4475, #757 and #758. They can change what a texture or a depth surface samples. They do not replace the run-list import. This report does not say the picture is still wrong once those are built.
Related
- Dragon Quest III HD-2D Remake (PPSA20612) #5625
- feat(libSceAgcDriver): import scattered direct memory as a dma-buf run list and probe its coherence #4449
- feat(agc): import shared ranges above 64 MiB as sparse buffers over udmabuf chunks #5309, merged, the sparse import for one range larger than 64 MiB
- Linux: one dma-buf import larger than udmabuf size_limit_mb (default 64) fails UDMABUF_CREATE #5329, closed with that merge; the 1151-range copy is the separate stop
AI-assisted: yes
Activity
darklinkworker commentedon Oct 14, 2026