diff --git a/docs/Disaggregated/CURRENT_STAGE_PROGRESS.md b/docs/Disaggregated/CURRENT_STAGE_PROGRESS.md index 38571b8a..58581c3a 100644 --- a/docs/Disaggregated/CURRENT_STAGE_PROGRESS.md +++ b/docs/Disaggregated/CURRENT_STAGE_PROGRESS.md @@ -17,10 +17,16 @@ ## 2. P5f 最终验收 +**Magma run-ahead 已完成**(最终行为头 `194382c9`,2026-09-20):异步 GPU 生命周期、 +真实 client lead、present credit 1/3、负控与 Vulkan 同步验证已通过;实机 VAO 哈希碰撞 +已修复。Redmi 同一 `.mgdebug.debug` APK 的 Magma RA=1 / RA=0、GLES RA=1 均完成 +至少60秒 MC `26.3-rc-3` 世界运行并验图。最终 unit 2312、GPU 1401、双块245 均零失败, +完整结果与边界见 [run-ahead 报告](notes/p5f/magma-runahead.md)。下面为此前修复与原 P5f 快照。 + **Magma inproc 游戏修复**(行为头 `38919d45`,2026-09-20):已编入 Redmi 的 `com.tungsten.fcl.mgdebug.debug`。MC `26.3-rc-3` 世界 `test` 的 Magma inproc、GLES inproc 与 Magma monolith 均完成至少60秒运行及人工验图;应用 buffer 拒绝与 Android 90° blit -错误已修复。Magma inproc 仍 lockstep,实测约20 FPS,性能没有冒称齐平。最新19项专项门、 +错误已修复。该历史包为 lockstep,实测约20 FPS。该包的19项专项门、 1387项GPU结果和剩余边界见 [修复报告](notes/p5f/magma-inproc-fix.md)。 旧 [fcl-e2e-report.md](notes/p5f/fcl-e2e-report.md) 保留 `aa78f102` 失败;下面六臂数字 仍是原 P5f 公开 GL runner 快照,不能冒充 FCL 测试或覆盖最新修复报告。 diff --git a/docs/Disaggregated/ROADMAP.md b/docs/Disaggregated/ROADMAP.md index eb56dffb..338f5206 100644 --- a/docs/Disaggregated/ROADMAP.md +++ b/docs/Disaggregated/ROADMAP.md @@ -2,6 +2,8 @@ > 状态:**P0、P0.5、P1、P2、P3a、P4a、P5、P5b、P5c、P5d、P5e、P5f 已收官**。P5f 于 2026-09-20 完成主机门、Redmi 六个 clean-boot 臂、跨模型族审查及修复验证;最终验收代码为 WSL `cfca93c7885fd8db1e881f91189ba59090ae9c52`(Windows `c42577a4` 等价)。证据见 [`notes/p5f/close-report.md`](notes/p5f/close-report.md)、[`close-review.md`](notes/p5f/close-review.md)、[`device-report.md`](notes/p5f/device-report.md)。**P6 的 P5f 前提已解除,a6 / c6 / spawn 实施尚未开始**。逐门数字、主分支合入记录和下一步见 [`CURRENT_STAGE_PROGRESS.md`](CURRENT_STAGE_PROGRESS.md) 与收官报告;设计见 `ARCHITECTURE.md`。P5e 的历史性能与 E1 对照债保留在阶段行、[`P5E-RUNAHEAD.md`](P5E-RUNAHEAD.md) 和 `MEASUREMENTS.md`,不由 P5f 的新对照代为关闭。 +> **P5f 后续 Magma run-ahead 已完成**(`194382c9`,2026-09-20):主机真实排队、credit、负控及 Vulkan 同步验证通过,Redmi 同包 Magma 开/关与 GLES 三臂 FCL 世界实测通过。见 [报告](notes/p5f/magma-runahead.md)。P6 / P7 全阶段状态不因此改变。 + ## 通用纪律(每个 commit) - 默认 ALL target 必须完整构建;禁止提交热路径插桩(CI grep 门)。 @@ -32,7 +34,7 @@ | **P5f** 一切状态上 wire | ✅ **已收官(2026-09-20)**;验收代码 Windows `c42577a4` / WSL `cfca93c7885f` | f0 普查、f1 双块、fc 控制帧、fe Espryt 字段、fm Magma record consumers、fs 静态世代/角色及 liveness、fr registry、fv 反向回调均已合并。字段归属 **41 RECORD_SUPPLIED / 6 APPLIER_DERIVED / 0 BARRIER_PULLED / 16 FATAL**;strict / dualblock 预期 marker 集合均空。控制帧与静态量工作已完成,不再列为 P6 待实现项 | unit **2310 = 2300 PASS + 10 skip**;GPU **1377** 零失败;ordinary / strict split **180 = 176 PASS + 4 skip**;双块 **212 = 206 PASS + 6 精确具名 skip**;双后端 RSP 门 **2 PASS / 0 skip**、逐帧 rsp=0。G1 `.text` 10806051、symbols 27815 恒等且 0/0/0/0;G2 3016 同名;G14 3646→3744 无删名。逐包与收官修复均有 red-once;Claude 异族终审 P1/P2 已修;Redmi 六 clean-boot 臂 **60 PASS / 6 skip / 0 failed**、36 个窗口 rsp=0。详见 [`close-report`](notes/p5f/close-report.md) | | **P6** spawn transport | **P5f 前提已解除,尚未实施**;a6 / c6 待开始 | `SocketTransport`(socketpair + fork/execve,envp 剔除 + 强制 monolith 双保险);`ServerMain`;`MOBILEGL_IPC_SERVER_PATH` + `dladdr` 兜底;有界重试握手;EOF 即时退出;device-lost latch。消费 P5f 已落地的值控制帧与 server-owned 状态,不重做 EGL 帧化或静态世代隔离。依赖序见 [`P6-SPAWN-PLAN.md`](P6-SPAWN-PLAN.md):**a6**(核验进程装配/链接边界)→ **c6**(契约)→ **so / sm / cp / st / t6**。契约草稿 [`P6-CONTRACT-DRAFT.md`](P6-CONTRACT-DRAFT.md)。边界仍为 pbuffer / surfaceless / 离屏;真窗口到达归 P12。需区分不等待的 client 与已死亡的 server,不以超时阈值代替 device-lost 判定 | P5b 的完整渲染路径在 `spawn` 下绿;进程树只多一个子进程;`HeadlessGL` fork 预检无孤儿;OpenRA 在 Adreno 830 上 split SSIM ≥ 0.99;`integration-spawn` 与 `integration-split` 名集合一致;每条私有日志证明子进程 pid 与 `transport=spawn`;socket 门铃代价实际测量,性能只记录 | | **P3b / P4b** 深化(Espryt) | 待排 | 按存储属主键控的发射游标与 view 索引重映射;`g_fboTextureSyncList`;`ResolvedTextureBindingMemo` / `SamplerPassMemo` / image sweep / program registry 重键;XFB scatter 搬到 client;删 fragColor 重推导 workaround 与 `g_broadcastMemo*`;raw-depth-fetch sampler 的 monolith 清理(transport 原生臂已由 P5f fs 落地);回读 / pack state;P4a 记下的 R-3 / R-4 / R-5 / R-7 / R-10 / R-11;`ProgramArtifacts.h` 的 NDK 尺寸钉 | 纹理 / program 场景;CTS `texture_*` / `shader_image_*` / `packed_pixels` 在 0.5 pp 内;每一个 Iris trace;`TextureUploadShapeScenario` 升级成门 | -| **P7** DirectVulkan(Magma)全量迁移 | 部分已提前落地,阶段未收官 | `38919d45` 已补实际游戏的 server buffer consumers 和 Android 旋转 blit([报告](notes/p5f/magma-inproc-fix.md));其余工作: 其余 10 个子系统:`SetupDrawSnapshot` 探测字段塌成 dirty mask;占位纹理原生化;具名 UBO host payload(D-B8);内部 shader 烘焙;`VertexInputStateFactory` 内容寻址 CSO;D18 容器纪律保留 | 集成 + trace 在 Magma 的 push 与 split 下全绿;verify 零分歧;`nm -D libMobileGLServer.so \| grep glslang` 为空;CTS 0.5 pp 内。**再基线检查点:中点完成子系统 < 40% 立即重定基线** | +| **P7** DirectVulkan(Magma)全量迁移 | 部分已提前落地,阶段未收官 | `38919d45` 已补实际游戏的 server buffer consumers 和 Android 旋转 blit([报告](notes/p5f/magma-inproc-fix.md));`194382c9` 又完成 Magma run-ahead、GPU 延迟退休与 VAO 身份碰撞修复([报告](notes/p5f/magma-runahead.md));其余工作:其余子系统:`SetupDrawSnapshot` 探测字段塌成 dirty mask;占位纹理原生化;具名 UBO host payload(D-B8);内部 shader 烘焙;`VertexInputStateFactory` 内容寻址 CSO;D18 容器纪律保留 | 集成 + trace 在 Magma 的 push 与 split 下全绿;verify 零分歧;`nm -D libMobileGLServer.so \| grep glslang` 为空;CTS 0.5 pp 内。**再基线检查点:中点完成子系统 < 40% 立即重定基线** | | **P8** emulation 下放 + 索引宿主镜像 + 协议广度 | 待排 | `MG_Impl/Pipe/HostResolve.cpp`(client 数组范围、最大索引扫描、`*IndirectCount` 解析,逐站点 reconcile);`Server/IndexHostMirror`;CopyImage 镜像搬到 client;viewport-array 回放验证;`generate_mipmap` 计划 + CPU 回退纹素;大 blob carrier(开放问题 11);无 present fence tick;`kCapDriverOrderedXfbCapture` | `'^DirectGLES\.Split\.'` 与 `'^DirectGLES\.'` 逐名相同;trace split 双后端 SSIM ≥ 0.99 含两个 `coherent_as_flush` fixture;`ClientArrayAfterComputeWriteScenario`;`create-indirect` 上 `roundtrips-per-frame` 读零;`index-mirror-bytes` 逐用例发布 | | **P9** 反向通道 | 待排 | `SEG_REPLY` 异步 slot 池;PBO 回读 fire-and-forget;`OnGpuWritten` 收窄;`OnBufferWriteback` 批处理 + epoch 排序;`OnXfbScatterReady`;`OnTextureWriteback`;`OnMipLevelsGenerated`;纹理拉取四条缓解 + 终止符;`OnGlError` 有序;`OnSurfaceChanged`;`OnLog` 分级;`SEG_EVENT` 溢出策略;class-C 的 readback 尾 | 回读 / XFB 场景在 split 下绿;`TextureRemintPullScenario`(含无解用例);拉取计数逐 trace 发布;两条故障注入 | | **P10** sync / query / present 节奏 | 待排 | client 铸造 query handle;轮询入口成门铃点 + `MOBILEGL_IPC_POLL_ESCALATE`;fence 完成度来自逐 fence 退休;非 present fence tick;`present` 1:1;credit 默认 1;roundtrip 计数器与输入延迟直方图;class-C 的 query / swap-interval 尾 | query / XFB / `AsyncCompile` 场景在 split 下绿;trace 上 draw / state / upload 路径 roundtrip 读零;零 timeout 轮询有界退出;配对 A/B 记录 | @@ -125,7 +127,7 @@ P5c 当时移交的对象类 BARRIER-PULLED、transport registry 前端键、EGL | ABI fingerprint | 不混 segment sizes;改变 8/32/16 MiB + 256 KiB ledger 时仍欠这项 | | 默认 32 MiB staging | 目标负载单次 128 MiB 上传装不进默认 stage;普查 / Redmi 显式 256 MiB profile,默认不改;分块 / 专用 carrier 归 P8(开放问题 11) | | P5b 的 inproc 依赖 | 历史的 scoped client binding、mip registry 查询与 FBO death mailbox 已经 P5c/P5f 改为记录、句柄和控制/事件路径;P6 核验并装配已有载体,不再重做这些迁移 | -| 未迁移与仿真路径 | 15 个 class-C 槽(query / sync 尾 / `GetTexImage` / `SetSwapInterval`)→ P9 / P10;client vertex arrays、multi-draw client indices、RGB 三通道 CPU mip、renderbuffer copy endpoint、未绑定 named clear、`texture-remint-pull` 仿真保留具名拒绝 → P8 / P9;Magma split compute / image 的“82 个错答”是 P5b 历史普查计数,不是当前失败清单;P5f 后续已补应用 buffer consumers 与 Android 旋转 blit,Magma inproc 已能运行所测 MC 世界;XFB、部分不对齐范围、placeholder/native-format 及性能仍归 P7([报告](notes/p5f/magma-inproc-fix.md)) | **P5e 补**:client vertex arrays 在 run-ahead 下是**具名拒绝**(ID-82,`Fatal{UnmigratedVerb, "DrawArrays+CLIENT_ARRAYS"}`),并有自己的预期红车道 `integration-clientarrays-split`(ID-134);staging 仍归 P8 +| 未迁移与仿真路径 | 15 个 class-C 槽(query / sync 尾 / `GetTexImage` / `SetSwapInterval`)→ P9 / P10;client vertex arrays、multi-draw client indices、RGB 三通道 CPU mip、renderbuffer copy endpoint、未绑定 named clear、`texture-remint-pull` 仿真保留具名拒绝 → P8 / P9;Magma split compute / image 的“82 个错答”是 P5b 历史普查计数,不是当前失败清单;P5f 后续已补应用 buffer consumers 与 Android 旋转 blit,Magma inproc 已能运行所测 MC 世界;后续 run-ahead 已完成([报告](notes/p5f/magma-runahead.md));XFB、部分不对齐范围、placeholder/native-format 及进一步性能工作仍归 P7([报告](notes/p5f/magma-inproc-fix.md)) | **P5e 补**:client vertex arrays 在 run-ahead 下是**具名拒绝**(ID-82,`Fatal{UnmigratedVerb, "DrawArrays+CLIENT_ARRAYS"}`),并有自己的预期红车道 `integration-clientarrays-split`(ID-134);staging 仍归 P8 | E2 wire 内容控制 | draw-drop 是 OpenRA 的有效控制(758 draws,SSIM 0.000036);clear-drop 被全屏 overdraw 掩盖,不能作控制 | | max record bytes | 实测 reduced / OpenRA `maxrec=784 B`,默认 cap 4 MiB;只代表所测负载,后续索引 / indirect 尾仍须记录 | | 树外脚本 | 普查跑器、`wsl_p5_gate.sh`、Redmi 定频行都在 `~/w7/notes/`,git merge 不会传播 | diff --git a/docs/Disaggregated/notes/p5f/HANDOFF-P5F.md b/docs/Disaggregated/notes/p5f/HANDOFF-P5F.md index 7245143d..78636e07 100644 --- a/docs/Disaggregated/notes/p5f/HANDOFF-P5F.md +++ b/docs/Disaggregated/notes/p5f/HANDOFF-P5F.md @@ -4,12 +4,18 @@ > `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)。原 P5f 行为验收头 `cfca93c7`; -> 后续 Magma 游戏修复的行为头为 `38919d45`,见下。 +> 后续 Magma run-ahead 的最终行为头为 `194382c9`,见下。 +> +> **Magma run-ahead 已完成(2026-09-20)**:独立 readiness 已开启,GPU 提交/资源 +> 退休时序、真实排队/credit 1/3、负控、Vulkan 同步验证均通过。Redmi 同一 +> `.mgdebug.debug` APK 的 Magma RA=1 / RA=0 与 GLES RA=1 三臂均完成至少60秒 +> 世界运行与验图;修复了实机发现的 VAO 身份哈希碰撞。见 [最终报告](magma-runahead.md)。 > > **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)。 +> 该历史包仍 lockstep、约20 FPS;当前版本以上面的 run-ahead 报告为准。 +> 不是 P7 全量完成。见 [修复报告](magma-inproc-fix.md)。 > 旧 [fcl-e2e-report.md](fcl-e2e-report.md) 保留 `aa78f102` 的真实失败,不代表当前结果。 ## 0. 当前结论 @@ -41,8 +47,9 @@ P6 的 P5f 前提解除;P6 的 a6 审计、c6 契约冻结和 spawn 实现均 ## 1. 下一阶段需要知道的边界 -- Magma 仍不发布 `kCapRunAheadApply`;可达路径已经在 role-split + strict 下验证, - lockstep 没有 frontend registry/allocator 豁免。P7 buffer/native-format 等功能仍具名拒绝。 +- Magma 已发布 `kCapRunAheadApply`;`RUN_AHEAD=0` 保留配对对照。 + 可达路径已经在 role-split + strict 下验证,没有 frontend registry/allocator 豁免。 + 其余 P7/P8 shape 限制仍具名拒绝;run-ahead 不代表 P7 全量完成。 - P8 client arrays、P12 window/present 到达语义等路线图债保留;不是未完成的 P5f 包。 - server context 的 unpack/render shadow 按 native generation / served serial / role 核键。 XFB 以 lifetime id 分区;served context 切换保留暂停 span,native context 销毁才废弃旧 diff --git a/docs/Disaggregated/notes/p5f/close-report.md b/docs/Disaggregated/notes/p5f/close-report.md index 7ac96263..b50ca081 100644 --- a/docs/Disaggregated/notes/p5f/close-report.md +++ b/docs/Disaggregated/notes/p5f/close-report.md @@ -11,7 +11,8 @@ 用户随后要求的 [首次 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 已完成。 +P5f 收口快照。随后 `194382c9` 已完成 [Magma run-ahead](magma-runahead.md), +有独立主机门和 FCL 实测证据;P7 全量迁移仍未收官。 ## 1. 完成的行为 diff --git a/docs/Disaggregated/notes/p5f/magma-inproc-fix.md b/docs/Disaggregated/notes/p5f/magma-inproc-fix.md index 5e85c5e9..71cd11bf 100644 --- a/docs/Disaggregated/notes/p5f/magma-inproc-fix.md +++ b/docs/Disaggregated/notes/p5f/magma-inproc-fix.md @@ -1,6 +1,7 @@ # Magma inproc 实际游戏修复 -> 当前行为头 `38919d45`,分支 `codex/magma-inproc`;本报告记录 P5f 后的实际游戏补修。 +> 历史行为头 `38919d45`,分支 `codex/magma-inproc`;本报告记录 P5f 后的实际游戏补修。 +> 后续 `194382c9` 已完成 [Magma run-ahead](magma-runahead.md),本报告保留当时 lockstep 数据。 > Redmi Magma inproc 已通过运行与人工图像检查;同 APK 的 GLES inproc 与 Magma monolith 复跑、最终 G1/G2/G14 均已通过。 > 功能修复、主机门与真机验证完成;保留以下性能和功能边界,未宣称 P7 全阶段收官。 diff --git a/docs/Disaggregated/notes/p5f/magma-runahead.md b/docs/Disaggregated/notes/p5f/magma-runahead.md new file mode 100644 index 00000000..620967ce --- /dev/null +++ b/docs/Disaggregated/notes/p5f/magma-runahead.md @@ -0,0 +1,130 @@ +# Magma run-ahead + +**已完成,2026-09-20**。最终生产与实机行为头 `194382c96a8a5f51ef23f412fdccfbd40a82bf78`。 + +本次是在已完成的 P5f 与 Magma inproc 游戏修复上继续实现异步排队, +不是重开 P5f 包,也不宣称 P6 spawn 或 P7/P8 全量实现。 +契约见 `MobileGL/MG_Remote/CONTRACT-MAGMA-RUNAHEAD.md`。 + +## 实现 + +- Magma 独立 readiness 条件满足后发布 `kCapRunAheadApply`,复用既有客户端闩、 + wait class、反向事件流控和 present credit。`MOBILEGL_IPC_RUN_AHEAD=0` 保留为配对对照。 + reply、显式同步和 credit 耗尽的等待仍保留。 +- wire draw/clear/color blit 不再逐 draw 提交并 `vkQueueWaitIdle`。render pass、 + framebuffer、view 和 blit descriptor pool 按实际 submit index 延迟释放; + Present、重建和 shutdown 处理最后一批对象。独立 blit 不复写在途 descriptor set。 +- texture 上传和 GPU 内容保留提交不能越过旧 draw;draw/dispatch 在取得当前 + command buffer 前准备 image、sampled texture 和 FBO attachments。native blit + 后同时失效 pipeline/dynamic state 与 uniform manager 的 descriptor 绑定缓存。 +- GPU buffer readback 后保留后续 draw 已预约的 slice;CPU draw preparation 期间 + 不允许 idle-drain 回卷 transient arena。同 layout image transition 保留内存依赖。 +- compute work-group 上限由本地 CapsMirror 回答,不再通过三个 getter 插入无谓 + barrier。修改限于 transport 的两个 compute COUNT/SIZE 查询。 +- Vulkan 验证层发现并修复 descriptor indexing API/extension 启用条件、含 dynamic + UBO layout 的非法 UPDATE_AFTER_BIND、HOST_WRITE stage 和 Present layout transition + 的写后写依赖。wire 使用已有按内容版本分配的 descriptor set,不原地修改在途 set。 +- 最小化窗口丢弃 recording 后,只有 CPU preparation、renderer submit 和纹理独立 + upload fence 都空闲才回收 future-tag 对象。纹理 fence 只轮询,不新增 queue wait; + 同时避免对象持续累积和误把 renderer watermark 当作整个队列的 idle 证明。 + +## Redmi 发现的 VAO 状态漏发 + +初版 `3c97ea9c` run-ahead 进入世界后触发 `Magma:vertex-layout@P7`。 +`6f764c42` 诊断包关闭 run-ahead 仍复现:enabled attribute 1 对应的 buffer window +却是 `0+1`。因此没有删去边界检查,也没有把它当作驱动格式限制绕过。 + +根因是 dirty tracker 把 `{VAO lifetime, configVersion}` 用普通 hash-combine +压成一个值判断身份变化。普通整数对会碰撞;Redmi 实际记录的两个身份为 +`174/37` 与 `48/8026`。缓冲家族因 aggregate 变化发布了新窗口,CSO 家族却 +漏发 bind,形成旧布局与新窗口组合。现在精确比较两个字段,变化时重新检查 +三个 vertex families,各 emitter 仍可抑制自身未变化的记录。 + +新测试通过合法 setter 构造真实 VAO 的碰撞配置,经实际 validate 路径检查 +`A(0+1 enabled) → B(0 enabled) → A` 的绑定及窗口 `2→1→2`,不改私有计数器。 +候选修复 `376c04be` 已在 Redmi 捕获碰撞被修复的日志,世界连续运行 64.167 秒, +验图正常。该诊断包不是最终交付验收包;初版失败证据保留。 + +## 主机验证 + +七种实际排队场景各测 present credit 1/3,共 14 项: +buffer SubData/respecify/delete-name-reuse、program/uniform 快照、SSBO 写回读、 +native 与 double-converted vertex slice、旧 texture draw 与后续上传的顺序、 +GPU clear 后首次 storage image 升级、credit 用完时客户端真实停车。 +用已有 apply hook 暂停真实服务端,观察真实 emit/applied watermark 和 producerParked, +不伪造 capability/sequence,也不把 ARMED 日志当作排队证明。 + +关闭 run-ahead 的负控同一 testcase 必须实际等 apply、失去 client lead 并失败, +恢复后转绿。同步验证必须证明 Khronos layer 被 loader 插入,完整执行 14 项, +且零 VUID / SYNC-HAZARD / validation error。两项均已接入 CI,脚本为 +`scripts/ci/magma_runahead_checks.py`。 + +RSP 测试采样也修正了真实的 fixture race:异步 EndFrame 返回不代表 Present +统计已发布,测试现在等该条已发出的 Present applied 后再读日志;生产未加等待。 + +最终行为头的结果如下,skip 不计 PASS,完整发现集与 JUnit 核对: + +| 门 | 总数 | PASS | skip | failed | +|---|---:|---:|---:|---:| +| unit | 2312 | 2302 | 10 | 0 | +| integration-gpu | 1401 | 1119 | 282 | 0 | +| strict integration-split | 180 | 176 | 4 | 0 | +| 双块 split + magma | 245 | 239 | 6 | 0 | +| 其中 run-ahead 专项 | 14 | 14 | 0 | 0 | +| 其中 buffer 专项 | 19 | 19 | 0 | 0 | +| 其中两后端逐帧 RSP | 2 | 2 | 0 | 0 | +| Khronos synchronization validation | 14 | 14 | 0 | 0 | + +- unit / GPU / 双块的 skip 名称与前一轮完整结果集精确相同;普通 GPU 发现的 14 个 + run-ahead 副本只在专用车道运行,因此在那里按 fixture 声明 skip,专用 14 项均执行。 +- strict marker 与双块 fatal 棘轮均空;初版负控与最终 run-ahead-off 负控均真实红转绿。 + Tracker 碰撞回归临时撤掉 exact-pair dirty 分支后 rc=1,恢复后 rc=0;改动已还原。 +- Vulkan layer 实际插入 14 次,零 VUID / SYNC-HAZARD / validation error。日志另外保留 + 28 条既有 MobileGL `GL_STENCIL_INDEX8` caps 枚举应用 ERROR;它们不是 layer 消息, + checker 按来源分列,含 Vulkan 标识的消息和 loader ERROR 仍硬失败。 +- pull / push 构建通过;G1 `.text 10806051 → 10806051`,27815 defined symbols, + added/removed/resized/renamed **0/0/0/0**。G2 **3017 == 3017**。 + G14 完整 JSON 名称集合 **3774 → 3803,+29 / -0**。 +- wire/field/dirty generators、field self-test 与四个 include closure probes 全过。 + 证据目录 `final-gates-194382c9/`、`negative-194382c9/`、`syncval-194382c9/`、 + `tracker-red-once-194382c9/`,均在上述主机日志根目录下。 + +## FCL 实机验证 + +设备限定 Redmi `2f7cbe2e`,包名 `com.tungsten.fcl.mgdebug.debug`, +Minecraft `26.3-rc-3`,世界 `test`。复现脚本与准备/恢复步骤见 +`tools/device_bench/magma_runahead/README.md`。 + +最终 APK `FCL-magma-runahead-194382c9.apk` 已覆盖安装,保留游戏数据: + +- APK SHA256:`69973e2f51b87bd0128420da62b92fa2fb862a11067baf1b54a142f971d13357` +- `libMobileGL.so` SHA256:`046d86c288ce891b16770148578ba1a6fea4057783b69c2359f5830e58b7b223` +- APK 内与 `/data/app/.../lib/arm64/libMobileGL.so` 哈希一致,记录在 + `final-artifact-identity.json`。三臂均使用此 APK,分别重启设备后运行。 + +| 臂 | 实际能力 | 世界连续运行 | 帧增量 / 近似 FPS | 图像 | +|---|---|---:|---:|---| +| Magma inproc RA=1 | ARMED | 64.472 s | 7680 / 119.122 | 地形、天空、手、hotbar 与方向正常 | +| Magma inproc RA=0 | 实际 Config run-ahead=0,无 ARMED | 60.589 s | 7320 / 120.813 | 同上 | +| GLES inproc RA=1 | ARMED | 60.865 s | 7080 / 116.323 | 同上 | + +三臂数据与截图位于 `final-Magma-on/`、`final-Magma-off/`、`final-GLES-on/`。 +Magma-on 有一次 `adb pidof` 查询超时(rc=124),随后仍为同一 PID `10141`, +帧与日志持续推进、无进程重启或 crash;不将它写成应用退出。 +三臂共 193 个 stats windows 全部 `rsp=0`,strict=1、role-split-state=1, +六张世界截图均已检查;证据结论见各目录 `screenshot-review.json` 和汇总 +`final-device-verdict.json`。三个不同 boot-id 分别为 +`300c0044-058f-4c34-9e88-6e888d834877`、`bf9a1b6c-ce58-4ca6-bc71-8da52a856684`、 +`f61e1c51-e354-4867-b708-72ca463e2119`。 + +原 `mg_env.txt`(空文件)和 `mg_transport.txt`(`inproc\n`)已恢复并逐一核对 +SHA256,世界已保存退出;没有回滚世界内容。用户两份 Gradle 配置及父 FCL 的 +原有未合并索引未改动。本轮未将库/APK 二进制提交到 Git。 + +所有主机原始日志保留在 `/home/swung/w7/magma-ra-logs/`;设备证据在 +`C:/Users/geekerwan/.codex/tmp/magma-runahead/`。静态镜头、未锁频、天气和温度不受控, +帧计数只能作本次运行记录,不能把所有提升都归因于客户端 run-ahead; +本次还同时取消了 GPU 逐 draw 等待。具名 P7/P8 shape refusals 继续保留。 + +本次 RA=1 与 RA=0 的近似均值接近,不能据此宣称客户端 run-ahead 有特定 FPS 收益; +能确认的是所测世界已能在约 120 FPS 水平运行,真实排队与 credit 语义由主机专项证明。