From cf7ca59fabd691b3a8351dde9271ae5ea4fb5748 Mon Sep 17 00:00:00 2001 From: Swung0x48 Date: Tue, 22 Sep 2026 16:09:09 -0400 Subject: [PATCH] [MG_Remote, docs] (P7): CONTRACT-P7 records package C - vertex-layout split (seven masked reasons), the death-ops debt retired, the opcode-49 white-box deferred to P11, ID-P7-20 --- MobileGL/MG_Remote/CONTRACT-P7.md | 6 ++++-- docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/MobileGL/MG_Remote/CONTRACT-P7.md b/MobileGL/MG_Remote/CONTRACT-P7.md index 76d2c516..ed1ecd57 100644 --- a/MobileGL/MG_Remote/CONTRACT-P7.md +++ b/MobileGL/MG_Remote/CONTRACT-P7.md @@ -60,7 +60,7 @@ P7 收官 = 五道出口门同时成立(§2–§7),而不是路线图 P7 |---|---|---|---| | `uniform-buffer-byte-tail` | `UniformManager.cpp:2391` | **退役**(真机 MC 报告 §5 的活边界) | 拷贝窗口外扩到 4 字节边界进 transient slice,再 `vkCmdCopyBuffer` 对齐内部到正确子字目的;`CopyWireBufferRangeToSlice` 扩 | | `copy-image-in-place` | `VulkanRenderer.cpp:10383` | **退役** | `srcImage == dstImage` 时单次转 `GENERAL`、两侧布局 GENERAL、一次写回;同 mip+layer 且矩形重叠 → decline(GL 未定义) | -| `vertex-layout` | `WireDraw.inc:245`、`VertexInputStateFactory.cpp:439-500` | **拆分** | `buffer-window` 一种保留为协议错(经 hook 的具名 Fatal——它抓过 Redmi 的 VAO 哈希碰撞);其余六种形状/格式原因改 monolith 的「屏蔽该属性继续画」,`BuildWireVertexInput` 出 `unsupportedAttribMask` | +| `vertex-layout` | `WireDraw.inc:245`、`VertexInputStateFactory.cpp:439-500` | **已拆分(wave 2-C,`8385a338`)** | `buffer-window` 一种保留为协议错(经 hook 的具名 Fatal,家族词暂留 `UnmigratedVerb`——改成更诚实的 `ProtocolCorruption` 要在 `MG_Pipe::MGPipeFatalFamily` 加一行 + 适配臂,§3.3 未花这笔,记 §12);其余**七**种形状/格式原因(含审计之后新增的 `offset-overflow`)改 monolith 的「屏蔽该属性继续画」,`BuildWireVertexInput` 出 `unsupportedAttribMask`;`vertex-format-conversion` 同包改 decline。`WireDraw.inc` 从此无 `@P7`(普查 15 → 13 处 / 3 文件) | | `default-color-blit-shape` | `WireFramebuffer.inc:601` | **退役** | 恒等变换回落 `vkCmdBlitImage` 臂(`:611-624`);非恒等旋转先 resolve/copy 进 scratch 2D RGBA 再 shader blit(复用 `:560-590` 的 scratch);四旋转之外 decline | | `multisample-blit-shape` / `-aspect` | `WireFramebuffer.inc:631/:641` | **退役** | shape:resolve 进 scratch 单采样再 `vkCmdBlitImage` 缩放/翻转;aspect:MS 深/模板 → 单采样用 `VK_KHR_depth_stencil_resolve`(`DynamicBackendParameters` 里查扩展)或 `texelFetch(sampler2DMS)` 写 `gl_FragDepth` 的 shader resolve;单采样 → MS 尺寸不同 decline | | `depth-stencil-mipmap` | `WireFramebuffer.inc:753` | **退役**(随烘焙 (A)) | `GenerateWireMipmap` 深度分支接 `WireDepthMipmap.{vert,frag}` 烘焙程序 | @@ -152,7 +152,9 @@ verify 今天只在 monolith 注册(`MG_IntegrationTest/CMakeLists.txt:1684-17 ## §12 记录债 -- Magma 两进程 client 在 `StateObjectDeathOps` 落地前 `ObjectDeaths=0`:`CtWireScenario` 死亡用例在 Magma 臂按名 skip(§2.3)。 +- ~~Magma 两进程 client 在 `StateObjectDeathOps` 落地前 `ObjectDeaths=0`:`CtWireScenario` 死亡用例在 Magma 臂按名 skip(§2.3)。~~ **已退(wave 2-C,`04292f06`)**:两处 skip 守卫删除,死亡用例在三臂全绿;泄漏的是 **server 的 twin**(framebuffer 无 wire delete opcode,用例现在两边计数都读)。 +- §5.4 的「白盒断言发出的是 `BufferSubDataResident(49)`」在本树**不可达**:resident 发射需要 GPU 常驻存储 → 需要 `AdoptPersistentMap` → split 下 T2 对每次采纳都 decline(`PipeApply.cpp:2331`),T0/T1 归 P11。本阶段证明到「server 按自己的表发布该位、client 镜像在双后端 × 三传输收到」为止;`rsd=` PipeStats 计数器在 P11 落地采纳档后会显示这些记录。 +- §5.3 的 `g_programResourceCaches` 删除只在 disaggregated 构建:monolith 消费者已改读归档(red-once 在 monolith 臂也红),但归档成员必须 `#if MOBILEGL_BUILD_DISAGGREGATED` 才能守 G1,pull 构建保留旧缓存——钉子挪动那天一行改完,**P13**。 - 门 3 的「不确定」在 wave 1 E0 之前无法区分「同 case 多次结果不同」与「不同 case 各自低于阈值」;两个历史点值(0.988998 / 0.976494)无 per-case 归属。 - `MEASUREMENTS.md` §7.2 的同名比对自 P5b 起未重跑;「22 → texture readback」「3 → query」两行债务的关闭以 wave 3 的重跑为准。 - Android 模拟器 retrace 车道每轮 2–6 例 flaky(含 monolith 对照):门 1 的任何模拟器证据都先过「连续 N 轮绿」再算数。 diff --git a/docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md b/docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md index 1515f924..3ed21a17 100644 --- a/docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md +++ b/docs/Disaggregated/notes/p7/INTEGRATOR-DECISIONS-P7.md @@ -22,4 +22,5 @@ | ID-P7-16 | 2026-09-22 | 出口门 5 = **五个可测块**(texture 1055 / shader-image 125 / packed-pixels 4732 / dsa 371 / ssbo 124),UBO 块(GTF 模块)在本 CTS 提交 `0b04c470e` 无 kc-cts 不可运行,记 unrun;API 版本 **KHR-GL46**(设备探针列出 697 例,`mgprobe` PASS 含 default_fb=ok);`$BASE` 用 pre-wave-2 库 `p7w1-d260f110`,AFTER 同版本同 caselist。 | 设备探针结果;caselists README 已预告 GTF 缺席。 | `tools/cts/caselists/`、`notes/p7/device-window-1/CTS-base/` | | ID-P7-17 | 2026-09-22 | E2(present credit 扫描)与 E0b 的 ARMED 三遍确定性**不单独跑**:E1 已证明 run-ahead 整条线出局(OpenRA lockstep 仍 0.989、崩溃 case 照崩),确定性在 F1 修复后的复测里按 §7.2 一起做。 | runbook §5 的判别规则;设备时间省给 wave 2 复测与 CTS。 | `E1-lockstep/README.md` | | ID-P7-18 | 2026-09-22 | F1 落地(`5d698cb9`):split 起会提到 `MG_State::Init()` 之前(`InitSplitRolesBeforeState()`),`CapsMirror::ServerConsumes` 不再从 placeholder 作答(他线程 bring-up 在飞时等 250 ms,否则 `Fatal{CapsBeforeFirstSnapshot}`);**批准** `MG_Config::SplitTransportRequestedByConfig` 作为该门的武装闩——任何绕过 `MG_ConfigLoader::Init()` 手设 `Transport` 再造前端对象的生产路径都会退回 placeholder 作答,今天只有 `ServerLoopTest` 这么做且写了理由。 | 发射者是确定性的(11 个默认纹理在起会前 `resource_create`),主机也发生;不做「把警告调轻 / callMask 全 1」。 | `MobileGL/Init.cpp`、`MG_Backend/Init.cpp`、`CapsMirror.{h,cpp}`、`ClientSession.cpp` | +| ID-P7-20 | 2026-09-22 | wave 2-C 落地(`04292f06..205793ca`)并批准其五条:§5.4 白盒(opcode 49 上 wire)在 P11 采纳档落地前不可达,以「server 按表发布 + 镜像收到」为验收;`g_programResourceCaches` 的 monolith 删除归 P13(G1);`buffer-window` 家族词暂留 `UnmigratedVerb`(改 `ProtocolCorruption` 记 §12);`vertex-layout` 屏蔽原因是七种不是六种;死亡缺口是 server twin 泄漏而非 client slot 泄漏(framebuffer 用例两边计数)。`p7_worktree.sh` 补 `MOBILEGL_ITEST_VK_ICD` 钉。 | 各条理由见 `notes/p7/magma-c.md`。 | `CONTRACT-P7.md` §3.2/§12、`p7_worktree.sh` | | 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` |