Skip to content

fix(shader): support measured 2D accesses to 1D images - #10

Draft
p3n1cillin wants to merge 7 commits into
codex/image-interface-diagnosticsfrom
codex/planar-line-images
Draft

p3n1cillin wants to merge 7 commits into
codex/image-interface-diagnosticsfrom
codex/planar-line-images

Conversation

@p3n1cillin

Copy link
Copy Markdown
Owner

What

Ordinary DIM2D image loads/stores against a 1D T# currently fail with an incompatible static runtime image interface. Add a 1D interface only when every access uses full DMASK 0xf, 32-bit data/addresses, ordinary load/store without mip, sampling, gather, packed/BY access, R128 or atomics. Bind it only for non-array 1D R32_FLOAT/RGBA32_FLOAT descriptors with identity destination selectors and one level/layer. Other forms still throw.

Native gfx1036 measurements show these accesses use X and ignore Y, including negative/nonzero Y, with zero loads and no writes for X outside the width. Existing 1D coordinate emission implements this behavior. Native identity R32_FLOAT reads and point samples repeat R in all four channels; correct the 1D sampled view mapping accordingly.

Serialize the access eligibility flag and bump the disk-cache format. Add independent GPU execution coverage for the native results, matching DIM1D controls, storage writeback, unchanged padding, descriptor-independent shader caching and unsupported access rejection. Keep diagnostic fixture coverage for unsupported integer formats.

Depends on #8. The branch is based on current main d70b899 plus that diagnostic PR. Changes were written with AI assistance.

Semantics and native measurements

Windows 11; integrated AMD Radeon(TM) Graphics, gfx1036 RDNA2, AMD driver 32.0.21042.62; installed HIP 5.7/runtime 50732000 and COMGR API 2.5. Independent homebrew AMDGCN assembly used tools/hw-oracle/template.s with wave64, IEEE=0, DX10_CLAMP=1, DENORM32=0, DENORM16=3, ROUND32/16=0 and FP16_OVERFLOW=0. An integer-add control passed first.

16 groups / 144 cases checked formats 22 and 77, widths 1 and 8, DIM1D and DIM2D ordinary loads and single-lane stores, linear 1D descriptors, full DMASK and identity selectors. Loads checked X=(0,width-1,width,-1) and Y=(0,1,-1). Stores checked (0,0), (width-1,0), (width,0), (-1,0), (0,1), (0,-1), comparing the independent allocation after synchronization. Eight additional in-bounds 1D R32_FLOAT point samples confirmed the channel mapping. No gfx1013/PS5 or tiled native measurement is claimed. Existing texture layout handling is unchanged.

Reproduction instructions and selected results are recorded in issue #9. No game shader, game capture, AMD runtime DLL or proprietary data is included in this PR.

Tested

  • Windows 11, GCC 15.2, Release Ninja build: full build passed.
  • RTX 5070, NVIDIA 617.42: full CTest suite, 507 passed / 0 failed / 1 intentional no-Vulkan skip, 144.67 seconds sequentially. The final additional rejection cases also passed the focused three-test suite.
  • New execution test: 0.46 seconds warm; initial cold-cache run 1.53 seconds. Native expected results, matching instruction controls, CPU writeback and full allocation comparison passed.
  • Shader-memory and shader-disk-cache tests passed, including serialized eligibility metadata.
  • All 12 independent offline load/store requests compile, including four dimension-mismatch requests that previously failed. The private ASTRO BOT startup request compiles offline. This is compilation evidence; gameplay and 60 FPS are not established.
  • tools/check_conventions.py --base codex/image-interface-diagnostics passed.

Checklist

@p3n1cillin

p3n1cillin commented Oct 9, 2026 •

Copy link
Copy Markdown
Owner Author

Integration validation: astrobot-local 4944a6a (the measured compatibility change plus integration cache format 22), full build / 116 runtime PRXs, CTest 518 passed / zero failed / one intentional skip of 519 in 25.89s with eight workers.

A private ASTRO BOT v01.007.000 boot run passed the previous startup request and recorded its selected dispatch with groups 1,1,1 and 13271 SPIR-V words. It then failed at another DIM2D-to-1D sampled-image interface, source 3 / firstUsePc 760, before any completed presentation. The monitor stopped the aborted process and retained logs, request files, timings and hardware/thread telemetry. This establishes progress beyond the former stop; it does not establish the original dispatch's visual correctness, gameplay or FPS.

All 20 preserved compute requests replay successfully with the current integration replay tool (format 22). The graphics request at the new failure was not preserved by the old draw-capture path. Follow-up diagnostic #11 retains partial memory and the failing graphics request. The new access form/format remains unknown until that capture is collected; the compatibility gate is not being broadened without measurement.

The run had no frame interval samples, so no FPS comparison is available. Across 41 hardware samples / 204.74s, peak process working set was 23621.9 MiB, private memory 4714.0 MiB, and sampled NVIDIA device memory 2273 MiB. These are instrumented boot measurements, not gameplay/performance claims. No game data is included in this comment.

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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants