在移动设备上进行精度转换可能会导致性能下降。我想最小化我们的着色器(glsles,hlsl和spir-v)中的转换。我被内置的函数精度搞糊涂了。
考虑以下代码:
mediump float a, b;
mediump float c = max(a, b);mediump float a, b;
float c = max(a, b);mediump float a, b;
mediump float c = sin(max(a, b));mediump float2 uv;
uniform mediump sampler2D tex;
mediump float c = texture2D(tex, uv);会发生什么转换?如果内置函数返回类型依赖于参数,则代码#1、#3、#4不能进行转换。是对的吗?
发布于 2019-12-08 21:25:20
我不认为你总是可以预测转化,因为着色器编译器将优化使用最低的精度和尽可能少的转化。但我怀疑你有错误的心态,正在为一些无关紧要的事情进行微观优化。对于典型的实现,精确转换应该是非常便宜的。你应该关注的是对你的输入、输出和其他变量不必要地使用高精度的,这应该会有更大的影响。
最简单和最优化的方法是将precision mediump float;放在着色器的顶部,因此精度默认为mediump,然后在支持降低精度的设备(即移动GPU)上进行测试,并查看是否有任何损坏。然后,您可以有选择地在必要的位置添加highp 。
https://stackoverflow.com/questions/58678213
复制相似问题