【问题标题】:Fragment discard and early fragment tests in practice实践中的片段丢弃和早期片段测试
【发布时间】:2022-12-16 15:28:20
【问题描述】:

我知道硬件可以运行早期片段测试(https://www.khronos.org/opengl/wiki/Early_Fragment_Test) 特别是对于深度测试,这意味着深度缓冲区可以在顶点着色器输出的插值期间更新,并且片段着色器只会为未通过深度测试的片段调用。

现在,在片段着色器中使用 discard 会禁用此优化。 我明白更新如果使用了discard,那么深度缓冲只能发生在片段着色器执行之后。 但是实际的早期深度拒绝(即,如果片段无法通过深度测试,甚至不执行片段着色器)仍然是可能的。

所以我对这种情况下当前硬件上发生的事情很感兴趣(特别是我对金鱼草/肾上腺素硬件感兴趣)

如果着色器包含 discard 关键字(但不更改 gl_Fragdepth),即使对于深度测试失败的片段,片段着色器是否也会被调用,或者它们是否仍会得到早期 z 拒绝处理?

【问题讨论】:

    标签: opengl-es hardware fragment-shader depth-testing


    【解决方案1】:

    如果着色器包含 discard 关键字(但不更改 gl_Fragdepth),片段着色器是否会被调用,即使是对于将无法通过深度测试的片段,还是它们仍然会得到早期 z 拒绝处理?

    根据slides的第32-34页,是否启用/禁用earlyZ取决于DepthWrite=OFF/ON

    如果 DepthWrite=OFF,(即启用 earlyZ),如果 2x2 quad 的任何像素通过深度测试,将调用片段着色器

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多