何时关闭光栅化步骤是否有意义?

Bro*_*her 3 c++ vulkan

在vulkan中,有一个结构是管道创建所需的,命名为VkPipelineRasterizationStateCreateInfo.在这个结构中有一个名为的成员rasterizerDiscardEnable.如果将此成员设置为,VK_TRUE那么在光栅化步骤之前将丢弃所有基元.这会禁用帧缓冲区的任何输出.

我想不出这可能有意义的场景.在哪些情况下它可能有用吗?

Dre*_*mer 7

此参数的一个有用的副作用(尽管不一定是预期的用例)是用于基准测试/确定 Vulkan 应用程序的瓶颈:如果在光栅化阶段之前(以及因此在执行任何片段着色器之前)丢弃所有基元没有提高您的帧速率,那么您可以排除您的应用程序性能受片段阶段限制。


Nic*_*las 6

对于任何只是为了顶点处理阶段的副作用而执行渲染管道的情况.例如,您可以使用GS将数据提供到缓冲区中,稍后可以从缓冲区中进行渲染.

现在,在许多情况下,您可以使用计算着色器执行类似的操作.但是你不能使用CS来有效地实现曲面细分; 这最好由硬件镶嵌工完成.因此,如果您想要捕获由细分生成的数据(可能是因为您将多次使用它进行渲染),则必须使用渲染过程.

  • 为了通过实际示例进行一些扩展:我最近实现了点镶嵌细分体素化(www.cs.columbia.edu/~fyun/gi12/paper100.pdf),我使用了图形传递给镶嵌细分,然后使用几何着色器将其写出到3D缓冲区。从那里,您移至计算着色器以实际创建体素。 (2认同)