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

55 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 仅显示。