1

使用与 image2D 和 sampler2D 相同的纹理是否合法(并且定义明确)?

目前我在 GLSL 着色器中使用 imageLoad() 和 imageStore() 从 image2D 写入和加载。但是,我也想从纹理的某些 mipmap 级别读取(而不是写入),但这不受 imageLoad 支持(我想我必须将每个 mipMap 级别绑定为单独的 image2D,但可用图像单元的数量是相当有限)。所以我的问题是,是否可以将我用作 imageStore() 的 image2D 的相同纹理也用作与 textureLod() 一起使用的 sampler2D?

4

1 回答 1

1

合法的?是的。定义好?这取决于你对他们做什么。

您说您想写入图像,然后从纹理中采样 mipmap。您是否从您编写的同一个 mipmap 中采样?如果是这样……那将是一个问题。纹理访问不需要是coherant,因此不能保证这会起作用。glMemoryBarrier在写入时间和采样时间之间没有明确的 CPU调用。而且由于它需要 CPU 干预,因此不能在同一个着色器中完成。

如果您提供保护以防止从您写入的 mipmap 中采样(并且“您”的意思是“您正在使用的每个着色器调用”),那么一切都应该没问题。使用textureLod或设置纹理的 BASE_LEVEL 或类似的东西应该没问题。

于 2012-03-22T18:25:57.983 回答