原始装配性能
Primitive assembly performance
我目前正在试验一些 terrain/height-map 渲染。该地形的每个图块都使用 VBO 和 IBO 进行渲染。为了能够轻松绘制子图块,我使用莫顿编码对索引进行了排序,此时我想到了一些关于原始组装的问题。
原始组装发生在顶点处理之后,但是
- GPU 如何知道要处理哪些顶点?也许其中一些没有索引。他们还会得到处理吗?
- GPU 如何知道顶点的处理顺序?也许一个三角形使用 VBO 的第一个和最后一个顶点,所以原始组装阶段必须等到整个 VBO 被处理?
How does the GPU know which vertices to process? Maybe some of them are not indexed. Do they still get processed?
您的索引缓冲区和绘图调用中的顶点范围决定了处理哪些顶点,并且还定义了图元组装期间的使用顺序。不在vertices/indices范围内的任何顶点都不需要处理。
How does the GPU know in which order the vertices have to be processed? Maybe a triangle uses the first and the last vertex of the VBO, so primitive assembly stage would have to wait until the whole VBO is processed?
处理的顺序顶点在您到达原始装配时并不是特别重要;在顶点着色器级别没有顺序依赖性(据您所知,顶点可能已经全部并行处理)。您只需要知道顶点着色器的结果会附加到称为 post-变换缓存的特殊缓冲区。
几何着色器(可编程原始程序集)将从 post 变换缓存中获取其输入顶点,并且它将按特定顺序执行 that。给定 post-transform 缓存的传统 FIFO 实现,顺序决定缓存替换,基于条带的基元往往会在基元组装期间最大化缓存命中率。 post-transform 缓存中的缓存未命中会导致停顿,但仅适用于不在缓存中的顶点 - 当顶点缓冲区中的每个顶点都被不必要地处理时,它不会停顿。
好消息是现在大多数建模软件都以缓存有效的顺序输出顶点,而且缓存比以往任何时候都更大、更智能,所以这不是您经常需要担心的事情。 15 年前,顶点缓存是一个非常热门的话题,与您交谈的每个人都会对什么最有效有自己的理论,现在这在很大程度上是在浪费时间,而 strip-order 可能是您想要的。
我目前正在试验一些 terrain/height-map 渲染。该地形的每个图块都使用 VBO 和 IBO 进行渲染。为了能够轻松绘制子图块,我使用莫顿编码对索引进行了排序,此时我想到了一些关于原始组装的问题。
原始组装发生在顶点处理之后,但是
- GPU 如何知道要处理哪些顶点?也许其中一些没有索引。他们还会得到处理吗?
- GPU 如何知道顶点的处理顺序?也许一个三角形使用 VBO 的第一个和最后一个顶点,所以原始组装阶段必须等到整个 VBO 被处理?
How does the GPU know which vertices to process? Maybe some of them are not indexed. Do they still get processed?
您的索引缓冲区和绘图调用中的顶点范围决定了处理哪些顶点,并且还定义了图元组装期间的使用顺序。不在vertices/indices范围内的任何顶点都不需要处理。
How does the GPU know in which order the vertices have to be processed? Maybe a triangle uses the first and the last vertex of the VBO, so primitive assembly stage would have to wait until the whole VBO is processed?
处理的顺序顶点在您到达原始装配时并不是特别重要;在顶点着色器级别没有顺序依赖性(据您所知,顶点可能已经全部并行处理)。您只需要知道顶点着色器的结果会附加到称为 post-变换缓存的特殊缓冲区。
几何着色器(可编程原始程序集)将从 post 变换缓存中获取其输入顶点,并且它将按特定顺序执行 that。给定 post-transform 缓存的传统 FIFO 实现,顺序决定缓存替换,基于条带的基元往往会在基元组装期间最大化缓存命中率。 post-transform 缓存中的缓存未命中会导致停顿,但仅适用于不在缓存中的顶点 - 当顶点缓冲区中的每个顶点都被不必要地处理时,它不会停顿。
好消息是现在大多数建模软件都以缓存有效的顺序输出顶点,而且缓存比以往任何时候都更大、更智能,所以这不是您经常需要担心的事情。 15 年前,顶点缓存是一个非常热门的话题,与您交谈的每个人都会对什么最有效有自己的理论,现在这在很大程度上是在浪费时间,而 strip-order 可能是您想要的。