mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-11-07 01:53:24 +09:00
[Docs] (P13 W4b): record the Adreno 750 measurement of the copy-then-refused-readback fix.
This commit is contained in:
@@ -26,8 +26,9 @@
|
||||
//
|
||||
// THE KNOB. MGITEST_ESPRYT_REFUSE_TEXTURE_READBACK_EXTENT=<w>x<h> is read BY THE ESPRYT SERVER
|
||||
// (WireTextureReadback.inc, ReadTextureImageWire): a colour level of exactly that extent is
|
||||
// treated as a level the driver refused to attach, which is what an Adreno does for every one of
|
||||
// these formats and what llvmpipe can be made to do no other way. The `DirectGLES.<arm>.StoreRead.`
|
||||
// treated as a level the driver refused to attach - what a driver without EXT_texture_norm16 /
|
||||
// EXT_render_snorm does for these formats (an Adreno 750, which has both, reads them all back
|
||||
// through the GPU; measured in P13), and what llvmpipe can be made to do no other way. The `DirectGLES.<arm>.StoreRead.`
|
||||
// entries set it, and this scenario then builds its textures at THAT extent instead of the default
|
||||
// one - so the knob is scoped by the extent, and the tcp lane's shared supervisor can carry it
|
||||
// (the TcpServer.Start fixture's ENVIRONMENT) without touching any other entry, this scenario's
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
| W3c | 完成 | `e2c90986` `be86ca17` | 删 `ResidualValueBlock`;op 46 退役为拒绝行;verify 的 A2 负对照接管能力比对 |
|
||||
| W4a–c(Espryt) | 本地完成 | 14a `3e2aff1d` `cef29781`;谓词、W4a、W4b/W4c(本地) | Espryt monolith 全部族走记录臂:缓冲、indirect、client 数组、绑定点、GPU 写标记、fp64、重启索引、multi-draw、纹理(别名式 staged 纹理 store)、读回(含 pack buffer)、帧缓冲、单元 / sampler / image、program(monolith CSO 记录带档案副本)、XFB;进程内 verb 端口;§1.4 别名刷新。本地 unit 2905/2905、integration-gpu 3650/3650、DirectGLES retrace 29/29(另 11 条缺 LFS fixture 或主机 llvmpipe 的 iterationrp) |
|
||||
| W4(Magma) | 本地完成 | 一次性换臂(本地) | monolith 注册 wire 资源表;进程内持久映射捐赠(`DonateWireBuffer`:wire store 本就 host-visible / coherent / 常驻映射,交给前端,取 T0 的「回读无字节」语义);`GetSyncStatus` 在记录臂上对同一未提交 fence 连续轮询 64 次后提交一次(split 由 apply 线程空闲时提交,monolith 无空闲时刻);ABA 对照车道钉前端臂(其对象是前端臂的身份表,W6 随之删);`DescriptorPoolGrowth` 的 wire 预算按记录臂而非传输判断。本地 integration-gpu 3650/3650、DirectVulkan retrace 29/29(本机须 `MOBILEGL_GPU_HANG_BUDGET_MS=0`,与 CI 相同,否则 llvmpipe 上 >2 s 的提交触发挂死看门狗) |
|
||||
| W4b 补 monolith 登记 | 本地完成 | | `DirectGLES.Monolith.CpuMip.*`(`MGITEST_ESPRYT_FORCE_CPU_MIPMAP`)与 `DirectGLES.Monolith.StoreRead.*`(`MGITEST_ESPRYT_REFUSE_TEXTURE_READBACK_EXTENT`),各自私有日志断言本臂的日志行。StoreRead 首跑 3/4 红:别名式纹理 store 不跟随 `glCopyImageSubData`,目的 level 被标为驱动写过,驱动又拒读 → `Fatal{ReplyError, "ReadPixels"}`(Adreno 上 RGB16 / 16-bit SNORM 的真实 monolith 回归)。修复:`FollowCopy` 在别名模式下先把目的 level 取成服务端自有副本再搬窗口(从不写前端内存),`AdoptClientBoxes` 随后在该副本上落客户端的框;单元 `AnAliasingStoreFollowsACopyIntoAServerOwnedDestination` |
|
||||
| W4b 补 monolith 登记 | 本地完成 | | `DirectGLES.Monolith.CpuMip.*`(`MGITEST_ESPRYT_FORCE_CPU_MIPMAP`)与 `DirectGLES.Monolith.StoreRead.*`(`MGITEST_ESPRYT_REFUSE_TEXTURE_READBACK_EXTENT`),各自私有日志断言本臂的日志行。StoreRead 首跑 3/4 红:别名式纹理 store 不跟随 `glCopyImageSubData`,目的 level 被标为驱动写过,驱动又拒读 → `Fatal{ReplyError, "ReadPixels"}`(W4 引入的 monolith 回归,只在驱动拒读该格式时可达)。修复:`FollowCopy` 在别名模式下先把目的 level 取成服务端自有副本再搬窗口(从不写前端内存),`AdoptClientBoxes` 随后在该副本上落客户端的框;单元 `AnAliasingStoreFollowsACopyIntoAServerOwnedDestination`。**真机(Adreno 750,Lenovo Y700,2026-10-06)**:不加旋钮时修复前后都全绿,日志里没有 store 路由——该驱动有 `GL_EXT_texture_norm16` 与 `GL_EXT_render_snorm`,四种格式的读回都走 GPU,P8-E 记的「Adreno 拒读 RGB16 / 16 位 SNORM」是读代码推断、在 750 上不成立(更老的 Adreno 或缺这两个扩展的驱动才可达)。加 `MGITEST_ESPRYT_REFUSE_TEXTURE_READBACK_EXTENT=12x6` 强制拒读:修复前 monolith 的四个 copy 用例 `Fatal{ReplyError, "ReadPixels"}`(inproc 全绿),修复后 monolith 与 inproc 全绿(探针 `storeprobe`,裸 adb-shell ELF + pbuffer) |
|
||||
| W4d | 部分(本地) | | monolith 记录臂的 8 个值类字段改由 `set_context_values` 记录供给(不再 residual 填充)。转发访问器替身、`kFatal` 前端指针字段删除、`PipeInputs.h` 去 `MG_State` 头并入 W6/W7(它们是删前端臂与模块边界的一部分) |
|
||||
| W5 S0 | 本地完成 | | 设计见 `notes/p13/` 下的 `W5-DESIGN.md`(临时 CMake 变量 `MOBILEGL_BUILD_RECORD_ARM`,S7 一次翻转,S8 unifdef 掉)。开放三点已定:记录失败钩子在 `FatalFunnel.cpp` 静态注册;`RecordArmTable` 承接三个持久映射 / wire 延迟旋钮(`IpcTable` 仍只在 DISAGG);S7 加 mprotect 臂开关(FCL 是 JVM 进程,SIGSEGV 链接是真风险)。清单 `W5-INVENTORY.csv`(`tools/w5_classify.py`):A 385 块 / 10586 行、B 29/434、C 92/10878、D 89/4683、E 77/933、F 292/3184、N(取反 / 复合)30/1545。主机 x86_64 Release 基线:push 库 `.text` 11540563、0 个 `MG_Remote::` 符号;split 库 `.text` 12766899、1651 个 |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user