4

我并没有 100% 清楚地了解 Draw Instanced/Draw Indirect 系列函数一直到 glDrawElementsInstancedBaseVertexBaseInstance 是如何协同工作的。

使用支持 OpenGL 4.0+ 和 OpenCL 互操作的硬件和驱动程序,我们如何(如果可能)利用诸如间接绘制(现在也是多绘制间接)之类的工具来跨多个帧绘制实例化几何,同时更改 GPU 上的几何?

例如,是否可以对形状进行细分,然后通过 opencl 对形状应用一些过滤器,同时参考 CPU 仅在需要时才需要剔除的几何形状?

*原帖经过大量编辑

4

1 回答 1

4

不清楚你在这里问什么。迄今为止,Khronos 定义的 CL/GL 互操作仅限于共享缓冲区/纹理和一些事件处理内容,这些似乎都与曲面细分无关。由于曲面细分是基于多边形模型光栅化的特定任务,因此它的相关性不太可能足以保证在 CL 规范中提及。如果您想知道 CL 实现是否会使用曲面细分硬件,那么这完全取决于特定的硬件功能和 CL 实现。

更新:

有两种细分着色器。Tessellation Control Shaders接受一个补丁(三角形或四边形的集合)并计算一些每个顶点的属性,最重要的是,一个控制应该执行的细分量的数字。

在曲面细分控制着色器运行后,生成的补丁被传递到一个固定功能的硬件单元,该单元执行实际的细分以生成具有更多多边形的新补丁。

细分之后,Tessellation Evaluation Shader可以计算细分过程生成的面片中每个顶点的属性。这是过程中的步骤,例如,您将在存储为纹理的置换贴图中查找信息。

由于 CL/GL 互操作只允许基于缓冲区的数据交换,为了使用 CL 进行曲面细分,您必须将整个曲面细分过程实现为本质上为顶点数据的预处理器,并且您将无法从 CL 访问任何用于细分步骤的专用硬件。由于当前的硬件(据我所知)确实包含一个固定功能细分器而不是使用通用计算单元,因此在 CL 中实现的 tessellator 几乎肯定会在性能方面处于劣势。

于 2011-03-08T09:59:02.893 回答