Files
XCEngine/docs/api/XCEngine/Rendering/RenderMaterialUtility/TryBuildBuiltinPassResourceBindingPlan.md

63 lines
2.3 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.
# TryBuildBuiltinPassResourceBindingPlan
**命名空间**: `XCEngine::Rendering`
**类型**: `function`
**头文件**: `XCEngine/Rendering/Builtin/BuiltinPassLayoutUtils.h`
## 签名
```cpp
bool TryBuildBuiltinPassResourceBindingPlan(
const Containers::Array<Resources::ShaderResourceBindingDesc>& bindings,
BuiltinPassResourceBindingPlan& outPlan,
Containers::String* outError = nullptr);
```
## 作用
把 shader 显式声明的资源绑定列表解析成 builtin pipeline 可直接消费的统一 binding plan。
## 当前实现行为
1. 先把 `outPlan` 重置为空。
2. 如果 `bindings.Empty()`,直接返回 `true`,保留空 plan。
3. 逐条绑定执行:
- 通过 [ResolveBuiltinPassResourceSemantic](ResolveBuiltinPassResourceSemantic.md) 解析 builtin 语义
- 通过 [IsBuiltinPassResourceTypeCompatible](IsBuiltinPassResourceTypeCompatible.md) 校验语义与资源类型
- 拒绝同一 builtin 语义重复出现
- 拒绝同一 `set/binding` 对重复出现
- 回填 `bindings``usesConstantBuffers``usesTextures``usesSamplers`
- 更新 `perObject``material``lighting``shadowReceiver`、纹理与采样器槽位
4. 最终计算:
- `firstDescriptorSet = 最小 set`
- `descriptorSetCount = 最大 set - 最小 set + 1`
## 失败条件
当前会返回 `false`,并在 `outError` 可用时写入错误字符串:
- 解析出 `Unknown` 语义
- 语义与 shader 资源类型不兼容
- 同一 builtin 语义出现多次
- 同一 `set/binding` 对出现多次
## 当前边界
- 它只解析调用方传入的显式 `bindings` 列表,不再负责生成 legacy fallback 绑定描述。
- 这里还不会检查“是否缺少 `PerObject`”或“同一 set 是否混用 sampler / 非 sampler”这些更靠后的布局规则属于 `BuiltinForwardPipeline` / `BuiltinObjectIdPass` 的后续阶段。
## 测试覆盖
`tests/Rendering/unit/test_builtin_forward_pipeline.cpp` 当前验证了:
- 显式 `ForwardLit` / `Unlit` shader 资源声明能正确落成 plan
- 显式 object-id / depth-style 资源声明也能正确落成 plan
- 语义重复、`set/binding` 重复和语义/类型不兼容时会返回失败
## 相关文档
- [BuiltinPassResourceBindingPlan](BuiltinPassResourceBindingPlan.md)
- [RenderMaterialUtility](RenderMaterialUtility.md)