Early Z过后深度会立即写入吗?

Will the depth be written immediately after Early Z passes?

如果不是,那么为什么丢弃中断的earlyZ? 假设在B的前面有一个物体A,A在fs.Assume有一个丢弃操作,即A在屏幕坐标(100, 100)的像素点通过了Early z测试,然后在fragment shader中被丢弃, 所以 A 没有机会写 depth.Now 渲染 B!显然 A 不会对 (100,100) 处的 B 产生任何影响。如果是这样,那A的EarlyZ为什么要被打断?

是的,深度写入(就硬件而言)是深度测试的一部分。这是一个原子的、有序的 read/modify/write 操作,因此硬件以这种方式实现它。

因此,fragment testing before the fragment shader also means writing those fragment values before the fragment shader。所以即使FS丢弃分片,它的部分组件已经写入,不可能不写入。

因此,如果 FS 中有 discard 语句,GPU 将不会使用早期测试,除非 FS 指定它必须这样做。如果确实如此指定,那么 discard 只会 部分 丢弃该片段。

请注意,这还包括遮挡查询计数和模板等内容 tests/writes。