在OpenGL和Direct3D渲染管线中,几何着色器在顶点着色器之后、片元/像素着色器之前进行处理。显然,在片元/像素着色器之后处理几何着色器是没有意义的,但我想知道为什么不将其放置在顶点着色器之前。
从软件/高级别的角度来看,这似乎更有意义:首先运行几何着色器以创建所有所需的顶点(并且丢弃任何仅与几何着色器相关的数据),然后对所有创建的顶点运行顶点着色器。明显的缺点是现在必须在新创建的每个顶点上运行顶点着色器,但是在当前管线中,需要在几何着色器中为每个顶点运行任何逻辑,因此在这里没有太大的性能损失。
我假设由于几何着色器在两个管线中都处于此位置,因此存在硬件原因或非明显的管线原因,这使得它更加合理。
我知道在运行几何着色器之前需要进行多边形链接(如果它以单个点作为输入,则可能不需要?),但我也知道它需要在几何着色器之后运行,所以在这些阶段之间运行顶点着色器是否仍然有意义?
从软件/高级别的角度来看,这似乎更有意义:首先运行几何着色器以创建所有所需的顶点(并且丢弃任何仅与几何着色器相关的数据),然后对所有创建的顶点运行顶点着色器。明显的缺点是现在必须在新创建的每个顶点上运行顶点着色器,但是在当前管线中,需要在几何着色器中为每个顶点运行任何逻辑,因此在这里没有太大的性能损失。
我假设由于几何着色器在两个管线中都处于此位置,因此存在硬件原因或非明显的管线原因,这使得它更加合理。
我知道在运行几何着色器之前需要进行多边形链接(如果它以单个点作为输入,则可能不需要?),但我也知道它需要在几何着色器之后运行,所以在这些阶段之间运行顶点着色器是否仍然有意义?