mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
docs: record B4 landing and p7w6 matrix results
This commit is contained in:
@@ -110,6 +110,8 @@ verify **在 wave 3 之前**只在 monolith 臂注册(`MG_IntegrationTest/CMak
|
||||
|
||||
**7.1 门 3 分母(ID-P7-4,设备窗口 #1 E0a 补正)。** `trace_cases.json` 的 CI split 子集(39)× DirectVulkan × `--use-pbuffer`,排除**在 monolith 臂上就红的 case**——它们按定义不是分离缺陷:`create-indirect`(OQ-17:`dev@81b17c0b` 起在 Adreno 830 上就坏)、`minecraft-1.21.11-main-menu`(trace 自身 UBO offset 不满足本机 32 字节对齐,`notes/p65/mainmenu-trace-difference.md`)、`minecraft-1.21.4-fabric-iris-photon-v1.3b-in-world`(Adreno 830 的 `vkCreateGraphicsPipelines` 对 photon 程序返回 `VK_ERROR_UNKNOWN`,`Renderer/PipelineFactory.cpp:660`,monolith SSIM 0.0089;桌面 lavapipe 绿;按 OQ-17 先例归 `dev` 侧独立条目);rd12 in-world 不在 `--matrix` 里。**分母 = 36**。`iterationrp` 带 `apk.yml:460-462` 的三个 Magma 旋钮。排除表随每次窗口更新于 `notes/p7/device-window-<n>/E0-attribution/exclusions.md`。
|
||||
**7.2 门 3 判据(逐 case 对 monolith 臂,不是对 golden 的平 1.0)。** E0a 实测 monolith × DirectVulkan 对 golden 的 SSIM 在 0.996–1.000(iris 光影 case 最低 0.99617),只有 OpenRA 是 1.000000——golden 来自桌面,阈值吸收驱动差。所以门 3 = 同一 reboot-clean 会话内,对分母中每个 case:inproc **与** spawn(或 tcp)三遍**逐位相同**(零翻转),且每遍 `ssim vs golden` ≥ 该 case 阈值 **且与 monolith 臂同会话读数之差 ≤ 0.0005**(OpenRA 两臂都必须 1.000000、mismatch 0);`RUN_AHEAD=0` 对照臂一遍记录。证据目录 `docs/Disaggregated/notes/p7/device-window-<n>/`。定位实验顺序 E0–E6 见计划 §3 wave 1。**状态(W4,p7w4 = `ae3f43ab`,ID-P7-25)**:inproc 一遍 34/36 与 monolith 差 ≤ 0.0005;OpenRA 是与温度无关的约 50% 竞态(两张图,lockstep 第三张),验收改为 run-ahead 与 lockstep 各 6 遍全等 golden;bsl-esc-menu inproc OOM 待 spawn 臂。**状态(W5,p7w5 = `713bea9a`,ID-P7-34)**:OpenRA **27/27 golden**(inproc/spawn × run-ahead/lockstep × 冷/热 + FIF=8 + dump-armed)——项关闭;余 bsl-esc-menu(M2)与终局形式(p7w6:分母 36 三遍逐位 + spawn 臂同会话)。**状态(W6,p7w6 = `0e16ca27`,ID-P7-49)**:bsl-esc-menu inproc/spawn 各三遍 6/6,实际图像六张逐位相同且与 E0a monolith SHA 相同,M2 的设备正确性项关闭;36 例的终局三遍及同会话 monolith 对照仍待跑。W6 APK 在 M3 之前构建,不能代替 M3 后的设备回归。
|
||||
|
||||
**窗口 1b p7w6 DirectGLES × TCP(ID-P7-52,独立调查而非门 3)**:38 例含 9 个缓存跳过,29 次尝试为 16 pass、8 case-level idle timeout、2 visual fail、3 missing-result timeout。missing-result 与 timeout 不作视觉红;Photon v1.3b / D24.4.14 的两张真实错图及逐例 phone reap 状态见 notes/p65/window-1b-p7w6.md。B4 host gate 与未知子集尝试重叠,timeout 墙钟可能受 CPU 竞争影响;M3 后设备门 3 和 CTS 仍待最终 APK。
|
||||
**7.3 门 5。** 块与 caselist(`tools/cts/caselists/`,取自 VK-GL-CTS `0b04c470e`,即设备上 glcts 的源):`KHR-GL46.texture_*`(1055)、`KHR-GL46.shader_image*`(125)、`KHR-GL46.packed_pixels`(4732)、`KHR-GL46.direct_state_access.*`(371)、**UBO 在 KHR 包里没有专属组**——取 GTF 模块 `GTF-GL46.gtf31.GL3Tests.uniform_buffer_object*`(90,设备 glcts 若未含 GTF 则该块记 unrun)、另加 `KHR-GL46.shader_storage_buffer_object`(124,簇 A 的 unaligned / native-range 拒绝实际打的是 SSBO range)。`KHR-GL46` 在 Android 跑器上未证实可开 4.6 core context:窗口先探针;不行则 `$BASE` 与 AFTER 都用 `gl33` 变体(texture 868 / packed_pixels 4732 / ubo 90;GL 3.3 无 shader image、无 DSA),**同一 API 版本比 0.5 pp**。先 monolith × DirectVulkan 基线入库 `tools/cts/baselines/`,迁移落地后 inproc × DirectVulkan 比对:每块 pass 率差 ≤ 0.5 pp(Pass/(Pass+Fail),NS 不入分母),**新增 crash = 0 单独硬红**。完整 caselist(~56k)在合 `dev` 前跑,不在关键路径。
|
||||
|
||||
---
|
||||
@@ -170,7 +172,7 @@ verify **在 wave 3 之前**只在 monolith 臂注册(`MG_IntegrationTest/CMak
|
||||
- **X1 之后的两条残余**(`notes/p7/x1-persistent-map-segv.md`):(a) 首次 push 后页面在映射存活期间重新武装,一个**屏蔽了 SIGSEGV 的非 GL 线程写者**仍会被杀——彻底关闭要把武装改成逐 buffer 可选,是设计改动;(b) `RefaultOfANonWriteAccess` 仍可能拒掉同 `(tid, pc, address)` 的一次合法重复写——延后武装后不再常见,未观察到,记录。
|
||||
- **P5d 的 Adreno 数字存疑**:X1 证明在 arm64 上注册总是加保护、handler 总是不认领(bionic 指针标记 0xb4 与内核的 `si_addr` 比较),即 mprotect 臂在 Android 上**从未**回答过一次 fault;P5d 报告里把收益记在 mprotect 臂上的设备测量需要重取(`P5D-INPROC-PERFORMANCE.md`)。归优化阶段,不阻塞 P7。
|
||||
- **B2 返工留下的记录债(`notes/p7/magma-b2.md` §6,ID-P7-35/37)**:(1) 多重采样颜色 resolve 的第二段 `vkCmdBlitImage` 不裁剪目的矩形(越界 = `VUID-vkCmdBlitImage-dstOffset-00248/00249`),与 monolith 臂共有,两臂一起裁是独立的活;(2) `MagmaWireFatal("multisample-resolve-region")` 对源矩形越出读缓冲的 blit 仍带走会话——GL 说那些像素未定义而非错误,应 decline 或钳制;(3) 1 → N 等矩形 decline 拒绝的是合法形状(18.3.1 样本复制),Vulkan 无对应命令、monolith 的可观测本身是 VU 违规;(4) tcp 车道带不了 server 端测试旋钮——六条 knob 条目只在 split + spawn,`spawn_lane_parity.py` 的 `MAGMA_SERVER_ENV_KNOB_NO_TCP` 具名;收回要 `tcp_server_fixture.py` 接受每用例 server 环境;(5) X 镜像与跨格式 Y 镜像的深 / 模板 resolve 以规则 I(a) 具名 decline(合法 blit);跨格式那条在 renderbuffer 与 texture 的 D24S8 映射到不同 `VkFormat` 的设备上会让 `MsFlip.` 变红;(6) **monolith `DirectVulkan` 臂的翻转 / 缩放多重采样深度 blit**:翻转被拒(目的地保持清屏值、无错误)、缩放被执行(GL 说 `INVALID_OPERATION`)——wire 与 monolith 的分歧,wire 臂是更正确的一方,monolith 修正归 P13 / G1;(7) **Espryt(DirectGLES)的翻转 / 缩放多重采样深度 resolve**:翻转什么也不写且不报错、缩放不报错——P3b / P4b 债;用例在这两类条目上以具名理由 `Skipped`。
|
||||
- **B3 复审留下的记录债(`notes/p7/magma-b3.md` §7.2,ID-P7-36/37)**:`WaitForFrameSerial` 在 disagg 构建上等的是第一条 `frameSerial >= serial` 的记录,钳制之后若更晚的记录(S2 Present)持有同一序号则地板到不了 `serial`,函数返回 true 而 `IsFrameSerialComplete(serial)` 为 false——唯一调用者 `WaitForTimerQueryResult` 重查就绪,今天退化为一次假超时;修法归 **B4**(只在 `IsFrameSerialComplete` 为真时返回,否则从头重扫,不能 continue)。陈旧注释两处(`CollectAllDeferredReleases` 的「mid-frame drains do not advance m_frameSerial」、`WaitForFrameSerial` 的「floor still advances after one fence wait」)归 B4 一起改。disaggregated 构建的 monolith 臂在中帧 flush 下比 pull 构建更可靠(`OnSubData` 经 `IsResourceBusy` 读同一地板),pull 构建的 `#else` 逐字保留、潜在缺陷由 G1 与 P13 持有。
|
||||
- **B3 / B4 记录债(ID-P7-36/37/51)**:B3 指出的 WaitForFrameSerial 首 fence 假成功、pre-pass pending、FlushWirePendingCommandsForTextureUpdate 单 fence 假设、Present 槽回收前缺完整提交等待和 AdoptRun extent 覆盖,已由 B4 在 pipe b19297d5 修复并通过完整门;集成者 review land 见 notes/handoff/review-b4.md。
|
||||
- **V1 留下的记录债(`notes/p7/verify-split.md` §6,ID-P7-37)**:verify 在 spawn 上需要一个跨进程的比对形状(server 把读到的字段值随回复带回、client 比),门 2 的文本是 `{monolith, split(inproc)}`;server `ReadPixels` 窗口里 pack 半边的字段级盲区很窄(只有恰等于中性 pack 的错推送不可见);DirectGLES × split 上四条 Magma decline 契约用例按名从 verify-split 车道减掉——Espryt 是否 decline 这些形状归 P3b / P4b。
|
||||
- **F 片 1–3 之后(`notes/p7/ph-f.md` §4,ID-P7-37)**:`wireFingerprint` 随 `Welcome.dataNonce` / `DataBind` 变更(`0x7d4470f241d23539` → `0x03c4c293a54b3e08`),新 server 对旧 client 回 `Refuse{WireFingerprint}`,旧 server 对新 client **没有 Refuse 帧**(旧 `AcceptPair` 等第二条连接 2000 ms 后关闭,client 只见 `no Welcome … (rc=6)`)——设备上的 server 必须随下一个 APK 重部署;D11 五处 + PH-2、PH-6、PH-1 (3)(4)、PH-7 (5)(fork 前认证)未做,前置是一个能向 spawn / TCP server 投递畸形记录的对端字节驱动(fuzz 臂 2 的第一块),包 **F2**。
|
||||
- **F 修复轮之后的两条小债(集成者审查,ID-P7-44)**:`ServerMain.cpp` `RunSession` 在 `Accept()` 返回到 `close(sourceFd)` 之间,supervisor 已转发的一条 DataBind 随 child 队列关闭而得不到具名拒绝(微秒级窗口);`protocol_revision_pin.py` 对 `protocol.fbs` 的注释 / 空白改动同样要求 bump(严格、有意)。
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
**阶段:P7 DirectVulkan(Magma)全量迁移**,并行流 **P3b/P4b 深化(Espryt,wave 2-D)** 与 **Ph 小件(簇 F)**。计划 [`notes/p7/PLAN-PH-P34B-P7.md`](notes/p7/PLAN-PH-P34B-P7.md)(五波)。
|
||||
|
||||
**更新:2026-09-23(ID-P7-49/50)** · 当前交接 [`notes/p7/HANDOFF-2026-09-23.md`](notes/p7/HANDOFF-2026-09-23.md)。集成树已含 M3(pipe `9fd768d4`,门全绿,审查 land);手机 p7w6 关闭 bsl-esc-menu 设备正确性项,DirectGLES TCP 38 例对照续跑中;门 3 终局与 CTS AFTER 未完成。B4 独立包树是草稿,未落地。
|
||||
**更新:2026-09-23(ID-P7-49–52)** · 当前交接 [notes/p7/HANDOFF-2026-09-23.md](notes/p7/HANDOFF-2026-09-23.md)。集成树已含 M3 与 B4(pipe b19297d5,B4 源码审查 land、完整主机门通过);B4 的 docs/citation/push 收尾中。p7w6 DirectGLES TCP 38 例矩阵已结案,逐例结果见 [window-1b-p7w6.md](notes/p65/window-1b-p7w6.md)。门 3 终局和 CTS AFTER 尚未完成;F2 在独立包分支继续。
|
||||
|
||||
## 1. 出口门总览(CONTRACT-P7 §8 的 9 项分母)
|
||||
|
||||
@@ -16,8 +16,8 @@
|
||||
| 4 | 烘焙 (A)(D) + (B′) | ✅ | B 深度 mip 烘焙;B2 disaggregated 构建的 monolith 臂改用烘焙模块 |
|
||||
| 5 | OQ-8 反射归档 `storageBlocks` | ✅ | C |
|
||||
| 6 | OQ-10 `kCapResidentSubData` 按 server 表发布 | ✅ | C |
|
||||
| 7 | verify × split(门 2) | ✅ | M3 后 verify 构建 unit 2436、integration-verify **1152**、integration-verify-split **1086**,全绿;负控与 8 verify trace 的既有证据见 V1/V1 r2 |
|
||||
| 8 | 真机 ssim 1.0(门 3,分母 36) | 🔄 | p7w5 OpenRA 27/27 golden;p7w6 bsl-esc-menu inproc/spawn 6/6,实际图像与 monolith SHA 完全相同([`W6-verify/`](notes/p7/device-window-1/W6-verify/README.md));36 例三遍逐位及同会话对照待跑,M3 后设备回归需新 APK |
|
||||
| 7 | verify × split(门 2) | ✅ | B4 集成树 verify build:unit 2439、integration-verify 1152、integration-verify-split 1086,全绿;V1/V1 r2 负控与 8 verify trace 证据仍有效 |
|
||||
| 8 | 真机 ssim 1.0(门 3,分母 36) | 🔄 | p7w5 OpenRA 27/27 golden;p7w6 bsl-esc-menu DirectVulkan inproc/spawn 6/6 且图像 SHA 与 monolith 相同;另有 p7w6 DirectGLES × TCP 38 例窗口矩阵报告(非门 3):16/29 pass、8 idle timeout、2 visual failure、3 missing result;36 例 DirectVulkan 三遍、同会话 monolith 对照和 M3 后 APK 回归待跑 |
|
||||
| 9 | CTS 五块 AFTER ≤ 0.5 pp(门 5) | ⏳ | `$BASE` 已取(`notes/p7/device-window-1/CTS-base/`);AFTER 在 wave 4 |
|
||||
|
||||
**40% 检查点(§8 中点)已过:6/9**,不触发重定基线。G1 全程恒等(pull `.text` `0xa52203`、符号 0/0);census 79 站点 / 0 未标;棘轮 186 → **173**(B2 重基线,余 88 = monolith draw 路径,wave 3)。
|
||||
@@ -49,27 +49,28 @@
|
||||
| F 修复轮 | hand-off 端绑定后关 + `MSG_DONTWAIT`(多余 DataBind 具名拒绝)、listener 绑定后关、`sha256(protocol.fbs)` 钉到控制修订、定宽令牌比较、超额 Hello 记警、`MalformedHello`、文档更正 | pipe `0293aebb..9cea5140`(门全绿,集成者审查 land,ID-P7-44) |
|
||||
| B3 修复 r3 + B2 r4 | 审计跨 `#endif` 只放行 disagg 守卫 + 缩进 `#else` 停走(16/16)、`EVIDENCE` 保护、tcp 信息;窗口腿独一底色、去死合取项、按符号引用 | pipe `bd849b28..4b96f55d`(门全绿,集成者审查 land,ID-P7-44) |
|
||||
| M3 | 长帧 descriptor set 游标按 queue-idle 证明回卷,2049 SSBO 窗口用例 split/spawn 绿且 red-once 红;包树与 pipe 完整门绿 | pipe `9fd768d4`(ID-P7-50,集成者审查 land) |
|
||||
| B4 | 聚合 submit 前缀等待、frame serial 重新扫描、Present 槽退休保护、pre-pass pending、texture prune 与 staged extent 清理 | pipe b19297d5(ID-P7-51;集成者 review land,完整 pipe 门通过;当前文档/citation/push 收尾中) |
|
||||
|
||||
## 3. 真机(Redmi 2f7cbe2e,Adreno 830)
|
||||
|
||||
- 当前 APK:**p7w6**,stamp `p7w6-0e16ca27`,已重装并重起 TCP supervisor;屏幕常亮设置 `stayon=15`。bsl-esc-menu DirectVulkan × pbuffer inproc/spawn 各三遍 **6/6**,PNG SHA 均与 E0a monolith 相同;OpenRA 的 p7w5 27/27 结论保留。p7w6 在 M3 落地前构建,后续设备回归需新 APK。
|
||||
- DirectGLES × TCP 窗口 1b 实际分母 38:p7w5 旧批次中断报告 [`window-1b-p7w5.md`](notes/p65/window-1b-p7w5.md);p7w6 用 1900 s 外层上限续跑,日志 `~/w7/logs/p7w6-matrix-resume.log`。旧 p7w6 驱动的两次 900 s 截断是采集器上限,不能算产品红。
|
||||
- 门 3 终局 36 例三遍与同会话 spawn 尚待手机从 TCP 矩阵释放;CTS `$BASE` 已取,AFTER 尚待。
|
||||
- DirectGLES × TCP 窗口 1b(p7w6)已结案,逐例状态与 phone reap 证据见 notes/p65/window-1b-p7w6.md:9 缓存跳过、29 次尝试(16 pass、8 idle timeout、2 visual failure、3 missing-result)。Photon v1.3b 与 D24.4.14 需做设备 DirectGLES monolith 对照。
|
||||
- 门 3 的 36 例 DirectVulkan 三遍逐位与同会话 monolith 对照仍待手机新 APK;CTS AFTER 五块也未运行。
|
||||
|
||||
## 4. 在跑
|
||||
|
||||
| 工作 | 状态 |
|
||||
|---|---|
|
||||
| p7w6 DirectGLES TCP 38 例对照 | `~/w7/logs/p7w6-matrix-resume.sh` 以 setsid/nohup 续跑,进度 `~/w7/logs/p7w6-matrix-resume.log`;手机服务不可在此期间 force-stop |
|
||||
| B4 | `~/w7/p7-b4` 独立草稿:聚合等待、长帧 texture prune、AdoptRun extent 修复;目标 Magma 车道与 G1 绿,仍缺聚合等待负控 / 全门 / 复审 |
|
||||
| F2 | p7-f2-driver 包分支有 raw-record 驱动、D11 CSO slot 与 PH-3 readback 上限(db80dd16 / adf2cbe0);定向测试和 G1 已过。PH-4 staged texture byte bound 正在修复并待独立验证;还剩 D11 ArchiveVector、PH-2、PH-6、PH-1 (3)(4)、PH-7 (5) |
|
||||
|
||||
## 5. 下一步
|
||||
|
||||
1. 完成 p7w6 TCP 38 例对照并逐例结案;重跑前两例被错误外层截断的长 trace,ID / §7 记录 DataBind 与息屏结论。
|
||||
2. 完成门 3:36 例 DirectVulkan × pbuffer × inproc/spawn 三遍逐位、与同会话 monolith 差 ≤0.0005;设备 M3 回归用新 APK。补一次启用 PipeStats 的 bsl 映射峰值与 `wbuf[]`。
|
||||
3. B4 补聚合等待负控、完整门与集成者复审;F2 字节驱动、D11/PH-2/PH-6/PH-1/PH-7;wave 3 棘轮 88;wave 4 CTS AFTER;wave 5 fuzz 三臂与整体审查。
|
||||
1. p7w6 TCP 矩阵已结案;保留的 idle/missing-result 项在主机空闲时按需重跑,Photon v1.3b 与 D24.4.14 先做设备 DirectGLES monolith 对照,结案报告见 notes/p65/window-1b-p7w6.md。
|
||||
2. 最终功能 APK 部署后完成门 3(36 例 DirectVulkan × pbuffer × inproc/spawn,三遍逐位一致并与同会话 monolith 差 ≤0.0005)和 CTS AFTER 五块(相对 BASE ≤0.5 pp、新 crash=0);另采 PipeStats bsl 映射峰值与 wbuf[]。
|
||||
3. F2 继续 PH-4(StagedTextureStore level bound)、PH-5 ArchiveVector、PH-2 SlotTables,并完成 PH-6、PH-1 (3)(4)、PH-7 (5) 与 fuzz 三臂;每个字节可达负控由两进程 raw-record 驱动触发并经过完整包门。
|
||||
|
||||
## 6. 阻塞 / 需要人
|
||||
|
||||
- 手机需保持 adb、WSL 路由、前台 Service 与 `stayon=15` 直到 p7w6 TCP 矩阵完成;续跑脚本已脱离当前命令会话。当前无需要用户决策的阻塞。
|
||||
- p7w6 TCP 矩阵已终止;任何补跑或设备 monolith 对照不得与门 3/CTS 同时 force-stop 同包 Service。当前没有需要用户决策的阻塞。
|
||||
- X2 已关闭 `InitialCapsStartup` 的测试夹具乱序 flake;不再列为待修。
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,22 @@
|
||||
# B4 集成源码审查(2026-09-23)
|
||||
|
||||
## Verdict
|
||||
|
||||
**land**。审查针对 pipe 在 a4c1bc8b / b19297d5 后的源码;没有遗留正确性问题。
|
||||
|
||||
## 源码核对
|
||||
|
||||
- MobileGL/MG_Backend/DirectVulkan/Renderer/VulkanRenderer.cpp:13524-13593:WaitForFrameSerial 不再把首个匹配 fence 当成整个 frame serial 已完成。它复制 submit index、等待完整 fence 前缀、在记录被退休后从头重扫,并且只在 IsFrameSerialComplete 为真时返回成功;异常路径 drain graphics queue 后也重新检查完成地板。
|
||||
- VulkanRenderer.cpp:13678-13694 与 Renderer/SubmitFencePrefix.h:16-38:聚合等待包含目标 submit 及其之前的所有在飞 fence,使用 waitAll=VK_TRUE;缺失目标记录或无效 fence 会拒绝等待,不会用更早的前缀冒充目标完成。只在整段 wait 成功后推进 submit 完成记录。
|
||||
- VulkanRenderer.cpp:13602-13612:pending-work 判断同时包含主 command buffer 和 pre-pass command buffer 状态,避免把 pre-pass 录制漏出 pending 账本。
|
||||
- VulkanRenderer.cpp:14272-14282、:14408-14422:在 FrameContext 等待并重置槽 fence、释放退休 command buffer 之前,先等待该槽覆盖的完整 submit 前缀;初次获取没有历史 submit,仍走原路径。
|
||||
- VulkanRenderer.cpp:7064-7071、:7689-7695:wire draw 与 dispatch 路径都调用纹理垃圾回收;其内部 256 次调用节流保留,避免只在 frame boundary 清理导致长帧记录滞留。
|
||||
- MobileGL/MG_Remote/Server/StagedTextureStore.h:234-252:extent 改变时清掉旧 bytes 与 coverage,再接收新 run;StagedTextureStoreTest.AdoptRunExtentMoveDoesNotInheritOldCoverage 覆盖旧坐标系内容不可沿用。
|
||||
- MagmaAggregateWaitTest 通过生产 fence-prefix selector 对照两笔同 serial submit 与单 fence 反事实;单 fence 保留目标帧在飞,生产选择覆盖目标前缀并排除下一帧;另有缺失目标索引拒绝用例。
|
||||
- MobileGL/MG_Impl/GLXImpl/GLXImpl.cpp:177 的 ::Display* 是仅为 GCC -Wchanges-meaning 编译错误加的类型限定,未改变对象布局或执行逻辑。
|
||||
|
||||
## Luna 验收证据
|
||||
|
||||
B4 包树的 split 八车道均为 0 失败:unit 2439(2428 pass / 11 skip)、integration split 304(295 / 9)、spawn 220(211 / 9)、TCP 223(214 / 9)、Magma split 102(100 / 2)、spawn 81(79 / 2)、TCP 71(69 / 2)、full split 540(478 / 62)。Verify lanes:1152(865 / 287)与 1086(958 / 128),失败均为 0。G1 .text=0xa52203、符号增删 0/0;fatal census 79/0 未标记;ratchet 173;parity 通过;wire decline audit 53/53、0 未记录或未知;OpenRA inproc/spawn 均 SSIM 1.000000、0 mismatch、0 Fatal、0 unsound serial。
|
||||
|
||||
pipe 集成树合并后的完整门另由 Luna 续跑;这些包树结果不替代该集成门。
|
||||
@@ -0,0 +1,60 @@
|
||||
# 窗口 1b:p7w6 DirectGLES × TCP(2026-09-23)
|
||||
|
||||
## 分母与结论
|
||||
|
||||
清单共 38 例。续跑时 9 例已有终态并跳过(8 PASS、1 idle timeout),本轮新尝试 29 例:16 PASS、8 case-level idle timeout、2 视觉失败、3 missing-result timeout。B4 主机全门与本矩阵有一段时间重叠,可能影响超时耗时;所有超时均保留为未完成/timeout,不能按视觉错图计数。缓存跳过的结果仍计入 38 例分母。
|
||||
|
||||
两项真实视觉失败:Iris Photon v1.3b(SSIM 0.008877075,403,024 mismatch)与 Iris Derivative Main D24.4.14(SSIM 0.850784981,402,598 mismatch),阈值 0.99。Photon 输出几乎全黑,仅见准星和快捷栏;phone logcat 记载 clouds/fog shader varying 类型不匹配,server program unusable 后绑定 program 0。D24 输出保留森林岸边,但前景块发黑、地形/水色偏且玩家手缺失;没有显式应用 shader link failure 或 fatal。两例 server child 均记录 exit=0 / sessionsFaulted=1,client frame reply metrics 仍在推进。两例都需要后续同设备 DirectGLES monolith 对照,才能区分分离路径与本地 GLES 行为。
|
||||
|
||||
八个本轮 idle timeout:REI normal-world 302.162s、Xaero minimap normal-world 302.244s、Xaero world-map normal-world 328.432s、JourneyMap normal-world 308.783s、ModernUI inventory normal-world 376.767s、Create indirect 380.309s、Improved Transparency 26.3 313.152s、Iris BSL ESC menu 854 302.749s。若无 phone reap 证据,表中标“未知”,不推断服务仍活或已退出。
|
||||
|
||||
三个 missing-result timeout:REI inventory、Xaero minimap in-world 由外层 runner 返回 rc=124 / adb_rc=0,但没有 product result JSON;ModernUI inventory 被 1900s 外层上限取消,checkpoint 为 cancelled、child returncode=130,也无产品结果。三例都不计产品视觉失败。
|
||||
|
||||
## 逐例结果
|
||||
|
||||
“缓存跳过”表示该终态来自续跑前已保存结果;“未知”表示保留的 phone-logcat 中没有 child reap 行。
|
||||
|
||||
| # | case id | 结果 | SSIM / mismatch 或耗时 | armed | phone reap |
|
||||
|---:|---|---|---|---|---|
|
||||
| 1 | OpenRA | 缓存跳过 PASS | 1.000000 / 0 | 是 | exit=0 |
|
||||
| 2 | minecraft-1.21.4-startup | 缓存跳过 PASS | 0.999999511 / 520 | 是 | exit=0 |
|
||||
| 3 | minecraft-1.21.4-main-menu | 缓存跳过 PASS | 0.999695947 / 1,198 | 是 | exit=0 |
|
||||
| 4 | minecraft-1.21.11-main-menu | 缓存跳过 idle timeout | 302.505s | 是 | 未知 |
|
||||
| 5 | minecraft-1.17-main-menu-854 | 缓存跳过 PASS | 0.999990861 / 327 | 是 | exit=0 |
|
||||
| 6 | minecraft-1.21.4-in-world | 缓存跳过 PASS | 0.999995438 / 27,575 | 是 | exit=0 |
|
||||
| 7 | minecraft-1.21.4-fabric-sodium-in-world | 缓存跳过 PASS | 0.999993736 / 29,859 | 是 | exit=0 |
|
||||
| 8 | minecraft-1.21.4-fabric-common-mods-in-world | 缓存跳过 PASS | 0.999869638 / 79,685 | 是 | exit=0 |
|
||||
| 9 | minecraft-1.21.4-fabric-common-mods-inventory | 缓存跳过 PASS | 0.999994284 / 24,845 | 是 | exit=0 |
|
||||
| 10 | minecraft-1.21.4-fabric-rei-inventory | missing-result outer timeout | rc=124, adb_rc=0 | 未知 | exit=0 |
|
||||
| 11 | minecraft-1.21.4-fabric-xaero-minimap-in-world | missing-result outer timeout | rc=124, adb_rc=0 | 未知 | exit=0 |
|
||||
| 12 | minecraft-1.21.4-fabric-xaero-world-map-in-world | PASS | 0.999999866 / 181 | 是 | exit=0 |
|
||||
| 13 | minecraft-1.21.4-fabric-journeymap-in-world | PASS | 0.999991302 / 51,263 | 是 | exit=0 |
|
||||
| 14 | minecraft-1.21.4-fabric-modernui-inventory | missing-result outer timeout | 1900s cap; checkpoint cancelled, child rc=130 | 未知 | 未知 |
|
||||
| 15 | minecraft-1.21.4-fabric-rei-inventory-normal-world | idle timeout | 302.162s | 是 | 未知 |
|
||||
| 16 | minecraft-1.21.4-fabric-xaero-minimap-in-world-normal-world | idle timeout | 302.244s | 是 | exit=0, sessionsFaulted=1 |
|
||||
| 17 | minecraft-1.21.4-fabric-xaero-world-map-in-world-normal-world | idle timeout | 328.432s | 是 | 未知 |
|
||||
| 18 | minecraft-1.21.4-fabric-journeymap-in-world-normal-world | idle timeout | 308.783s | 是 | 未知 |
|
||||
| 19 | minecraft-1.21.4-fabric-modernui-inventory-normal-world | idle timeout | 376.767s | 是 | 未知 |
|
||||
| 20 | minecraft-1.21.4-fabric-iris-bsl-in-world | PASS | 0.997109055 / 295,279 | 是 | exit=0 |
|
||||
| 21 | minecraft-1.21.4-fabric-iris-makeup-ultrafast-in-world | PASS | 0.996350744 / 373,304 | 是 | exit=0 |
|
||||
| 22 | minecraft-1.21.4-fabric-iris-super-duper-vanilla-in-world | PASS | 0.990697718 / 204,839 | 是 | exit=0 |
|
||||
| 23 | minecraft-1.21.4-fabric-iris-sundial-lite-in-world | PASS | 0.996295147 / 402,629 | 是 | exit=0 |
|
||||
| 24 | minecraft-1.21.4-fabric-iris-complementary-reimagined-in-world | PASS | 0.999697373 / 292,835 | 是 | exit=0 |
|
||||
| 25 | minecraft-1.21.4-fabric-iris-complementary-unbound-in-world | PASS | 0.999685179 / 299,427 | 是 | exit=0 |
|
||||
| 26 | minecraft-1.21.4-fabric-iris-mellow-in-world | PASS | 0.999893594 / 142,337 | 是 | exit=0 |
|
||||
| 27 | minecraft-1.21.4-fabric-iris-nostalgia-in-world | PASS | 0.999396249 / 293,673 | 是 | exit=0 |
|
||||
| 28 | minecraft-1.21.4-fabric-iris-bliss-in-world | PASS | 0.999113289 / 380,710 | 是 | exit=0 |
|
||||
| 29 | minecraft-1.21.4-fabric-iris-chocapic-v6-lite-in-world | PASS | 0.997410148 / 28,716 | 是 | exit=0 |
|
||||
| 30 | minecraft-1.21.4-fabric-iris-iterationt-in-world | PASS | 0.997988682 / 361,373 | 是 | exit=0 |
|
||||
| 31 | minecraft-1.21.4-fabric-iris-iterationt-nodsa-in-world | PASS | 0.996216918 / 401,106 | 是 | exit=0 |
|
||||
| 32 | minecraft-1.21.4-fabric-iris-photon-v1.1-in-world | PASS | 0.999391584 / 238,436 | 是 | exit=0 |
|
||||
| 33 | minecraft-1.21.4-fabric-iris-photon-v1.3b-in-world | VISUAL FAIL | 0.008877075 / 403,024; threshold 0.99 | 是 | exit=0, sessionsFaulted=1 |
|
||||
| 34 | minecraft-1.21.4-fabric-iris-derivative-main-d24.4.14-in-world | VISUAL FAIL | 0.850784981 / 402,598; threshold 0.99 | 是 | exit=0, sessionsFaulted=1 |
|
||||
| 35 | minecraft-1.21.1-neoforge-create-indirect-in-world | idle timeout | 380.309s | 是 | 未知 |
|
||||
| 36 | minecraft-1.21.1-neoforge-create-instancing-in-world | PASS | 0.999984504 / 48,423 | 是 | exit=0 |
|
||||
| 37 | improved-transparency-minecraft-26.3 | idle timeout | 313.152s | 是 | 未知 |
|
||||
| 38 | minecraft-1.21.4-fabric-iris-bsl-esc-menu-854 | idle timeout | 302.749s | 是 | 未知 |
|
||||
|
||||
## 证据位置与注意事项
|
||||
|
||||
原始 runner log、results/checkpoints、diff PNG、client/server logs 和 phone logcat 位于 /home/swung/w7/logs/p7w6-matrix-resume/pass1/;清单在 /home/swung/w7/logs/p7w6-matrix-resume/cases.txt。B4 host gate 与未知子集的 matrix attempts 重叠,timeout 墙钟可能受主机竞争影响;必要时干净重跑 timeout 项和两个视觉失败的 DirectGLES monolith 设备对照。p7w6 APK 早于 M3,后续门 3/CTS 仍须用最终 APK。
|
||||
@@ -1,26 +1,32 @@
|
||||
# P7 集成交接(2026-09-23,p7w6 矩阵续跑中)
|
||||
# P7 集成交接(2026-09-23,p7w6 矩阵与 B4 pipe 门已结束)
|
||||
|
||||
> 从 [`HANDOFF-2026-09-22.md`](HANDOFF-2026-09-22.md) 续接。本页只记录本轮之后的变化;历史裁定仍见 `INTEGRATOR-DECISIONS-P7.md`,债见 `MG_Remote/CONTRACT-P7.md` §12。集成树只在 WSL `~/w7/pipe` 操作 Git;Windows 主 dev 树不可触碰,Windows 侧只用 `MobileGL-disagg` worktree 按 SHA 快进和推送。所有提交不得有 `Co-Authored-By` 尾注。
|
||||
> 从 HANDOFF-2026-09-22.md 续接。集成树只在 WSL ~/w7/pipe 操作 Git;Windows 主 dev 树不可碰,Windows 侧只在 MobileGL-disagg worktree 按 SHA 快进和推送。提交不得带 Co-Authored-By 尾注。
|
||||
|
||||
## 当前树与设备
|
||||
|
||||
- WSL pipe:M3 已 cherry-pick 到 `9fd768d4`,G1 / 静态门 / 八车道 / verify / OpenRA 回放全部绿;M3 集成者源码审查为 **land**,见 `docs/Disaggregated/notes/handoff/review-m3.md`。其后有一处只改注释的未提交修正和待同步文档。`origin/feat/disaggregated` 最后已推的头是 `f749d4c3`(APK 归档显式路径修复),**M3 尚未推**。
|
||||
- 手机 Redmi `2f7cbe2e` 已装 p7w6 APK:stamp `p7w6-0e16ca27`,签名 SHA `45759c30…`,包 `top.mobilegl.plugin.p7w1.trace`;supervisor `0.0.0.0:40613`,token `p7w1b-lan-token-20260922`,`svc power stayon true` 后 `stay_on_while_plugged_in=15` 且 Awake。WSL 路由 `192.168.21.181/32 via 192.168.31.1 dev eth0` 在,手机 Wi-Fi IP 仍是 `192.168.21.181`。该 APK 基于 M3 之前的源码,后续 M3 设备回归须另建下一版。
|
||||
- p7w6 bsl-esc-menu-854 DirectVulkan × pbuffer:spawn/inproc 各三遍 6/6 过,六张实际图像逐位相同且与旧 monolith SHA 相同,见 `device-window-1/W6-verify/`;本轮没有采集 `wbuf[]` 峰值。主机 M3 之后的 bsl inproc/spawn 均为既有 `ssim=0.998402`、0 Fatal;确有一次 M3 回卷,spawn `wbuf[wlivepk=1052 wdefsync=22]`,日志 `~/w7/logs/p7m3-bslhost/`。
|
||||
- WSL pipe 当前 HEAD 为 b19297d5:已含 M3、B4;B4 集成源码审查 land,完整 pipe 门通过。origin/feat/disaggregated 目前仍在 7ea7ce89;B4 及本页等文档收尾后按 SHA 快进和推送。
|
||||
- p7w6 APK stamp p7w6-0e16ca27,早于 M3 与 B4;手机矩阵已跑完且没有后续设备门启动。设备侧 retrace 后续必须使用最终功能 APK,不能把 p7w6 当 M3/B4/F2 证明。
|
||||
- DirectVulkan bsl-esc-menu pbuffer inproc/spawn 各三遍 6/6,六张图与 monolith PNG SHA 一致;本窗口没有采集 maps 行数和 wbuf[] 峰值。
|
||||
|
||||
## 正在跑的手机批次
|
||||
## p7w6 DirectGLES × TCP 窗口 1b
|
||||
|
||||
- DirectGLES × TCP 的 38 例:旧 p7w5 批次真实分母 38,第一遍 11/38 绿、第二遍只跑完 13 个就因 adb 断开中止;报告 `docs/Disaggregated/notes/p65/window-1b-p7w5.md`。
|
||||
- p7w6 第一段 `~/w7/logs/p7w6-matrix/pass1/` 有前九例终局结果(8 绿、`1.21.11-main-menu` 内部约 302 s 超时);`rei-inventory` 与 `xaero-minimap` 被**外层 900 s** 截断,原始日志保留,不是产品判定。续跑脚本 `~/w7/logs/p7w6-matrix-resume.sh` 用外层 1900 s(清单最大 1800 s),跳过已终局结果,产物 `~/w7/logs/p7w6-matrix-resume/pass1/`,进度 `~/w7/logs/p7w6-matrix-resume.log`,由 `p7w6-matrix-launch.sh` 以 setsid/nohup 启动。写本页时正重跑 `rei-inventory`,手机 child 有持续帧进度。若它中断,先确认 adb / supervisor / 路由,再运行 launcher;脚本会跳过已有 `results.json` 的例子。不要同时跑真机 gate3/CTS:`run_android_retrace_local.py` 会 force-stop 同包 Service。
|
||||
- 真实分母 38:9 个已有终态缓存跳过(8 pass、1 idle timeout);本次尝试 29 个,16 pass、8 case-level idle timeout、2 visual fail、3 missing-result timeout。逐例 armed / reap / SSIM / timeout 记于 notes/p65/window-1b-p7w6.md;原始日志、results/checkpoints、client/server logs、phone logcat、diff PNG 位于 ~/w7/logs/p7w6-matrix-resume/pass1/。
|
||||
- 视觉失败:Iris Photon v1.3b(0.008877075,近乎黑图,服务器 shader varying link 失败)和 Iris Derivative Main D24.4.14(0.850784981,部分场景错绘)。二者都应做同设备 DirectGLES monolith 对照,确认是否由 split 路径引入后再修;矩阵终态记录 child exit=0 / sessionsFaulted=1。
|
||||
- missing-result:REI inventory、Xaero minimap in-world、ModernUI inventory。前两例为外层 runner rc=124;ModernUI 到 1900s 外层上限,checkpoint cancelled/child rc=130。不能把这三项算成 visual product failure。
|
||||
- 8 个 case-level idle timeout:REI/Xaero/JourneyMap/ModernUI normal-world、Create indirect、Improved Transparency、Iris BSL ESC menu 等;部分 phone reap 日志未知。若重跑,逐例保留日志并先降低 host CPU 竞争;idle timeout 和 missing-result 分开记录。B4 host gate 与未知子集矩阵尝试有时间重叠,timeout 墙钟可能受影响。
|
||||
|
||||
## 包树
|
||||
## 已完成包
|
||||
|
||||
- `~/w7/p7-m3`:包提交 `7acad6b8` 已拣到 pipe `9fd768d4`。2048 次 descriptor Acquire 的长帧边界先 flush 当前录制、等 graphics queue idle,再回卷每个 layout cursor 与 memo。2049 个 SSBO 窗口用例 split/spawn 绿;禁用回卷两臂红;pull `.text=0xa52203`、符号 0/0,棘轮 173、parity 0,pipe 完整门 unit 2436 / split 304 / spawn 220 / tcp 223 / magma 102/81/71 / full 540 / verify 1152/1086。review 文本已复制到 `~/w7/notes/handoff/review-m3.md`。集成文档与推送待做。
|
||||
- `~/w7/p7-b4`:**草稿,未落地**。聚合 fence 等待、frame serial 重扫、Present 槽回收前等待、pre-pass 计入 pending、wire 路径每 256 draw 的 texture prune、`AdoptRun` extent 变更清旧 bytes/coverage。构建、Magma 101/80/71、full 539、OpenRA 两臂、G1、普查/棘轮/parity 绿;`AdoptRun` 单测红一次 / 恢复绿。**仍缺聚合等待的可证伪负控、完整八车道与 verify、pipe 源码审查和与 M3 的 VulkanRenderer 冲突合并**。不要按现有绿数直接推。详情 `docs/Disaggregated/notes/p7/magma-b4.md`(仅包树)。
|
||||
- M3:pipe 9fd768d4,ID-P7-50、review-m3 land、完整门已绿;文档与推送已在 3ce5b991 / 7ea7ce89 完成。
|
||||
- B4:pipe a4c1bc8b / b19297d5,ID-P7-51、review-b4 land。聚合 fence prefix、frame serial 重扫、present slot 回收前等待、pre-pass pending、texture prune、staged extent 清理;deterministic aggregate-wait control 已绿。pipe full gate:G1 .text 0xa52203 / symbols 0/0,census79、ratchet173、parity/audit绿,unit2439、split304、spawn220、tcp223、Magma102/81/71、full540、verify1152/1086,OpenRA两臂1.0 / 0 unsound。日志 ~/w7/logs/p7b4-integration-b19297d5-rerun-20260923/。
|
||||
- F2 package p7-f2-driver:raw peer / D11 CSO slot commit db80dd16;PH-3 readback reply bound commit adf2cbe0。前两切片定向测试和 G1 已过。PH-4 staged texture byte bound 仍在 package diff;独立负控曾先触发 ResourceSubData.LevelExtent,已定位为 fixture 未按生产格式打包 respecify upload target,正修正后重验。
|
||||
|
||||
## 下一步
|
||||
|
||||
1. 等 p7w6 的 38 例对照结束,逐例合并两段结果,判断 DataBind 配对与息屏假设;补 `notes/p65/` 报告、ID、CONTRACT-P7 §7。旧驱动的两个外层截断不得计入产品红数。
|
||||
2. 完成 M3 的 docs / ID / CONTRACT / ROADMAP 同步,`check_doc_citations.py --strict`,Windows worktree `git fetch wslpipe feat/disaggregated` → `git merge --ff-only <pipe-sha>` → `git push origin <pipe-sha>:refs/heads/feat/disaggregated`。只按 SHA;不碰 Windows 主 dev 树。
|
||||
3. 手机空闲后做门 3 终局:同会话 36 例 × DirectVulkan × pbuffer × inproc/spawn × 3 遍、逐位一致且对 monolith 差 ≤ 0.0005,OpenRA 必须 1.0;`MOBILEGL_TRACE_APK` 显式指向签名 APK(`f749d4c3` 修复归档错 SHA)。再开 `MOBILEGL_PIPE_STATS=1` 专门采一次 bsl maps 峰值与 `wbuf[]`。随后 CTS AFTER 五块与 `$BASE` 比 ≤0.5 pp、新 crash 0。
|
||||
4. B4 补确定性负控并完整审查、落地;F2 对端畸形记录驱动及 D11/PH-2/PH-6/PH-1/PH-7;wave 3 棘轮余 88;wave 5 fuzz 三臂、异模型整体审查。M3/B4/F2 等落地后须用新 APK 做必要的真机回归,不能把 p7w6 旧二进制的门 3 结果当最终版证明。
|
||||
1. 完成本页其余文档更新、check_doc_citations.py --strict,再从 MobileGL-disagg 按 SHA 快进到 pipe HEAD b19297d5 并推送 origin/feat/disaggregated;不触碰 Windows 主 dev 树。
|
||||
2. 等 PH-4 raw peer + Store unit 独立 Luna 验证通过后 commit package;继续 PH-5 ArchiveVector、PH-2 SlotTables、PH-6、PH-1 (3)(4)、PH-7 (5),之后做 F2 完整包门与集成源码审查。
|
||||
3. 同一设备对 Photon v1.3b 与 D24.4.14 做 DirectGLES monolith 对照;视日志/对照结果再决定修复。必要时在无 host gate 的窗口按需重跑 idle timeout/missing-result 项。
|
||||
4. 功能包完成并部署后做门 3:36 例 DirectVulkan pbuffer × inproc/spawn,三遍逐位一致并与 monolith 同会话差 ≤0.0005,OpenRA 1.0;再采 MOBILEGL_PIPE_STATS 下 bsl maps/wbuf[] 峰值。CTS AFTER 五块与 BASE 比 ≤0.5 pp、新 crash 0。
|
||||
5. wave 3 剩余 ratchet 88;wave 5 fuzz 三臂、P7 收官异模型整体审查。
|
||||
|
||||
无当前需要用户决策的阻塞;设备验证由 Luna 代理执行,避免与测试相互干扰。
|
||||
|
||||
@@ -53,4 +53,6 @@
|
||||
| ID-P7-48 | 2026-09-22 | **窗口 1b 配速矩阵的中期读数与假设(未结)。** 44 / 78 例跑完时 pass 1 = 27/39 红:主因是 `DEVICE LOST`(client `mobilegl.client.log`:「the barrier woke on a peer that had hung up」= 对端 TCP 挂断,随后的 `Fatal{UncarriedInitialBytes, "resource_respecify"}` 是 `PipeFill.cpp:1080` 的**下游**判定,不是原因);其中 11 例的失败时长聚在 **57–61 s**(sodium 56.3、xaero-minimap 60.5、journeymap 61.1、modernui 56.9、rei-normal 60.8、…);pass 2 同例已有 3 例转绿(1.17 main-menu、sodium、common-mods),即非确定性。手机侧:`settings get system screen_off_timeout` = **60000**,`dumpsys battery` = AC 供电(`stay_on_while_plugged_in=2` 只对 USB),`am_kill` / `logcat -b crash` 在本轮时段无任何记录,`:mglsrv` 服务进程存活(child 是每例 spawn 的 pid)。**假设**:runner 每例 `wake-adb` 点亮屏幕,~60 s 息屏后 MIUI 的后台策略切断 child 的 TCP(不是 OOM、不是崩溃、不是配对窗口)。**不在本会话改设备状态**(保持两遍数据同口径);下一位先 `adb -s 2f7cbe2e shell svc power stayon true`(或 `settings put system screen_off_timeout 1800000`)再重跑,并把 supervisor 对 child 的 reap 行(`tcp_device_server.py`)纳入每例采集——现在 `phone:` 列只抓 0.5 s 的 logcat。 | 报告待 `=== ALL DONE`:`~/w7/logs/p7w1b/paced.log`、`paced/pass/<case>/`。 | `notes/p65/`(待写) |
|
||||
| ID-P7-49 | 2026-09-23 | **窗口 1b p7w5 中断批次校正 + p7w6 设备 bsl 验收。** 旧脚本实际挑 38 条 DirectGLES CI case(交接的 39 是误数),pass 1 = 11 绿 / 27 红,其中 23 条 client 记 DEVICE LOST;pass 2 仅 13 条即 adb 从 Windows/WSL 消失,4 转绿、9 仍红。旧脚本同一条 `local` 赋值使两遍写到 `pass/<case>`,13 条第一遍原始文件被覆盖;报告逐例保留摘要能证的事实。p7w6 APK `p7w6-0e16ca27` 已重装并重起 supervisor,`stayon=15`;bsl-esc-menu DirectVulkan pbuffer inproc/spawn 各三遍 6/6,实际 PNG SHA 全同且与旧 monolith 完全相同,0 Fatal。p7w6 主机 TCP OpenRA 冒烟通过;38 例对照续跑中,旧外层 900 s 比 case 清单最大 1800 s 短,`rei-inventory` / `xaero-minimap` 的两次截断不算产品结果,续跑改 1900 s。 | bsl 设备项关闭;门 3 终局形式、p7w6 TCP 对照仍在跑。证据 `notes/p65/window-1b-p7w5.md`、`notes/p7/device-window-1/W6-verify/`。 | `run_android_retrace_local.py` 的显式 APK 路径 `f749d4c3`;手机日志 `~/w7/logs/p7w6-matrix{,-resume}/` |
|
||||
| ID-P7-50 | 2026-09-23 | **M3 到集成树,集成者本人对 pipe 源码审查 = land。** `UniformManager` 当前 frame slot 每 2048 次 descriptor Acquire,在下一条 wire draw/dispatch 入口先 flush 当前录制、graphics queue idle 证明所有旧 descriptor 读者退休,再回卷每个 layout 游标及四类 memo;不用旧 `WaitForSubmitIndex` 的单 fence 推断。2049 个不同 SSBO 窗口单帧用例 split/spawn 绿(`retiredSubmit=2 cached=2048`),禁用入口回卷两臂按名红,恢复绿。主机 bsl-esc-menu inproc/spawn 均为 M2 后同一 `ssim=0.998402`、0 Fatal;真实触发一次 M3 回卷,spawn `wbuf[wlivepk=1052 wdefsync=22]`。G1 `.text=0xa52203`、符号 0/0、普查 79、棘轮 173、parity 0、审计 53/53/0;pipe 门 unit 2436 / split 304 / spawn 220 / tcp 223 / magma 102/81/71 / full 540 / verify 1152/1086 全绿,OpenRA 两臂 1.0 / 0 unsound。 | M3 源码 `9fd768d4` 已落地,审查 `notes/handoff/review-m3.md`;设备 p7w6 是 M3 前二进制,M3 设备回归待下一版。queue idle 的极长帧 stall 只记性能。 | `UniformManager.{h,cpp}`、`VulkanRenderer.{h,cpp}`、`MagmaWireReclaimScenario.cpp`、`magma-m3.md` |
|
||||
| ID-P7-51 | 2026-09-23 | **B4 落地,集成者源码审查 = land。** pipe 提交 a4c1bc8b / b19297d5:聚合 fence 前缀等待与目标索引存在性检查、WaitForFrameSerial 退休后重扫并重查地板、Present 槽 command-buffer 回收前等待、pre-pass work 纳入 pending、wire draw/dispatch 周期性 prune、AdoptRun extent 变更清旧 coverage。确定性单 fence 负控共享生产 fence-prefix selector;完整 split 与 verify lanes 均 0 失败,G1 .text 0xa52203 / symbols 0/0,census 79/0 未标记、ratchet 173、parity/audit 通过,OpenRA 两臂 1.0 / 0 unsound。审查 notes/handoff/review-b4.md。 | B4 package + pipe 门全绿,日志 ~/w7/logs/p7b4-integration-b19297d5-rerun-20260923/。 | VulkanRenderer.cpp、FrameContext.cpp、VkBufferManager.cpp、StagedTextureStore.h、SubmitFencePrefix.h |
|
||||
| ID-P7-52 | 2026-09-23 | **窗口 1b p7w6 DirectGLES × TCP 矩阵结案(独立调查,不是门 3)。** 38 例含 9 缓存跳过;29 次尝试 = 16 pass、8 idle timeout、2 视觉失败、3 missing-result timeout。缺结果/超时不计视觉产品红。Iris Photon v1.3b SSIM 0.008877075、D24.4.14 SSIM 0.850784981;Photon server shader varying link 失败后 program 0,D24 为部分场景错绘;两者需设备 DirectGLES monolith 对照。normal-world 与若干长例停在等待且无 P65 进展;B4 host gate 与未知子集 attempts 重叠,timeout 结论需保留此限制。 | 逐例 armed/reap/SSIM/timeout 见 notes/p65/window-1b-p7w6.md;原始日志与图片 ~/w7/logs/p7w6-matrix-resume/pass1/。 | p7w6 APK p7w6-0e16ca27(M3 前) |
|
||||
| ID-P7-19 | 2026-09-22 | OpenRA 真机分歧改判为 **wire 臂的 GPU 时序竞态**(冷驱动缓存 = 慢 pipeline 创建 → 最终帧回读在最后几批 draw 完成前采样),归 wave 2-B 第 0 片;主机 red-once 用 pipeline 创建延迟旋钮复现;真机验收 = 三次 `pm clear` 冷跑 1.0。F1 保留(机制正确)但不再被当作分歧原因。 | E7:`pm clear` 三遍 0.976493989 / 14658 逐字相同、热跑 1.0、冷 monolith 1.0、`FRAMESINFLIGHT=1` 一绿一红;两臂 client/server 日志逐行相同;diff 只缺最后画的对象。 | `WireFramebuffer.inc`、`VulkanRenderer.cpp`、`F1-verify/README.md` |
|
||||
|
||||
@@ -1,21 +1,21 @@
|
||||
# P7 B4:Magma 提交等待与长帧清理(草稿,未落地)
|
||||
# P7 B4:Magma 提交等待与长帧清理(已落地)
|
||||
|
||||
基线:`0e16ca27`,独立 worktree `~/w7/p7-b4`。本包仍在实现/审查,以下是当前源码状态,不是集成树结论。
|
||||
包分支基于 M3;集成提交为 a4c1bc8b(B4 实现)和 b19297d5(聚合等待负控与 build compatibility)。集成者源码审查为 land,见 review-b4.md。
|
||||
|
||||
## 提交与 frame serial
|
||||
## 修复
|
||||
|
||||
`WaitForSubmitsUpTo(index, timeout)` 收集 tracker 中所有 `submitIndex <= index` 的在飞 fence,以 `vkWaitForFences(..., VK_TRUE)` 等全部信号之后才推进完成计数。`WaitForSubmitIndex` 不再拿一条较晚 fence 代替整个前缀。`WaitForFrameSerial` 等待第一条匹配记录后重查地板;若同一 serial 仍被第二条提交持有,就从头重扫(不能在 `OnSubmitsCompletedUpTo` erase 后继续旧迭代器,也不再读 `record` 引用)。没有可用记录时才 queue idle,最终只按 `IsFrameSerialComplete` 答 true。
|
||||
- DirectVulkan disaggregated 路径新增 WaitForSubmitsUpTo:从在飞提交中收集到目标 submit 为止的完整 fence 前缀,waitAll 等待成功后才推进完成计数。缺失目标索引或空 fence 会失败,不会用更早的前缀冒充完成。
|
||||
- WaitForFrameSerial 在等待后检查 IsFrameSerialComplete 并从头重扫;不能完整证明时才 queue idle,最后仍重查完成地板。Present 在 FrameContext 释放退休命令缓冲、重置槽 fence 前等待该槽的完整提交前缀。pending-work 判断纳入 pre-pass command buffer。
|
||||
- FlushWirePendingCommandsForTextureUpdate 先提交当前录制,再等待 graphics submit 前缀,保证旧纹理采样/保存任务先于独立上传。
|
||||
- Wire draw/dispatch 每 256 次调用触发纹理缓存 prune;StagedTextureStore 在 AdoptRun 遇到 extent 改变时清旧 bytes 和 coverage,不混合不同 level 坐标系。
|
||||
- GLXImpl.cpp 中 XDisplay 的类型拼写限定为 ::Display,规避 GCC -Wchanges-meaning 编译错误;这是编译兼容改动,不改变对象布局或执行逻辑。
|
||||
|
||||
`Present` 在 `FrameContext::WaitAndAcquireNextImage` 重置槽 fence / 释放退休命令缓冲之前,先等该槽 `lastSubmitIndex` 的完整前缀;suspended 后首次 acquire 同样做。readback 原本已有全 fence 等待,保持;mid-frame flush 的退化重用分支改走聚合等待。`HasPendingRecordedWork` 在 disagg 构建下也计 pre-pass 录制,`FlushPendingCommands` 的空批判断对应扩展。这样 `TryDrainFrameTransients` 的 wire `CollectWireObjects(all=true)` 不会在 pre-pass 尚未提交时把未来标签视作空闲。pull 分支的可执行语句保持原样。
|
||||
## 负控与审查
|
||||
|
||||
`FlushWirePendingCommandsForTextureUpdate` 在提交当前录制后等所有在飞 graphics 提交,才允许新的独立上传批修改旧 draw 可能采样的图像。这里可能有明显的 stall 代价,按规则只记录性能,不设门;需在长 trace 上实测。该修正还没有针对单 fence 错退的确定性负控,当前包不得以现有绿数直接落地。
|
||||
MagmaAggregateWaitTest 与生产 fence-prefix selector 共用实现。单 fence 反事实只退休同 serial 的第一笔提交,目标 frame 仍在飞;聚合选择器覆盖目标前缀并排除下一 frame。缺失目标索引控制拒绝早期前缀。两个 focused tests 通过;AdoptRun extent 单测 red-once 记录在包原始日志中。
|
||||
|
||||
## 长帧回收与 staged bytes
|
||||
## 完整 pipe 门(HEAD b19297d5)
|
||||
|
||||
wire draw / dispatch 入口现在调用 `VkTextureManager::CollectGarbage`,使每 256 次的 `pruneWire` 能在一帧内执行。`StagedTextureStore::AdoptRun` 遇到 extent 变化时清旧 `Bytes` 与 `Covered`:单测先送旧 [0,16),再送新 extent 的 [16,32),不能把两种坐标系拼成已覆盖。禁用清理时该单测在旧范围误判覆盖处红,恢复后绿。
|
||||
G1 pull .text=0xa52203,符号新增/删除 0/0;fatal census 79 个站点、0 未标记;ratchet 173;parity 通过;wire decline audit 53/53、0 unlogged/unknown、自测 16/16。八条 split lanes 均 0 失败:unit 2439(11 skip)、integration-split 304(9 skip)、spawn 220、tcp 223、Magma split/spawn/tcp 102/81/71、full-split 540。Verify:unit 2439、integration-verify 1152、integration-verify-split 1086,0 失败。OpenRA DirectVulkan inproc/spawn 均 SSIM 1.000000、0 mismatch、0 Fatal、0 unsound.
|
||||
|
||||
## 已验证/待做
|
||||
|
||||
完整 `MobileGL`、`MobileGLServer`、`MobileGLIntegrationTest` 与 `StagedTextureStoreTest` 构建通过;新 extent 单测绿,红一次按上述覆盖断言红;Magma split/spawn/tcp 为 101/80/71、full-split 539,全绿;OpenRA DirectVulkan inproc / spawn 都 ssim 1.000000、0 Fatal、0 `unsound-serial-complete`。原始日志 `~/w7/logs/p7b4/`、`~/w7/logs/p7-gate-b4a-retrace/`。
|
||||
|
||||
待做:聚合等待的可证伪负控;G1 / 普查 / 棘轮 / parity / 完整八车道 / verify 门;集成者对 pipe 源码复审;与 M3 的 `VulkanRenderer.cpp` 冲突合并;真机回归。未完成前不推送本包。
|
||||
主机完整门日志:~/w7/logs/p7b4-integration-b19297d5-rerun-20260923/。graphics fence 全前缀等待可能增加同步等待时间;性能只记录,不设门。
|
||||
|
||||
Reference in New Issue
Block a user