【问题标题】:Perfomance depending on index type性能取决于索引类型
【发布时间】: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


【解决方案1】:

由于您的着色器非常简单,您的渲染性能很可能会受到其他因素的影响,例如顶点数据传输率。

GPU 必须为每个实例读取 138 个索引。在 200 万个实例中,只有 1.02GB 的索引数据必须由具有 32 位索引的 GPU 读取。当然,对于 16 位索引,传输速率减半。使用一半的数据,索引数据更有可能完全适合顶点拉取缓存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-29
    • 1970-01-01
    • 2022-11-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2018-04-01
    相关资源
    最近更新 更多