使用与image2D和sampler2D相同的纹理是否合法(并且定义明确)?
目前我在GLSL着色器中使用imageLoad()和imageStore()来从image2D写入和加载。但是,我想从纹理的某些mipmap级别读取(而不是写入),但imageLoad不支持这种情况(我想我必须将每个mipMap级别绑定为单独的image2D,但可用图像单元的数量是很有限)。所以我的问题是,是否可以使用与用作imageStore()的image2D相同的纹理作为与textureLod()一起使用的sampler2D?
答案 0 :(得分:1)
法律?是。明确界定的?这取决于你在做什么。
你说你想要写入图像,然后从纹理中采样mipmap。你是从你写的同一个mipmap中提取样的吗?如果是这样......那将是一个问题。纹理访问不需要coherant
,因此不能保证这将起作用。在写入时间和采样时间之间没有明确的CPU glMemoryBarrier
调用。由于它需要CPU干预,因此无法在同一着色器中完成。
如果您提供保护以防止您未写入的mipmap采样(以及“您”,我的意思是“您正在使用的每个着色器调用”),那么一切都应该是精细。使用textureLod
或设置纹理的BASE_LEVEL或类似的东西应该没问题。