4浮点颜色比4字节颜色更快吗?

时间:2012-04-10 16:58:21

标签: performance caching graphics

假设我正在定义一个顶点结构。我可以通过将顶点的RGBA颜色打包到单个unsigned int中来保持顶点结构较小。因此:

struct Vertex
{
    float pos[3];
    float normal[3];
    float texcoord[2];
    unsigned int color;    // RGBA
};

然而,当顶点到达我的顶点着色器时,它将被转换为4浮点值:GLSL中的vec4或HLSL中的float4。据推测,这种类型转换需要一段时间在GPU上。

因此,将顶点的颜色属性定义为4浮点数会更快,从而避免转换吗?

...
float color[4];
...

或者这种颜色的较大内存大小会使GPU缓存效率降低并导致更慢渲染吗?

1 个答案:

答案 0 :(得分:4)

现代GPU具有专用硬件,用于在加载时解压缩打包格式,因此转换实际上是免费的。减少内存带宽需求和更高效的顶点缓存使用将提高性能,因此规则应尽可能紧密地包装所有顶点属性,同时仍保持足够的精度以满足您的目的。