Skip to content

fix(webgpu): validate resource bindings and isolate test baselines - #1608

Open
jinwuwu001 wants to merge 9 commits into
mainfrom
bugfix/billyjin_webgpu_bindgroup
Open

jinwuwu001 wants to merge 9 commits into
mainfrom
bugfix/billyjin_webgpu_bindgroup

Conversation

@jinwuwu001

Copy link
Copy Markdown
Collaborator

现状问题

  • WebGPU uniform 绑定缺少完整的范围校验;shader layout 保留可选纹理槽位时,缺失绑定会导致 bind group 验证失败。
  • 外部纹理缺少渲染用途仍可被包装为 Surface,错误延迟到提交时暴露。
  • Web 测试存在单线程执行并发测试、缺少参考缓存仍通过、运行时错误不影响退出码、普通测试自动回写失败 MD5 等问题。

方案依据

  • uniform 布局由数据生产方负责,绑定层只校验范围,不自动扩容或截断。
  • 外部纹理导入核验实际用途,Surface 创建及时传播失败;合法的 attachment-only render target 仍可使用。
  • 普通验证与主干参考生成分离,参考必须来自固定主干源码,任何生成失败都不得污染已有缓存。

放弃方案

  • 不通过扩大所有 uniform buffer、统一增加纹理默认用途或屏蔽 validation error 掩盖调用问题。
  • 不将当前修复分支的输出直接作为参考,不自动接受失败结果,也不要求工作区 stash 或切换分支。

改动点

  • 增加防溢出的 uniform 范围校验,按需补齐可选纹理及 sampler 的占位绑定。
  • 增加外部纹理 usage 校验和即时 Surface 创建失败处理,补齐受影响测试的渲染用途及线程能力守卫。
  • 缺参考明确判失败;runner 锁存 GPU、页面、下载错误,并停止普通模式缓存回写。
  • 专用参考流程固定 origin/main 快照,隔离构建,还原并校验 LFS 资源,重新构建 JS 绑定;完整验证后事务发布缓存。
  • 修复隔离构建中 vendor 工具软链接导致的配置定位错误,增加基准判定、资源导入、页面和脚本回归测试并更新说明。

预期

  • 非法 WebGPU 资源绑定在 tgfx 层被拒绝,可选绑定合法绘制。
  • Web 测试不再因缺参考或运行时错误产生假通过,失败运行不改变参考缓存。

验证

  • 渲染修复版本经用户实际运行:WebGPUUniformBindingTest 4 项、WebGPUBackendTextureTest 5 项、BaselineTest 3 项全部通过,无 SKIP。
  • 同轮 WebGPU 全量运行:529 项中 159 通过、370 因缺少参考缓存失败;未记录未捕获 WebGPU validation error 或 Invalid CommandBuffer。这不是全量截图回归通过。
  • 最新脚本及页面回归:74 项全部通过,包括真实软链接与 CMake 路径解析测试。
  • 普通 WebGPU CMake 配置、两种模式适配器的 Emscripten 语法检查通过。vendor 路径修复已在实际失败目录重新配置,并核验两个 target 的生成命令。
  • 尚未完成最终版本的完整编译和浏览器参考生成;原生完整构建曾被第三方依赖构建锁阻塞,截图参考比较仍未闭环。
  • 未修改仓库基准版本或实际参考缓存;日志及用户其他未提交改动未纳入 PR。

后续工作

  • 按约定,本 PR 不接入 Web CI;下一个 PR 完成主干参考生成、输出审核、全量验证及流水线接入。
  • 合入后建立的新参考用于防止后续回归,不作为本次修改前后画面一致性的证明。

目标分支:main。

@jinwuwu001

Copy link
Copy Markdown
Collaborator Author

已在 c68c0ff 修复 Check Code Format 报出的两个文件、五处格式差异,未修改逻辑。

  • WebGPURenderPass.cpp:LOGE 多行字符串格式。
  • WebGPUUniformBindingTest.cpp:include 顺序和两处初始化列表缩进。
  • 已使用 CI 同款 clang-format 14 检查本 PR 全部 18 个 C++ 文件,均与格式化输出一致;git diff --check 通过。
  • 本轮仅修复格式,未重新运行功能测试;等待新提交的 CI 检查结果。

@jinwuwu001

Copy link
Copy Markdown
Collaborator Author

已推送 LayerTest.cpp 的两个补充提交:

  • 5f92307:使用 Image::type() 替代 dynamic_pointer_cast,移除测试的 RTTI 依赖。
  • eee2455:在类型解引用之前分别 ASSERT 两张图片非空,空输入安全报告用例失败,不导致进程崩溃。

验证:clang-format 14 和 git diff --check 通过;使用实际 Emscripten WebGPU 参数,在 TGFX_TEST_ACCESS_PRIVATE 开启和关闭两种配置下语法检查均通过(保留 -fno-rtti)。本轮未重新运行完整构建或浏览器测试;未修改基准及其他未提交文件。

参考生成仍使用 origin/main,这些补充需要合入并更新主干引用后才会被主干参考构建使用。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant