[MG_Remote, docs] (P7): CONTRACT-P7 §3.2 records package B (readback race, copy-image, default blit, depth mip bake, mip diagnostic), ID-P7-23

This commit is contained in:
2026-09-22 16:40:02 -04:00
parent 76b7469389
commit 09ba88e70d
2 changed files with 7 additions and 4 deletions
+6 -4
View File
@@ -59,11 +59,13 @@ 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 未定义) |
| `copy-image-in-place` | `VulkanRenderer.cpp` | **已退役(wave 2-B,`9e126a14`)** | `srcImage == dstImage` 时单次转 `GENERAL`、两侧布局 GENERAL、一次写回;同 mip+layer 且矩形重叠 → decline(GL 未定义) |
| `mipmap-shader-format-or-shape`(真机 iterationt 的死因) | `WireFramebuffer.inc` | **半退役(wave 2-B,`c5fa52f9`)** | Fatal 行带上格式 / 尺寸 / aspect / 缺的 feature 位;image 不能作附件时经 scratch 走颜色 shader mip;仍无 shader 臂的形状**具名**拒绝 |
| **wire 回读竞态(OpenRA 真机 0.976494 的原因)** | `WireFramebuffer.inc` / `VulkanRenderer.cpp` | **已修(wave 2-B,`64530ed2`)** | `ReadWirePixels` 在 pooled fence 下 flush 帧内 draw 但不等待,拷贝是后一次提交,二者只靠一条 barrier 相连,而 `UNDEFINED` / `PRESENT_SRC_KHR` 的源 scope 映射成 `TOP_OF_PIPE`+0 = 空 scope——刚 present 过的默认 framebuffer正是这个布局;修后回读等它读的那一帧(red-once:`fences=2` vs `1`,`completed=71` 不变)。真机验收 = 三次 `pm clear` 冷跑 1.0 |
| `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}` 烘焙程序 |
| `default-color-blit-shape` | `WireFramebuffer.inc` | **已退役(wave 2-B,`0a8a7a0c`)** | 恒等变换回落 `vkCmdBlitImage` 臂;非恒等旋转先 resolve/copy 进 scratch 2D RGBA 再 shader blit;四旋转之外 decline。顺手修出拒绝背后的活 bug:普通 blit 臂对 3D 源按 layer 寻址(z 0..1 读到 slice 0)。旋转半边只在真机可证 |
| `multisample-blit-shape` / `-aspect` | `WireFramebuffer.inc` | **未做(B 剩余 2 处 `@P7`)** | 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` | **已退役(wave 2-B,`227d8220`)** | DEPTH-only 走 `WireDepthMipmap.{vert,frag}` 烘焙程序((A));`MOBILEGL_BAKED_INTERNAL_SHADERS` 表驱动新鲜度门((D))覆盖树内全部烘焙头——首跑抓出 iterationRP witness 头过期;D\|S 合并 / 仅 stencil → decline |
| `uniform-buffer-byte-tail` → **已退役(wave 2-A,`5a14e5a1`)** | — | — | 见上行;真正可达的形状是 `size` 非 4 倍数(offset 非对齐在前端就 `GL_INVALID_VALUE`) |
| `texel-buffer-native-format` | `UniformManager.cpp` | **已 decline(wave 2-A)** | 零占位 view,fetch 读零;只在 Adreno 上有可观测(`GL_RGB32F` buffer texture) |
| `unaligned-{texel,storage,atomic}-buffer-range` | `UniformManager.cpp` | **已具名 decline(wave 2-A)** | 跳过该绑定;可写 range 的 copyback 不做(分不出 readonly、录制点在 B/C 的 draw 尾,配方 `magma-a.md` §3.1);真正活的缺口是 `glBindBufferRange(GL_ATOMIC_COUNTER_BUFFER, …, 4, 4)`,Adreno 64 字节对齐 |
@@ -25,4 +25,5 @@
| 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-21 | 2026-09-22 | wave 2-A 落地(`5a14e5a1..2f48ccf4`)并批准:`uniform-buffer-byte-tail` 退役(外扩到字边界读进 staging,一次子字拷贝进 padded block);两处 native-range **钳制**;三处 unaligned-*-range 与 `texel-buffer-native-format` 具名 decline(可写 range 的 copyback 不做——该站点分不出 readonly,且录制点在 B/C 的 draw/dispatch 尾;配方在 `magma-a.md` §3.1);两条算术不变量(`*-offset-overflow`)留作 hook 经过的具名 Fatal、不再带 `@P7`。审计写的「offset = alignment + 1」测试**不可达**(前端对非对齐 offset 报 `GL_INVALID_VALUE`),真正活的缺口是 `glBindBufferRange(GL_ATOMIC_COUNTER_BUFFER, …, 4, 4)`(GL 只强制 `offset % 4`)。 | `notes/p7/magma-a.md`;`@P7` 树上只剩 B 的 5 处(`WireFramebuffer.inc` 4 + `VulkanRenderer.cpp` 1)。 | `UniformManager.cpp`、`F1WireScenario`、`CONTRACT-P7.md` §3.2 |
| ID-P7-22 | 2026-09-22 | S1(`IterationRPProgram203Scenario` exposure texel 差一个)**改判为环境敏感而非 tcp 专属**:A 在未钉 ICD 的树上 inproc 也 3/3 红、pipe(钉 lavapipe ICD)inproc 绿、L 只在 tcp 红。记为 §12 债,归 P6.5 StreamLink × Magma 交叉项的主人(未派);helper 已钉 ICD 免再混淆。 | 三棵树三种结果,唯一变量是 ICD 配置与臂。 | `CONTRACT-P7.md` §12 |
| ID-P7-23 | 2026-09-22 | wave 2-B 落地五片(`c5fa52f9..64530ed2`):mip 形状拒绝半退役 + 具名、深度 mip 烘焙 (A)(D)、copy-image-in-place、default-color-blit(含 3D 源 blit 寻址 bug)、**wire 回读竞态修复**(OpenRA 真机分歧的机制,主机用 fence 计数 red-once,因为本机布局是 GENERAL 撞不上空 scope)。B 未做的三项(multisample-blit ×2、AllocatorDebtScope ×2、B′ 棘轮下降)另派 **B2**。`WireColorBlit.inc` / `VulkanRenderer.h` 在簇内顺手改,批准。 | `notes/p7/magma-b.md`。 | `WireFramebuffer.inc`、`VulkanRenderer.{cpp,h}`、`WireDepthMipmap.*`、`scripts/bake_internal_shaders.py`(若有) |
| 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` |