Physical frame indices in selective-copy regression
The pre-existing selective_frame_copy_does_not_touch_inactive_fields
regression supplied payload-local indices to storage APIs that require physical
frame indices, including the seven reserved invocation/token fields.
Its float3 write at payload index 3 actually targeted physical field 3
(dispatch_size_x). For the four-slot AoS test, the address was
3 * 64 + 12 = 204, violating float3’s 16-byte alignment. HIP happened to
execute this invalid test; fallback’s explicit alignment check rejected it.
The complete frame-layout test source otherwise differs from the published
baseline only by stream-submission spelling.
The correction consistently adds CoroFrameDesc::reserved_field_count to
the selected field list and all field accesses. Expected data is unchanged;
neither frame layout nor backend alignment rules are weakened.
Evidence: /var/tmp/psycles-coro-resume-8fNIXm.
sdk-fallback-test_coro_soa_layout.log: original rejection at byte 204.layout-green-fallback.log: corrected complete executable passes.clean-hip-test_coro_soa_layout.logandclean-fallback-test_coro_soa_layout.log: isolated candidate source and headers, all 13 tests and 126 assertions pass on each backend.