HLSL 中的#defines 是否会增加任何性能开销?
HLSL 中的预处理器是否相当于 C(++) 中的预处理器,在编译之前它实际上会更改代码?如果是这种情况,那么使用此类方法似乎允许在不添加运行时条件语句的情况下专门化着色器......这是真的吗?
In HLSL is the preprocessor equivalent to the one in C(++) where it literally alters the code before compilation? If this is the case then using such methods would seem to allow specializing a shader without adding run-time conditional statements... is that true?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
#define
按照您的预期工作。它们在编译时进行评估。如果您想检查编译器的输出以确保没有发生(不必要的)分支,请使用 HLSL 编译器 (fxc) 的
/Fc
选项来生成已编译着色器的汇编列表。#define
s work as you expect them to. They are evaluated at compile-time.If you would like to check the output of the compiler to be sure that there is no (unnecessary) branching occurring, use the
/Fc <file>
option to the HLSL compiler (fxc) to generate an assembly listing of the compiled shader.