highp、mediump、lowp之间的性能差异

use*_*425 3 opengl-es glsl

我正在优化着色器代码以渲染大三角形条带。有人建议我应该尽可能为我的顶点属性使用低精度数据类型,所以我开始尝试。我将一些组件从高电平减少到低电平,但没有获得任何严重的性能改进。因此,我使用 glGetShaderPrecisionFormat 来获取格式的范围和精度,但是我收到了相同的 highp、mediump 和 lowp 值,这意味着例如

int rangehigh[2], precisionhigh;
glGetShaderPrecisionFormat(GL_VERTEX_SHADER, GL_HIGH_FLOAT, rangehigh, &precisionhigh);

int rangemedium[2], precisionmedium;
glGetShaderPrecisionFormat(GL_VERTEX_SHADER, GL_MEDIUM_FLOAT, rangemedium, &precisionmedium);

int rangelow[2], precisionlow;
glGetShaderPrecisionFormat(GL_VERTEX_SHADER, GL_LOW_FLOAT, rangelow, &precisionlow);
Run Code Online (Sandbox Code Playgroud)

rangehigh/rangemedium/rangelow 都具有相同的值以及 precisionhigh、 precisionmedium 和 precisionlow。

这是否意味着使用mediump或lowp代替highp根本不会更快?

问候

Col*_*mbo 5

是的,在您的特定设备上,无论您指定 lowp、mediump 还是 highp,都将使用相同的精度。因此,在顶点着色器上切换到较低精度不会有任何好处。

老实说,顶点着色器性能很少是图形密集型应用程序中的性能瓶颈。通常是填充率(即简化像素着色器并减少过度绘制)或 CPU API 开销(着眼于减少绘制调用)。有时可能是顶点提交(在适当的情况下,使用 VBO、索引绘制调用并减小所提交顶点的大小/改进对齐方式)。

在优化之前尝试确定瓶颈是什么很重要,否则你可能会认为很多努力都是徒劳的。