mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
[Fix] (P13 W5 S7): the verb stamp and read verdicts build only with the poison that asks them.
This commit is contained in:
@@ -47,7 +47,9 @@ namespace MobileGL::MG_Pipe {
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
#if MOBILEGL_BUILD_RECORD_ARM
|
||||
// The stamp is the poison's (m_filled, the generations): a build without MOBILEGL_PIPE_POISON
|
||||
// compiles no read check that could ask any of this. Every transport build has the poison.
|
||||
#if MOBILEGL_BUILD_RECORD_ARM && MOBILEGL_PIPE_POISON
|
||||
// ================================================================================
|
||||
// P5: the server's verb stamp, the residual-pull counter, and the four-way read verdict
|
||||
// ================================================================================
|
||||
@@ -603,7 +605,7 @@ namespace MobileGL::MG_Pipe {
|
||||
if (ownership == MGPipeFieldOwnership::kBarrierPulled)
|
||||
CountBarrierPull(field, gPipeInputs.CurrentVerb());
|
||||
}
|
||||
#endif // MOBILEGL_BUILD_RECORD_ARM
|
||||
#endif // MOBILEGL_BUILD_RECORD_ARM && MOBILEGL_PIPE_POISON
|
||||
|
||||
#if MOBILEGL_PIPE_VERIFY
|
||||
namespace {
|
||||
|
||||
@@ -46,6 +46,15 @@
|
||||
- **本机 retrace**:`~/mgl-p13-tools/sync.sh` 才物化 LFS fixture(`sb.sh` 用的 `sync2.sh` 会把它们复原为指针);跑前设 `MOBILEGL_GPU_HANG_BUDGET_MS=0`。
|
||||
- 完整的 site 分类表与后续步骤(W4b 纹理别名 store、W4c、Magma)见 Plan 代理的设计(会话 scratchpad `W4-design.md`;要点已并入本节)。
|
||||
|
||||
## 3c. W5 要点(记录臂移出 MG_Remote,S7 已翻转)
|
||||
|
||||
- **形态**:`MOBILEGL_BUILD_RECORD_ARM` 是普通 CMake 变量,S7 起恒 ON(S8 unifdef 掉)。push 库(无 MG_Remote,FCL 形态)现在跑记录臂:`runtime_mode_proof` 要两形态都有 `MG_Record` 符号(push 294 / split 300),push 仍 0 个 `MG_Remote`。
|
||||
- **代码位置**(命名空间 `MG_Record`):暂存库 `MG_Backend/Record/`;`RecordVerbSink`(记录动词的服务端半边,`ServerVerbSink` 继承它);动词发射器 + monolith 动词端口 + GPU 写集合 `MG_Impl/Pipe/Verb/`;持久映射跟踪器 `MG_State/GLState/BufferState/`。跨层只经缝:`MG_Pipe/PipeSessionFail.h`(`MGPipeRecordFail/Latch/Latched`,`FatalFunnel.cpp` 静态注册)、`PipeClientSeam.h`(设备丢失 / 拒绝后确认丢失)、`MG_Backend/Record/ApplyRoleBackend.h`、`VerbPort.h` 的 `VerbSession` 解析器(`EmitTables.cpp` 静态安装)。include-closure 的 `record-core` 探针守住它们不碰 `MG_Remote/` 与 flatbuffers。
|
||||
- **翻转后的教训**:试翻转「能链接」不等于「行为相同」——split 里的 monolith 记录臂跑过的很多块仍挂在 DISAGG 上,push 编进了谓词却漏了消费者,结果是 Magma 析构崩(wire store 没在 VMA 之前清)、Espryt 读回 ERROR(记录动词的 verb 状态盖章没编进来)。办法:`scratchpad/suspects.py` 扫「DISAGG 块里出现记录臂机制」的块,逐个判;然后用 push 的 unit + integration-gpu + verify 树三套跑到绿。还剩的 DISAGG 块(约 300)都是传输本身:会话、共享图像、T0、设备丢失闩、角色拆分、caps 来源、EGL 服务端窗口。
|
||||
- **verify 树第一次跑 monolith 记录臂**:监视读钩子在端口的中性 pack 窗口里改用已应用的 pack(`MonolithPortApplyingForVerify()`);monolith 的 poison-omission 对照改省略 `ReadPixels:GetPixelStoreParameters`(记录臂不再读 `GetActiveTextureUnit@GenerateMipmap`)。
|
||||
- **FCL 开关**:`MOBILEGL_PIPE_PERSISTENT_MPROTECT=0` 不装跟踪器的 SIGSEGV 处理器(JVM 隐式空指针检查也用 SIGSEGV,处理器按设计链式转交,但从未在 HotSpot 里跑过)。设备上 FCL 冒烟仍是延后检查项。
|
||||
- **剩余**:S8(unifdef 掉 `RECORD_ARM`、`!RECORD_ARM` 臂、`retired_switches` 规则、`wire_declines_audit` 回到单守卫);测试文件里仍有 DISAGG 守卫的记录臂用例(`SplitBufferTest` 等)随 S8 / W6 处理。
|
||||
|
||||
## 4. 下一步
|
||||
|
||||
1. W2/W3a 的 CI:看完归类;然后推 W3b/W3c(普查基线已同提交退役名字)。
|
||||
|
||||
Reference in New Issue
Block a user