SDL3 shader¶
SDL3 tiles build 在 packaging 前把 GLSL source 编译为 backend-specific artifact;运行时 CCB 按 SDL 报告 GPU format 选择 Vulkan 的 SPIR-V、D3D12 的 DXIL 或 Metal 的 MSL。
权威 pipeline¶
- 人工维护 source 是
data/shaders/*.frag与*.vert; tools/build_shaders.py调用glslangValidator与 SDL_shadercross;.github/actions/build-sdl3-shaders/action.yml固定/构建 toolchain 并上传 artifact;- Make/CMake/MSVC rule 消费 artifact,
src/cata_shader.*在运行时选择并拥有它们。
显式 generator 接口为:
它需要外部 compiler。因工具缺失而失败的命令不能算 shader 验证通过。
生成边界¶
.spv、.dxil、.msl 与 build-stamp 是 generated artifact。修改 GLSL/generator 后
重新生成,不手改 binary。除非主仓库 generated-file policy 明确跟踪,否则大型生成输出
保留在 CI/release artifact。
运行时不变量¶
artifact basename/stage 与 GLSL 匹配;uniform/sampler count 与 runtime creation 匹配; 至少一个 shipped format 适配 active GPU;缺失/无效 artifact 提供有用 log;renderer recovery 安全释放并重建 shader/render-state resource。
验证¶
编译所有请求 format、保留 generator log、运行 SDL3 shader CI lane,在代表性 Vulkan/ D3D12/Metal backend 启动,覆盖各视觉 variant 与 renderer recovery,并比较受控 screenshot。 SDL2 不能验证本 pipeline。
性能与兼容¶
避免 runtime compile 和每次 draw 重建 render state。uniform、binding 或 backend preference 变化属于类似 API 的 renderer 变化,需要三个 artifact format 和 fallback/error-path 证据。