HLSL编译器规范(优化)

我可以阅读有关HLSL编译器执行的优化的地方吗?

例如,在一些代码中,我有不同的variables获得一个常量值(只是让我自己用其他值来调整着色器),稍后我会在一些mathexpression式中使用它们,但实际上可以事先进行预先计算。 编译器是否做这样的事情?

这只是一个例子,我想知道这些事情中的大部分。

我不认为有这样的规范公开存在,但你可以使用D3DDisassemble API函数或在命令行中使用fxc /Fc反汇编你的编译着色器。 如果你写一些例子的着色器,并看看反汇编,这会给你一些它的优化的想法。

请注意,这个程序集是一个独立于机器的中间语言(IL)。 D3D中的着色器首先被微软的编译器编译到这个IL中,然后再由GPU供应商的编译器(它们是D3D驱动程序的一部分)编译成实际的GPU机器指令。 第二阶段需要像AMD的ShaderAnalyzer和NVIDIA的ShaderPerf这样的供应商工具(虽然看起来它没有在一段时间内更新 – 不支持最新的NVIDIA GPU或5_0configuration文件)。 一些进一步的优化可能会在编译的第二阶段完成,这些工具可以让你在一定程度上看到它。

编译器可以做一些非常有效的优化。 找出它能做什么的最好方法是使用像http://developer.amd.com/tools/graphics-development/gpu-shaderanalyzer/这样的工具,它将显示着色器的反汇编。

它没有做的一件事是在着色器代码和CPU代码之间移动计算。