When the fractional part of a float fixes your shader
a day ago
- 作者为音乐视频背景实现了一个 Voronoi 图着色器,并在配备 RTX 4070 的 Windows 电脑上遇到了卡顿问题。
- 调试过程中,将问题隔离到噪声函数;用 `x - floor(x)` 替换 `fract(x)` 暂时解决了问题。
- 进一步使用 RenderDoc 和反汇编调查发现,将字面浮点数从 398.0 改为 398.1 消除了卡顿。
- 根本原因确定为 DirectX FXC 编译器中的错误编译,通过 ANGLE 转译层,对于类似整数的输入,它优化掉了 `fract` 调用。
- 该问题特定于使用 ANGLE 将 GLSL 转换为 DirectX 11 的 HLSL 的 Windows 系统,在其他平台或 API 上未出现。