用途:帮助编写符合 WGSL 一致性(uniformity)分析的着色器,避免在非一致控制流中调用受限内建函数,并正确声明可选特性。
主要能力:说明哪些内建函数必须处于一致控制流,如 textureSample、textureSampleBias、textureSampleCompare、textureGather(无 level 参数)、dpdx/dpdy/fwidth 及其变体,以及 compute 阶段的 workgroupBarrier、storageBarrier、textureBarrier、workgroupUniformLoad。指出 textureSampleLevel、textureSampleGrad、textureSampleCompareLevel、textureLoad、textureStore 及带显式 level 的 textureGather 可在非一致分支中安全使用。
使用方式:修复 derivative_uniformity 时,将采样或导数调用提升到分支之外存入 let,再基于该值分支;顶点或计算阶段改用 textureSampleLevel 或 textureLoad;需要逐调用 LOD 时用 textureSampleGrad 传入显式梯度。修复屏障违规时,把 workgroupBarrier 等移出所有 if、loop 或提前返回路径,或先写入 var<workgroup> 再无条件屏障后分支。读取共享内存用 workgroupUniformLoad。enable、requires、diagnostic 指令必须位于着色器顶部、任何声明之前;@diagnostic(severity, rule) 可作用于函数、复合语句或控制流语句。
适用场景:WGSL 着色器出现一致性诊断、需要启用 f16、subgroups、clip_distances、dual_source_blending 等 enable 扩展,或使用 readonly_and_readwrite_storage_textures 等 requires 语言扩展时。
限制:不要用 diagnostic(off, derivative_uniformity) 压制错误,采样 LOD 会变为未定义;不要在顶点或计算入口调用仅限片元阶段的内建函数;不要为适配器未报告的特性发出 enable 指令,否则着色器创建失败。资料未提供具体平台版本之外的收费、价格或效果信息。