You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让shaderc保留HLSL编译SPIR-V时未使用的Uniform绑定?

解决shaderc编译HLSL时保留未使用Uniform绑定的问题

shaderc对HLSL的默认处理会移除未使用的Uniform变量,这是HLSL前端的行为,和LLVM优化级别无关——即使设置优化级别为0,前端依然会剔除未使用的变量(GLSL没有这个默认行为)。要保留这些未使用的Uniform,需要启用HLSL专属的保留选项:

  • 在编译选项中添加set_hlsl_keep_unused_variables(true),这个开关会强制HLSL前端保留所有声明的变量,无论是否被使用。

修改后的Rust代码如下:

let compiler = shaderc::Compiler::new().unwrap();
let mut options = shaderc::CompileOptions::new().unwrap();
options.set_include_callback(shader_include);

if *shader_lang == ShaderLanguage::HLSL {
    options.set_source_language(shaderc::SourceLanguage::HLSL);
    // 强制保留HLSL中未使用的Uniform及其他变量
    options.set_hlsl_keep_unused_variables(true);
}

补充说明

这个选项是HLSL特有的:HLSL编译器默认会做“死代码消除”中的变量剔除,这一步发生在LLVM优化之前,因此调整LLVM的优化级别(比如设为0)不会影响这个行为。只有通过这个专属开关,才能让shaderc保留所有声明的Uniform绑定,方便调试时向这些绑定发送数据。

内容的提问来源于stack exchange,提问作者Makogan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 11:02:39