Files
workinf_Blender_Wasm/docs/tasks/WBV2-P1424-001-compute-ssbo/CS02.md
mes123456 f3e21c6b98
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled
chore: checkpoint web Blender migration source, tools and docs
Accumulated uncommitted work: GHOST Web backend, WebGL/GPU web layer,
web workflow engine and protocol, tooling, docs and task records.
Large generated evidence, user-testing archives, build snapshots and
imported test assets remain untracked.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-11-10 11:18:01 +08:00

3.5 KiB
Raw Blame History

CS02:ShaderCreateInfo、编译器与资源 ABI

  • queueTask: WBV2-P1424-001
  • parentTask: WBV2-P1424-000
  • packageStatus: planned
  • dependsOn: CS01
  • validation: NOT_RUN;acceptance: NOT_CLAIMED

业务与交付

原生 shader create info → 预处理/共享声明 → GLSL → 已有 Naga WASM → WGSL → pipeline

可被业务调用复用的 shader/binding ABI 与结构化诊断;记录每个支持/未支持接口及具体消费者。

最小输入与源码依据

  • blender-5.2.0/source/blender/gpu/webgl/webgl_shader.cc

  • blender-5.2.0/source/blender/gpu/webgl/webgl_shader.hh

  • blender-5.2.0/source/blender/draw/intern/shaders/draw_curves_infos.hh

  • web/app/src/workers/gpu-compute.worker.ts

  • web/protocol/gpu-compute.ts

  • webgl_shader.cc:788 已有 compute 分支;UBO/SSBO 保留独立原生 slot 命名空间。

  • webgl_shader.cc:815 明确拒绝 push constant 数组;:1127 拒绝 image/sampler。

  • 原生 curves 声明包含 uint 访问的紧凑字节数据、StoredFloat3、float4x4 和共享类型,不能按 JS 对象重排。

实现步骤

  1. 复用现有原生预处理和 CREATE_INFO_RES 宏展开;逐个接入当前业务 shader 的 additional_info、typedef、defines、入口及 local size。
  2. 形成稳定 binding 表:资源类别+native slot → group/binding;保留 UBO/SSBO 同号槽位及原生查询位置。
  3. 完成 std140/std430 对齐、矩阵步长、结构/数组步长、紧凑数据访问、push constant 数组以及 specialization 的类型化映射;每次扩展由真实 caller 驱动。
  4. 将原生路径、create-info 名、阶段和编译诊断带回调用者;映射实际设备 storage 数量、workgroup 大小/共享内存及原子操作要求。
  5. 遇到 Naga 前端缺口先定位原生 shader 与编译器现有能力,做等价 lowering;不得改 shader 数学语义或静默跳过资源。image 声明的完成依赖 CS08。

失败边界

超出设备或翻译能力的业务保持具体缺口,不报告“任意 GLSL 全支持”;原生 shader 编译失败不得落到 JS CPU 算法。

发生阻塞时记录具体业务、原生函数/create-info、producer/consumer 和下一修复动作;保留既有产物,继续无此依赖的实现卡,不用缺失证据作为实现阻塞。

延后的用户场景(当前不执行)

  • UBO/SSBO 同号 slot
  • 数组、mat3/mat4、StoredFloat3、runtime array
  • shared memory/atomic/barrier
  • 编译失败与设备上限失败均不发布结果

没有在本次拆解中创建或运行测试 fixture。原生 shader、现有模板和真实业务数据是实现输入;需要新增用户使用 fixture 时在全项目实现完成后安排。

交接

每次报告填写:实际 workflow/route、源码函数与修改、仍未实现接口、产物元数据(仅生成时)、失败/no-mutation 策略、implementation 状态、validation=NOT_RUN、acceptance=NOT_CLAIMED、下一实现动作。记录 unitCount/verifiedUnits/unverifiedUnits/sourceTreeSha256 的来源;未绑定/未验证不增记覆盖。

执行约束:本卡属于 WBV2-P1424-001 / parent WBV2-P1424-000,nextTask=null 保持不变。全部功能实现前不执行测试、回归、冒烟、浏览器验收、类型/语法/上下文检查或证据审计。仅为产物生成进行必要增量编译。源码检索使用 tools/web/search-wbv2-batch-source.mjs 的精确 --source/--unit;GLSL fixture 只读取本卡列出的原文件。不加载完整专项规划、历史日志或源码 inventory。JS 仅承担浏览器 API/传输;几何算法仍使用 OCCT 出口,Three.js 仅显示。