Skip to content
This repository was archived by the owner on Oct 28, 2026. It is now read-only.

fix(agc): treat other-shaped storage views of a depth surface's memory as reused memory - #27

Closed
AlxcBTW wants to merge 2 commits into
mainfrom
fix/depth-storage-other-extent
Closed

AlxcBTW wants to merge 2 commits into
mainfrom
fix/depth-storage-other-extent

Conversation

@AlxcBTW

@AlxcBTW AlxcBTW commented Oct 10, 2026

Copy link
Copy Markdown
Owner

What

Taxi Chaos 2 (PPSA30279 v01.007.000, Unreal Engine) ends in its first menu frame:

compute shader 0x1a80598000: AGC graphics: storage image access to depth/stencil surface 0x30b6aa0000 is not implemented

The compute pass binds a 2048x2048 R11G11B10 storage image at the address of a 512x512 D32S8 surface the title rendered earlier. Engines alias transient targets, so this is the memory being reused, not a storage view of the depth plane. cachedStorageTexture refused every storage view whose address matched a depth or stencil plane.

A storage view whose extent differs from the newest depth surface at its address (same device) now takes the ordinary storage path. That is the rule boykopovar#1495 applies to sampled views. A view with the surface's own extent keeps throwing, as before.

The same shape is reported for 007 First Light in boykopovar#2523: a 512x1024 R16G16B16A16_SFLOAT storage view over a 128x128 D16 surface. A 128x128 R32_SFLOAT view of that surface, also reported there, has the surface's extent and still throws.

Related:

Tested

Windows 11, WinLibs GCC 15.2.0 r7, Ninja Release, RTX 5070 Laptop (NVIDIA 616.92).

Checklist

  • Based on current main; no other open PR implements the same functions
  • One topic per PR; follow-ups go in a new PR
  • No comments in code except technical debt
  • Unimplemented paths throw (NotImplemented_nid_no_patch); silent stubs are listed in TechnicalDebt
  • No notes, investigation .md files or images added to the repository
  • New third-party code is a submodule built from source
  • Generic behaviour, not specific to one title
  • Depends on: none
  • AI-assisted: yes (Claude Code)

🤖 Generated with Claude Code

AlxcBTW and others added 2 commits October 10, 2026 22:02
…y as reused memory

Engines alias transient targets, so a compute pass can bind a storage
image over memory that a depth surface used before: Taxi Chaos 2 binds a
2048x2048 R11G11B10 storage image at the address of a 512x512 D32S8
surface in its first menu frame. cachedStorageTexture refused any
storage view whose address matched a depth or stencil plane and the
frame aborted with "storage image access to depth/stencil surface ...
is not implemented".

A storage view with another extent than the depth surface at its
address is now memory reuse and takes the ordinary storage path, as
boykopovar#1495 does for sampled views. A view with the surface's own extent keeps
throwing.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
agc_driver_depth_surface_storage_reuse registers a 128x128 D16 surface
on a Vulkan device and looks up storage images at its address. A
512x1024 R32F view is made as an ordinary storage image; a 128x128 R32F
view still throws "storage image access to depth/stencil surface". With
the address-only check the first lookup throws.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@AlxcBTW

AlxcBTW commented Oct 11, 2026

Copy link
Copy Markdown
Owner Author

Covered by boykopovar#2904, which handles the other extent and the format.

@AlxcBTW AlxcBTW closed this Oct 11, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant