Opengl GPU并行性困境
我的问题是OpenGL是并行绘制原语,还是只有光栅化是这样做的?简单地说,如果我想两次绘制同一个基本体,那么如果我将顶点复制到缓冲区两次,然后只调用DrawArray一次,渲染速度会更快吗?或者,如果我只复制顶点一次,然后调用DrawArray两次,渲染速度会相同吗(不计算CPU调用GPU所需的时间)取决于GPU和驱动程序;典型的图形卡具有多个内核,这些内核可以在多个数据集上运行相同的代码路径。这是经典的并行性,也是openGL并行性的核心 两次调用DrawArray没有帮助,因为整个管道将执行两次Opengl GPU并行性困境,opengl,rendering,gpu,Opengl,Rendering,Gpu,我的问题是OpenGL是并行绘制原语,还是只有光栅化是这样做的?简单地说,如果我想两次绘制同一个基本体,那么如果我将顶点复制到缓冲区两次,然后只调用DrawArray一次,渲染速度会更快吗?或者,如果我只复制顶点一次,然后调用DrawArray两次,渲染速度会相同吗(不计算CPU调用GPU所需的时间)取决于GPU和驱动程序;典型的图形卡具有多个内核,这些内核可以在多个数据集上运行相同的代码路径。这是经典的并行性,也是openGL并行性的核心 两次调用DrawArray没有帮助,因为整个管道将执行
如果要在不同的位置绘制同一网格的多个副本,通常需要在实例之间更改一致性。我尝试的是基于相同的控制点绘制贝塞尔曲线和b样条曲线。我想在几何体着色器中进行大部分计算,并以均匀的方式传递点。这意味着bezier需要一个geom.shader调用,b样条曲线需要一个geom.shader调用。所以我试图两次调用geom.shader,并修改它们之间的bool一致性,将geom.shader从bezier切换到b样条曲线,或者一次调用,将bool放置在VAO中,切换geom.shader。如果geom.shader的两个实例并行运行,那么第二个实例会更快。执行管道两次并不重要,因为顶点着色器是通过的,片段只是显示白色。但是geom.shader很重(计算bezier或b样条曲线需要大量计算),因此,如果我能告诉GPU在为b样条曲线运行geom.shader的同时为bezier运行geom.shader,那会有很大帮助。@CivDav几何体着色器实际上很难并行化,因为输出的数量(发射的顶点/基本体)太多了可以根据运行时执行情况而变化。在其他阶段,在开始执行之前更好地定义工作流。假设几何体着色器中存在静态控制流,您可以假设当GS调用合理时,实现将尝试并行化GS调用。但是,这一切都超出了任何桌面渲染API的范围。