我知道,如果读取并渲染到gles中的相同纹理,将产生不确定的结果,规范将其称为“反馈循环”。 但是,似乎没有提及此规则是否也适用于缓冲区。
假设支持顶点阶段的副作用,如果顶点着色器从SSBO读取,并且同一renderpass的片段着色器写入了它,那么它也是不确定的结果吗?
即使不支持顶点阶段的副作用,我也认为存在相同的情况,例如,如果VBO被绑定为由片段着色器编写的SSBO,它也是“反馈循环”吗?
答案 0 :(得分:1)
rules with SSBOs比帧缓冲区(没有texture-barrier)的规则严格得多。只要您不从片段着色器实际尝试的位置读取数据,就可以了。也就是说,您的VS可以从缓冲区的一个区域读取,而FS可以写入另一个区域。
如果特定顶点和片段着色器之间存在依赖关系,也可以。如果片段着色器正在执行,则为开始那些片段着色器必须的图元生成特定顶点的顶点着色器已完成执行。因此,只要读取VS仅从这些VS执行所导致的FS写入的位置读取(并且您使用coherent
内存限定符),那么您就很好了。