【问题标题】:glsl imageStore, followed by imageLoad, is it coherent?glsl imageStore,后跟imageLoad,是否连贯?
【发布时间】:2015-12-15 15:26:45
【问题描述】:

我知道在同一调度内的不同调用中使用 imageStore 并后跟 imageRead 需要正确读取 coherent 关键字。

但是,我可以在不使用coherent 的情况下在同一个调度中读取值吗?

或者换句话说,当我有这个时:

layout(r8ui) uniform uimage2D input_texture;
void main(){
  ivec2 coords = ivec2(gl_GlobalInvocationID.xy);
  imageStore(input_texture, coords, ivec4(128));
  int value = imageLoad(input_texture, coords).r;
}

value 是否保证为 128,即使没有连贯的关键字?

【问题讨论】:

    标签: opengl glsl textures compute-shader


    【解决方案1】:

    您始终可以在没有coherent 限定符的情况下读取着色器实例写入的值只要

    1. 没有其他着色器实例写入图像/缓冲区中的特定位置。

    2. 您正在通过 与您编写它时相同的图像/缓冲区变量 读回该值。两个单独的图像/缓冲区变量可以引用相同的内存地址(将相同的图像/缓冲区绑定到不同的变量)。但是实现不需要通过不同的变量缓存对同一内存的访问。

      restrict 限定符可用于图像变量,以明确说明情况。事实上,人们应该默认使用restrict,除非他们明确打算通过多个对象访问同一个内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 2020-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多