C++ 何时关闭光栅化步骤有意义?

C++ 何时关闭光栅化步骤有意义?,c++,vulkan,C++,Vulkan,在vulkan中,管道创建需要一个结构,名为VkPipelineRasterizationStateCreateInfo。在此结构中有一个名为光栅化丢弃启用的成员。如果将此成员设置为VK_TRUE,则在光栅化步骤之前将丢弃所有基本体。这将禁用对帧缓冲区的任何输出 我想不出这有什么意义。在哪些情况下它会有用?它适用于仅针对顶点处理阶段的副作用执行渲染管道的任何情况。例如,您可以使用GS将数据馈送到缓冲区,稍后从缓冲区进行渲染 现在,在许多情况下,您可以使用计算着色器来执行类似的操作。但不能使用CS

在vulkan中,管道创建需要一个结构,名为
VkPipelineRasterizationStateCreateInfo
。在此结构中有一个名为
光栅化丢弃启用
的成员。如果将此成员设置为
VK_TRUE
,则在光栅化步骤之前将丢弃所有基本体。这将禁用对帧缓冲区的任何输出


我想不出这有什么意义。在哪些情况下它会有用?

它适用于仅针对顶点处理阶段的副作用执行渲染管道的任何情况。例如,您可以使用GS将数据馈送到缓冲区,稍后从缓冲区进行渲染


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

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

可能是为了允许扩展执行类似opengl的变换反馈。通过一个实际示例对此进行一点扩展:点细分体素化(www.cs.columbia.edu/~fyun/gi12/paper100.pdf)是我最近实现的,我使用图形传递到细分器,然后使用几何体着色器写入3D缓冲区。从那里移动到计算着色器以实际创建体素。