[Docs] (Disaggregated): record repaired Magma gameplay and rotated window verification

This commit is contained in:
2026-09-20 03:38:44 -04:00
parent 38919d453b
commit 0e4afb624f
6 changed files with 131 additions and 17 deletions
+7 -5
View File
@@ -3,12 +3,14 @@
> 2026-09-20。交付 worktree:
> `C:/Users/geekerwan/AndroidStudioProjects/FoldCraftLauncher/MobileGL-disagg`,分支 `feat/disaggregated`。
> 完整结果见 [close-report.md](close-report.md),设备见 [device-report.md](device-report.md),
> 阶段终审见 [close-review.md](close-review.md)。最终行为验收头 `cfca93c7`,之后仅文档/复现工具。
> 阶段终审见 [close-review.md](close-review.md)。原 P5f 行为验收头 `cfca93c7`;
> 后续 Magma 游戏修复的行为头为 `38919d45`,见下。
>
> **FCL 游戏补测(2026-09-20)**:源码 `aa78f102` 已编入并安装 `.mgdebug.debug` FCL,
> MC `26.3-rc-3` 的 GLES inproc / monolith 与 Magma monolith 各完成至少60秒世界运行;
> **Magma inproc 真失败于 P7 `buffer-legacy-arm`,尚不能跑该游戏**。
> 见 [fcl-e2e-report.md](fcl-e2e-report.md),不要将前面的公开 GL runner 当成 FCL E2E。
> **Magma inproc 游戏修复(2026-09-20)**:已补 server buffer consumers 与 Android quarter-turn
> color blit。`38919d45` 的 `.mgdebug.debug` FCL 在 MC `26.3-rc-3` 世界 `test` 上,
> Magma inproc、GLES inproc 和 Magma monolith 均完成至少60秒运行与人工验图。
> Magma inproc 仍 lockstep、约20 FPS;不是 P7 全量完成。见 [修复报告](magma-inproc-fix.md)。
> 旧 [fcl-e2e-report.md](fcl-e2e-report.md) 保留 `aa78f102` 的真实失败,不代表当前结果。
## 0. 当前结论
+4 -3
View File
@@ -8,9 +8,10 @@
包含 Windows 收口头 `c42577a4` 的全部修复;之后仅补文档与设备复现工具。
交付分支为 `feat/disaggregated`。包提交与环境入口见 [HANDOFF-P5F.md](HANDOFF-P5F.md)。
用户随后要求的 [FCL 游戏端到端补测](fcl-e2e-report.md) 已实际执行:GLES inproc / monolith
与 Magma monolith 可进入 MC `26.3-rc-3` 世界并稳定运行;Magma inproc 真失败于 P7
`buffer-legacy-arm`。本文的 P5f 完成不表示完整 Magma 游戏 split 工作负载已经可用。
用户随后要求的 [首次 FCL 游戏端到端补测](fcl-e2e-report.md) 暴露 Magma inproc 的 P7
`buffer-legacy-arm`。后续 [Magma 游戏修复](magma-inproc-fix.md) 补齐 buffer consumers 与
Android 旋转 blit,`38919d45` 已在同一 MC `26.3-rc-3` 世界正常运行。本文余下数字保留原
P5f 收口快照;最新修复没有宣称 P7 全量迁移或 Magma run-ahead 已完成。
## 1. 完成的行为
@@ -1,5 +1,8 @@
# P5f FCL / Minecraft 端到端补测
> 本文是 `aa78f102` 的历史失败记录。后续 `38919d45` 已修复应用 buffer 消费及 Android
> 90° window blit,Magma inproc 已能正常进入同一世界;见 [magma-inproc-fix.md](magma-inproc-fix.md)。
2026-09-20,Redmi `2f7cbe2e`,FCL `com.tungsten.fcl.mgdebug.debug`,Minecraft
`26.3-rc-3`,现有单人世界 `test`。此前 [device-report.md](device-report.md) 是公开 GL
像素 runner,不是 FCL E2E;本文是用户要求后新增的真实游戏测试。
@@ -0,0 +1,107 @@
# Magma inproc 实际游戏修复
> 当前行为头 `38919d45`,分支 `codex/magma-inproc`;本报告记录 P5f 后的实际游戏补修。
> Redmi Magma inproc 已通过运行与人工图像检查;同 APK 的 GLES inproc 与 Magma monolith 复跑、最终 G1/G2/G14 均已通过。
> 功能修复、主机门与真机验证完成;保留以下性能和功能边界,未宣称 P7 全阶段收官。
## 1. 问题与修复范围
P5f 原设备门验证的是公开像素子集,Magma 的应用 buffer 路径仍具名拒绝。
Minecraft 26.3-rc-3 真正需要 VBO/EBO、UBO range、persistent writes 和 indirect draws;
因此“原像素门通过”不能推出游戏可用。本轮按用户要求补上这些 server record 消费路径。
`VkBufferManager` 新增按完整 `{slot,gen}` 管理的 server buffer storage 和 resource ops,
实际发布 buffer consumer bit。SubData 原位更新;busy store 使用 staging copy 或等待后精确
写入,不拿 client 旧影子覆盖 GPU 结果。GPU-written / readback 走已有反向事件,persistent
map 保持 client-owned T2 emulation,不把 server 映射地址交给 client。
vertex/index 绑定从 wire VAO、逐属性 buffer records 和 server slices 解析,支持现有
格式转换、offset/stride、base vertex/instance;indirect 与 line-loop 消费 server buffer 字节。
UBO/SSBO/atomic/texel descriptors 从记录的 handle、range 和 program reflection 解析;
短 UBO 先零填完整反射块,再只复制绑定 range 内的 GPU 字节,避免 range 外毒值进入 shader。
Magma 继续不发布 `kCapRunAheadApply`,仍按 lockstep 生命周期运行。真实 bootstrap 单测同时
检查 resource ops 与 consumer bits,不能把“支持 buffer”误写成“支持 run-ahead”。
## 2. 保留中间失败证据
最初将 17 条新 buffer 用例接到旧实现,**构建成功、17 条实际全红**,主要在旧 buffer 守卫
abort。日志 `magma-buffer-baseline-red.log/xml` 保留;没有先改成弱断言来获得绿灯。
`31dc1a73` 修好 buffer 后,17 条门、unit/GPU 都绿,手机也能进世界,**但设备结果 NOT PASS**:
画面左半黑、右侧约 90° 旋转,并有条纹和彩噪。该阶段证据保存在
`C:/Users/geekerwan/.codex/tmp/magma-inproc-fix/Magma-inproc-31dc1a73-run/`,不能由后续成功覆盖。
根因是 wire color blit 将 logical `2620×1280` 矩形直接写入 native `1280×2620`、
`ROTATE_90` swapchain。monolith 的旧 shader 路线曾处理该转换,wire 路线没有继承。
`38919d45` 加入纯 native Vulkan shader blit,使用 server-owned shader/pipeline/descriptors,
覆盖 identity/90/180/270,按 native viewport 绘制,并正确处理 GL scissor 和反向矩形;
没有恢复前端 ShaderObject/ProgramObject,也没有添加 test-only transform 开关。
## 3. 主机门与阴性对照
| 门 | 已取得结果 / 适用代码 |
|---|---|
| buffer + default-blit 严格车道 | **19 PASS / 0 skip / 0 failed**;role-split=1、strict=1;原17条全部保留。 |
| unit,`31dc1a73` | **2311:2301 PASS / 10 既有 skip / 0 failed**。 |
| 最终 integration-gpu | **1387:1119 PASS / 268 skip / 0 failed**(`magma-final-gpu.xml`)。 |
| 最终双块 split + Magma | **231:225 PASS / 6 既有 skip / 0 failed**;空字段 Fatal 棘轮(`magma-final-dualblock.xml`)。 |
| strict / 每帧 RSP,`31dc1a73` | strict **180 条零失败**;RSP 两后端 **2 PASS / 0 skip**。 |
| G1,`38919d45` | `.text` **10806051 → 10806051**;symbols **27815 → 27815**,增/删/变长/改名 **0/0/0/0**。 |
| G2,`38919d45` | pull / push 各 **3016** 名,集合相同。 |
| G14,`38919d45` | 审计基线 **3744 → 3774**,新增30、删除0;其中3768→3774是完整JSON机比,历史证据限制见下。 |
G14 的历史机读集合由旧 XML/lane JSON 重建出3741名,另3名由 `aa78f102` 注册与未变测试
源码补证;**不是对一份完整保存的3744名历史 CTest JSON 直接比较**。明细在
`~/w7/p5f-logs/magma-final-summary.log`、`magma-g14.json` 和 `magma-final-names.log`。
最终 pull/push 构建、生成器检查及字段 self-test 通过;include closure 4项、0skip/0problem。
新增 UBO 用例逐次核 offset、range rebind、handle rebind、SubData 与 block binding;
GPU SSBO 用例先直接消费 GPU 写出的 VBO/EBO 绘制,再精确回读并重画;persistent-map
复用同帧/跨帧变色场景。旧 `EnabledVertexBufferDrawKeepsNamedP7Fatal` 保留注册名,内容已
改成64个真实绿色像素正例。两条 default-blit case 使用非方形四色源,核 viewport 无关、
方向、反向目标矩形以及 scissor 内外像素;host identity 路线确实执行新 native blit。
真实 carrier 阴控:`MOBILEGL_IPC_PERSISTENT_BLOCK_KB=0` 让同一 persistent-map 变色用例
实际失败(rc=8),随后恢复默认旋钮再跑为绿;保留 `magma-persistent-{green,red,restored}.log`,
以及 red XML / 私有日志。CI 固定核19名完整执行,未放宽六项 skip。PackedFloat known-red
也实跑1失败/0skip、rc8,保留其native-format边界(`magma-final-known-red.xml`)。
## 4. Redmi 实际游戏结果
设备 `2f7cbe2e`,既有 FCL 包 `com.tungsten.fcl.mgdebug.debug`,版本 `26.3-rc-3`、世界 `test`。
最终 Magma inproc:**32.083 s 进世界,稳定65.109 s、1320帧,约20.274 fps**;PID `9993`
仍存活,所有记录的 `rsp=0`。约20fps 明显偏慢;本轮是功能修复,不能据此宣称性能合格。
主任务人工检查完整景物、方向、雨效及暂停菜单,原半黑/旋转错位/彩噪消失。
runner 自动 summary 仍保留 `PASS_PENDING_SCREENSHOT_REVIEW`,人工结论单列于此,不篡改原证据。
证据目录:`C:/Users/geekerwan/.codex/tmp/magma-inproc-fix/Magma-inproc-38919d45/`,含
`final.png`、`pause.png`、游戏/library/logcat日志、boot-id、PID生命周期与 `summary.json`。
- 最终设备 `libMobileGL.so` SHA256:`5a264098f8916e811cd76ce82c3727d4f9a4a426a7b68b2fa812221e2ea41383`。
- APK SHA256:`4b42b0f85b8f83e6648cc24665a8b5fbe83e7420b04459abe7507e32e2e8aba6`。
- 同 APK GLES inproc:32.835秒进世界、60.287秒稳定窗口、10920帧,约181.134 FPS,人工验图通过。
- 同 APK Magma monolith:32.795秒进世界、61.574秒稳定窗口、7080帧,约114.984 FPS,人工验图通过。
- 三组均无定频,天气/时段在变化;FPS仅记录,不能据此建立严格性能倍率。三组rsp窗口均为零。
- 分工独立复核覆盖了buffer同步/生命周期、binding布局、native blit资源销毁、push constants/SPIR-V及状态失效;没有放宽角色守卫。
- 额外CLI只读审查扫描未返回最终结论,已停止,**不计为通过的审查门**。工具元数据实际模型为gpt-5.6-sol,未冒称异模型族;状态保存在证据根`review/status.json`。本轮不是P7阶段收官,未替换原P5f已完成的阶段终审。
## 5. 仍保留的边界
XFB buffer capture 仍在 `buffer-legacy-arm` 边界;client vertex arrays 仍属 P8。需要 UBO
重打包但起点/复制尾部不能满足4字节对齐时,仍为 `uniform-buffer-byte-tail@P7`;不满足
native alignment 的 SSBO/atomic/texel range,以及超出 native range/format 的形状仍具名拒绝,
未实现 writable range 的额外 copyback 方案。PackedFloat mipmap 与其他已登记格式债继续保留。
这次游戏可用不等于 P7 全部完成,也没有改变 P6/P12 的跨进程真窗口边界。
## 6. 交付与设备状态
修复已合入`feat/disaggregated`;被测APK保存在
`C:/Users/geekerwan/.codex/tmp/magma-inproc-fix/FCL-magma-inproc-38919d45.apk`,已安装到指定FCL包。
每组有不同boot-id,设备实际库hash与APK一致;三组共173个stats窗口全部rsp=0,只有inproc组
有真实vbs。人工验图汇总`final-device-summary.json`保留机器原始summary,不篡改其待验图标记。
测试结束从菜单保存退出,恢复原`mg_transport.txt=inproc`和空`mg_env.txt`并核hash。
现有FCL测试接线只有Espryt选项读这两个文件,Magma inproc测试通过该入口覆盖BACKEND_TYPE;
直接选择旧内置Magma选项仍默认monolith,不能只凭UI名称判断transport。父仓原冲突索引、
用户Gradle修改和游戏数据未清理;本轮没有修改FCL源代码或推进P6。