什么时候关闭光栅化步骤才有意义?
When does it make sense to turn off the rasterization step?
在 vulkan 中有一个创建管道所需的结构,名为 VkPipelineRasterizationStateCreateInfo
。在这个结构中有一个名为 rasterizerDiscardEnable
的成员。如果此成员设置为 VK_TRUE
,则在光栅化步骤之前丢弃所有图元。这将禁用对帧缓冲区的任何输出。
我想不出这可能有任何意义的场景。它在哪些情况下有用?
它适用于您仅为顶点处理阶段的副作用执行渲染管道的任何情况。例如,您可以使用 GS 将数据馈送到缓冲区,您稍后会从该缓冲区进行渲染。
现在,在许多情况下,您可以使用计算着色器来执行类似的操作。但是你不能使用 CS 来有效地实现曲面细分;这最好由硬件曲面细分器完成。因此,如果您想捕获曲面细分生成的数据(大概是因为您将多次使用它进行渲染),则必须使用渲染过程。
此参数的一个有用的副作用(尽管不一定是预期的用例)是用于基准测试/确定 Vulkan 应用程序的瓶颈:如果在光栅化阶段之前(因此在任何片段之前)丢弃所有图元着色器曾经执行过)不会提高你的帧速率那么你可以排除你的应用程序性能是片段阶段限制的。
在 vulkan 中有一个创建管道所需的结构,名为 VkPipelineRasterizationStateCreateInfo
。在这个结构中有一个名为 rasterizerDiscardEnable
的成员。如果此成员设置为 VK_TRUE
,则在光栅化步骤之前丢弃所有图元。这将禁用对帧缓冲区的任何输出。
我想不出这可能有任何意义的场景。它在哪些情况下有用?
它适用于您仅为顶点处理阶段的副作用执行渲染管道的任何情况。例如,您可以使用 GS 将数据馈送到缓冲区,您稍后会从该缓冲区进行渲染。
现在,在许多情况下,您可以使用计算着色器来执行类似的操作。但是你不能使用 CS 来有效地实现曲面细分;这最好由硬件曲面细分器完成。因此,如果您想捕获曲面细分生成的数据(大概是因为您将多次使用它进行渲染),则必须使用渲染过程。
此参数的一个有用的副作用(尽管不一定是预期的用例)是用于基准测试/确定 Vulkan 应用程序的瓶颈:如果在光栅化阶段之前(因此在任何片段之前)丢弃所有图元着色器曾经执行过)不会提高你的帧速率那么你可以排除你的应用程序性能是片段阶段限制的。