【发布时间】:2020-11-14 11:58:44
【问题描述】:
我在“绘制”数百万个三角形时发现了一些有趣的东西:将索引类型从 VK_INDEX_TYPE_UINT32 切换到 VK_INDEX_TYPE_UINT16 每秒绘制的三角形数量增加了 1.5 倍!我想知道,速度差异怎么这么大?
我使用间接索引实例化(我这么多)绘图:25 个顶点,138 个索引(46 个三角形),2^21~=2M 实例(我懒得寻找禁用 vSync 的位置),每帧 1 个绘图。每帧总共 96'468'992 个三角形。为了获得最清晰的结果,我将视线从三角形上移开(丢弃光栅化具有几乎相同的性能)
我有非常简单的顶点着色器:
layout(set = 0, binding = 0) uniform A
{
mat4 cam;
};
layout(location = 0)in vec3 inPosition;//
layout(location = 1)in vec4 inColor; //Color and position are de-interleaved
layout(location = 2)in vec3 inGlob; //
layout(location = 3)in vec4 inQuat; //data per instance, interleaved
layout(location = 0)out vec4 fragColor;
vec3 vecXquat(const vec3 v, const vec4 q)
{// function rotating vector by quaternion
return v + 2.0f *
cross(q.xyz,
cross(q.xyz, v)
+ q.w * v);
}
void main(){
gl_Position = vec4(vecXquat(inPosition, inQuat)+inGlob, 1.0f)*cam;
fragColor = inColor;
}
和直通片段着色器。
原语 - VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST
结果:
~1950MTris/s,32位索引
~2850MTris/s,16位索引
GPU - GTX1050Ti
【问题讨论】:
-
顺便说一句,从三角形列表切换到三角形条带会以类似的方式提高性能 - 对于 32 位索引,对于 16 位索引会略有下降。虽然我的模型很小,但更大的模型可能会有很大的不同。正如我最近了解到的,~3000MTris/s 是我的 GPU 的硬件限制......
标签: performance graphics vulkan