@@ -1,24 +1,2 @@
# P8 集成者裁定日志(server 侧仿真缺口与 split 覆盖)
> 形式沿用 [`../p11/INTEGRATOR-DECISIONS-P11.md`](../p11/INTEGRATOR-DECISIONS-P11.md):一条裁定一个 ID,只记「定了什么、为什么、影响哪些文件」。计划见 [`PLAN-P8.md`](PLAN-P8.md)。
| ID | 日期 | 裁定 | 理由 | 影响 |
|---|---|---|---|---|
| ID-P8-1 | 2026-09-29 | **重定界 ** (用户批准):原范围在 `README.md` 与路线图行里划掉保留;方向改为补 server 侧缺口与 split 覆盖;原 10 项里 6 项与 2 个门、开放问题 9 关闭(`PLAN-P8.md` 「已关闭」表)。 | 只读核查逐项对代码:split 可达的仿真拒绝只剩 Espryt 生成 mip 两名;client 侧工作已由 P5b–P9 完成。 | `ROADMAP.md` 、`notes/p8/` |
| ID-P8-2 | 2026-09-29 | 门改写:覆盖门 = 归一化后 split ⊆ monolith ∪ 豁免表;create-indirect 往返门 = 多帧设备 trace 加载帧非 `ResourceCreate` 等待 = 0。 | 原两门按字面不可达 / 是空的(trace 只 1 帧)。 | A 包、P8-0 |
| ID-P8-3 | 2026-09-29 | G1 不变;各包 split 半边放在 `MOBILEGL_BUILD_DISAGGREGATED` 下。monolith 半边(例如 B2 的 CPU 滤波读陈旧影子)若 red-once 证实,在 dev 上单独修再合并(用户同意)。 | 沿用 P9 / P11 做法。 | B、C、E |
| ID-P8-4 | 2026-09-29 | 第一波七包并行(P8-0、A、B、C、D、E、F,树 `~/w7/p8-<包>` ,分支 `p8/<包>` ,集成树 `~/w7/p9-main` 分支 `p8/main` );G 等 P8-0 的测量;C、D 为 P13 前置。设备只由 P8-0 使用(红米,约半天,用户同意)。 | 各包改动区域不重叠(`DirectGLES.cpp` 按行段分开)。 | 全部 |
| ID-P8-5 | 2026-09-30 | **P8-0 普查 ** (主机 80 + 78 次重放、红米 trace 语料 77 × 两臂、FCL 原版 26.3 实机;插桩不提交):真实内容里只有 D 命中——原版 MC 26.3 × Magma × inproc 把 44,768 次 indirect 调用 / 13,028,030 个 draw(约 870 / 帧)在 CPU 展开;B1 / B2 / C / E 的前提在真实内容 0 命中,靠构造的 red-once 成立。**G 不做**:最大 program archive 354,846 B = arena/4 的 4.2 %,最大 `draw_vbo` 记录 1,936 B。create-indirect 门(ID-P8-2)在多帧 trace 上成立:rd12( 250 帧)与 improved-transparency-26.3( 1210 帧)加载帧非 `ResourceCreate` 等待 = 0。设备语料 spawn 70/77、monolith 68/77 达 0.99,差的都在基线(未插桩对照)上复现。 | FCL 上只有原版 26.3(无 Iris / Complementary / Create,未下载),B2 实机对照做不了,改用两条 Complementary trace(生成 mip 只见 R11F 与 RGBA8)。 | [`S.md` ](S.md );树外 `~/w7/notes/p8/s-report.md` |
| ID-P8-6 | 2026-09-30 | **F 落地 ** ( `2b4ae539` ):我们的 client 发不出的形状改判 `ProtocolCorruption` ——multi-draw `CLIENT_INDICES` / `INSTANCED` 闩、Magma `client-vertex-array` ;Magma 生成 mip 着色器形状在 wire 臂由 Fatal 改具名拒绝 `MipmapShaderFormatOrShape` (与 monolith 一致,判定在长链之前);`kCapViewportArray` / `kCapNeedsHost{Index,Ubo}Bytes` 与索引镜像哨兵标保留位、不改号。 | 只有外来 peer 能到;mip 形状是后端覆盖缺口不是坏记录。`@P` 标签本不计入 census( BRIEF-F 前提不成立)。 | [`F.md` ](F.md ) |
| ID-P8-7 | 2026-09-30 | **A 落地 ** ( `8133cd52` + `24b8aef6` ):246 个只在 monolith 登记的用例登上 split / spawn / tcp( `P8Coverage.cmake` );五条 server 读的旋钮车道各起一个 tcp supervisor;撤 `ClientSideIndices` / `GuiBatch` 排除;`split_coverage.py` + 豁免表(mechanism / single-backend / no-records / pending-fix)进 CI 与 `gate.sh` ,断言归一化后 monolith ⊆ split ∪ 豁免(ID-P8-2)。按名普查 304 例:235 三臂全过、55 同因跳过、13 no-records、1 真红(Espryt spawn / tcp 默认帧缓冲深度读 0, pending-fix,第二波)。 | 旋钮只放 client 环境时 tcp 副本静默跑默认臂(旧 `ForcedDs` tcp 条目同病,已修)。**规则**:server 读的旋钮车道要么独立 tcp supervisor,要么只上 split + spawn,要么证明对其他用例惰性(E 的 13×7 extent 限域)。 | [`A.md` ](A.md ) |
| ID-P8-8 | 2026-09-30 | **B 落地 ** ( `2f530ad8` ):Espryt server 按记录的生成窗口 [BASE+1, min(MAX+1, 存储层数, 链长)) 生成 mip( B1,与 Magma 同口径);RGB16F / RGB32F 先试驱动原生,驱动拒绝时 server 从驱动读回基级做 2×2 box(不读 client 影子;读回被拒且暂存覆盖整级才用暂存);split 名 `generate-mipmap-storage` / `generate-mipmap-cpu-filter` 退役。 | 基线 B1 六例 × 三臂、B2 四例 Fatal;只修检查不修链时 BASE=1 会被 level 0 覆盖。强制 CPU 臂旋钮 `MGITEST_ESPRYT_FORCE_CPU_MIPMAP` 只上 split + spawn(合 ID-P8-7 规则)。 | [`B.md` ](B.md ) |
| ID-P8-9 | 2026-09-30 | **C 落地 ** ( `94410715` ):split server 给 shader 写过的 buffer 孪生体打标(SSBO / 原子计数、可写 buffer image、XFB),restart 重写、multi-draw rebase、`*IndirectCount` 、CPU 取用的 indirect 字段、XFB scatter、fp64 收窄一律经 `SplitHostBytesForCpuRead` 懒刷新后读;T0 臂先落排队常驻写再 `glFinish` ( P11-B2 那条债的 split 半,主机无 T0、未能证红)。 | 前提成立:基线 Espryt split / spawn / tcp 21/21 红。monolith 13 条缺陷用例运行时按名跳过(`SkipBrokenMonolith` ,原因写在代码里),第二波 dev 修复落地后解除。 | [`C.md` ](C.md ) |
| ID-P8-10 | 2026-09-30 | **D 落地 ** ( `92eab9f3` ):Magma wire 臂把 `glDraw*Indirect` / `glMultiDraw*Indirect[Count]` 直接录成 `vkCmdDraw*Indirect[Count]` ;CPU 展开只留给设备发不出的 COUNT 形态(与 monolith 同条件);shader 写过的 store 在首个 indirect 读前录一次屏障;范围 / 对齐 / 缺 store 四条具名拒绝。 | create-indirect split 上 321/322 次 indirect 读每次一整 GPU 等待(每次回放约 8 s)→ 0。去屏障的像素用例在 lavapipe 上不红(顺序执行),如实记录。 | [`D.md` ](D.md ) |
| ID-P8-11 | 2026-09-30 | **E 落地 ** ( `39cd8fb7` ):审计前提不成立——split 的 `glGetTexImage` 只读 GPU、不碰影子;真实缺口是驱动拒绝 attach( Adreno RGB16 / 16 位 SNORM)时会话以 `Fatal{ReplyError,"ReadPixels"}` 结束。改为由 server 暂存 store 作答(整级、extent 相符、未被驱动写过),store 跟随同格式 `glCopyImageSubData` (FollowCopy),跟不了的打粘性 driver-written 标;否则具名拒绝。死闩 `CopyImageSubData+RENDERBUFFER` 删除,census 79 → 78。 | red-once 11 条。E 的 monolith 半(拷贝后读拷贝前的 CPU 影子)归第二波 dev。 | [`E.md` ](E.md ) |
| ID-P8-12 | 2026-09-30 | **第一波集成头 `39cd8fb7` 整套门 ** : G1 符号增 0 减 0、`.text` `0xa5ba13` ( pull 不变);fatal census 78; link ratchet 172; parity 0;修订 5; wire-declines 58 / 59 站点;卫生 12/12 + `split_coverage` (两后端 monolith 701, Espryt 门控 612 + 豁免 89, missing 0);unit 2721; split / spawn / tcp 735 / 649 / 661; Magma 271 / 248 / 216 / 668; gpu monolith / inproc 3684 / 3684; verify 5471; retrace 230/236(已知 6 例 iterationrp)。集成者裁定:契约旧措辞加 P8 修订注(`CONTRACT-P5B.md` 、`CONTRACT-P5E.md` 、`CONTRACT-P7.md` );monolith 缺陷共 12 条(报了 13 条,C、D 各报一次 Magma `glMultiDrawArraysIndirectCount` ),取舍见 ID-P8-13;开放问题 9、11 关闭,15 答「是缺口」。 | 串行集成六次,每次整套门;两处追加冲突(`CMakeLists.txt` 、`WireDeclines.def` )都两块保留,一次合并修复(A 的豁免行)。 | 树外 `~/w7/notes/p8/int-*.md` |
| ID-P8-13 | 2026-09-30 | **第二波 ** : split 两包(SE Espryt + 文档、SV Magma)串行合入 `p8/main` ; dev 一包(MD)只修 create-* 在 Adreno 上的三条真实负载缺陷,其余 9 条 monolith 缺陷留给 P13( `DEBTS.md` )。 | ID-P8-3 原意是「B2 的 monolith 半边上 dev」,第一波报出 12 条(13 条报告去重),全在 monolith 专属臂里、P13 换臂即消失;按 P8-0 真实内容命中收窄,只修 Create 在 Adreno 上会碰到的三条(dev 是现行产品)。这是对 ID-P8-3 的收窄,已告知用户。 | `PLAN-P8.md` 第二波 |
| ID-P8-14 | 2026-09-30 | **MD + MF: Create 在 Adreno 830 上的真实缺陷 ** 。(1) Espryt 部分范围失效映射越过排队的环形拷贝,Adreno 丢拷贝 → create-instancing 整块地形空(0.870);dev 修(`f973008c` ,已推 origin dev),feat 的 push 阶梯镜像同一守卫(MF),G5 两条阶梯正文按本裁定重钉;红米两构建 monolith 0.870 → 0.99998 × 3,关守卫回 0.870。spawn 未受影响是时序运气(同样隐患,前面一串整 buffer 映射先把拷贝提交了),现在靠设计。(2) **create-indirect 在红米上坏(ID-P7-4)不是 MobileGL 缺陷 ** : fixture 在桌面上抓(SSBO 偏移对齐 16),Adreno 要求 64,按 GL 规则被拒的 `glBindBufferRange` 让 Flywheel 的拷贝着色器写乱 indirect 命令;接受 16 字节偏移的诊断构建让 Magma 到 0.99999。该 fixture 的设备车道记为不适用。(3) 每次 indirect draw 整 buffer 同步回读只在 feat 的 monolith 臂(`62bfe461` ),dev 无;Magma「计算写 → indirect 读无依赖」被证伪(加屏障不变)。 | 设备 red-once 各一;主机无法显出丢拷贝(llvmpipe 不丢)。 | `Managers.cpp` 、`Managers.h` 、`p3a_untouched_regions.sh` 、`p4a_untouched_regions.sh` ; [`MF.md` ](MF.md );树外 `md-report.md` |
| ID-P8-15 | 2026-09-30 | **SE 落地 ** : spawn / tcp 的默认帧缓冲把 surface 发布给 client(原先前端占位为空就提前返回,client 留着 D32F_S8 猜测,blit 丢深度模板);A 的 pending-fix 豁免删除;CPU 生成 mip 在基级被驱动写过且读回被拒时具名拒绝;D 的 case 3 在 Espryt split 臂放开;`unmigrated_emulation_sites.py` 进 CI 与门,死名 `copy-image-shadow-mirror` 删除;包说明 87 处行号按内容重对。 | red-once 9 条。副作用:P12 server 自有窗口的尺寸事件在 spawn / tcp 下第一次生效(设计如此),由出口设备检查验证。 | [`SE.md` ](SE.md ) |
| ID-P8-16 | 2026-09-30 | **SV 落地 ** : Magma 3D 原生 mip blit 用 1 层(校验层 VUID-00240 / 01707 / 01708 消失);深度模板 mip 拒绝有了 tally 行 `MipmapDepthStencilAspect` ; 1D 深度 mip 具名拒绝;wire 臂 `glDispatchComputeIndirect` 原生(无 CPU 路径,沿用 D 的屏障规则)。 | red-once 9 条;`.Mip3DValidation.` 需要校验层,只放在装了层的车道。 | [`SV.md` ](SV.md ) |
| ID-P8-17 | 2026-09-30 | **合并 dev `f973008c` ** ( `37174242` ):dev 的 Magma 空 uniform 修复与 P11 的 `7784d6bb` 是同一处,合成一条代码路径;dev 的 `UnboundUniformBlockScenario` 登上 split 各臂。G1 符号 0 / 0, pull `.text` `0xa5ba13` → `0xa5ba43` (dev 修复)。 | dev 是现行产品;ID-P8-3。 | `UniformManager.cpp` 、`P8Coverage.cmake` |
| ID-P8-18 | 2026-09-30 | **第二波集成头 `49430538` 整套门 ** : G1 符号 0 / 0、`.text` `0xa5ba43` ; census 78; ratchet 172; parity 0;修订 5; wire-declines 61 / 66 站点;卫生 14/14(含 G5 两个、`split_coverage` 、`unmigrated_sites` );unit 2724; split / spawn / tcp 747 / 661 / 673; Magma 277 / 253 / 220 / 678; gpu monolith / inproc 3744 / 3744; retrace 230/236(已知 6);verify 5514 中 1 例 `LogForwardChannel.APeerThatStopsReadingCostsWarnLinesNotTheCallersTime` 负载下超时,单跑 5/5 过(入债)。SV 的集成门途中 WSL 自动升级重启,重启后首轮 gpu monolith 的 664 个 tcp 失败是残留的 fixture 状态文件,重跑 3744 全过。 | 串行合入 dev、SE、SV、MF 四次,每次整套门。 | 树外 `~/w7/logs/p8/int-*-summary.log` |
| ID-P8-19 | 2026-09-30 | **P8 收官 ** (候选头 `49430538` )。出口设备检查(红米,两后端 × monolith / spawn, 77 格 / 臂):66 行与 P8-0 基线在 1e-6 内一致,**无一格变差**; create-instancing × Espryt × monolith 0.870 → 0.99998;低于 0.99 的只有已知集合(create-indirect 不适用、1.21.11-main-menu、derivative-main Espryt、photon)。P12 跨机门 (b) 复跑:DirectGLES openra 1.0 / rd12 0.999883010(与 P12 记录一致),DirectVulkan openra 1.0 / rd12 0.999884191; server 自有窗口上 openra 两后端 1.0, Espryt 第一次发出 640×480 尺寸事件(SE 的副作用),转屏会话存活。trace split 双后端 SSIM 门(主机 230/236,仅已知 6 例)成立。收官不派 agent 审:契约 `CONTRACT-P8.md` 各条对代码逐条核对,G1 整阶段符号 0 / 0。 | create-indirect × Magma × spawn 由 0.84 变为每次丢设备(该 fixture 的 indirect 命令本身是乱的;推断 D 原生化后乱命令直达 GPU,monolith 臂一直如此且基线上也偶发丢设备),入债。 | `CONTRACT-P8.md` ;树外 `~/w7/notes/p8/x-report.md` |