【问题标题】:Which memory barrier does glGenerateMipmap require?glGenerateMipmap 需要哪个内存屏障?
【发布时间】:2014-09-01 20:24:59
【问题描述】:

我已使用 GL_ARB_shader_image_load_store 写入纹理的第一个 mipmap 级别。文档说明我需要调用 glMemoryBarrier 才能在其他操作中使用此图像的内容,以便适当地刷新缓存。

例如,在执行 glTexSubImage2D 操作之前,我需要发出 GL_TEXTURE_UPDATE_BARRIER_BIT​,在我使用对纹理进行采样的着色器发出绘制调用之前,我需要发出 GL_TEXTURE_FETCH_BARRIER_BIT​。

但是,在确保 glGenerateMipmap 将使用最近写入的数据之前,我需要发出哪个障碍?

【问题讨论】:

  • 在我看来你已经在规范中找到了一个整体。我建议你联系规范作者,让他们澄清一下。
  • 随着 OpenGL 4.5 的发布,有一个新函数 glTextureBarrier() 可以满足您的要求。 opengl.org/sdk/docs/man/html/glTextureBarrier.xhtml

标签: opengl glsl memory-barriers mipmaps


【解决方案1】:

OpenGL 4.6 规范阐明了这一点:

在执行此缩减之前所需的任何同步都将完成 在Generate*Mipmap 命令本身内。

所以你不需要任何同步。如果您以任何方式将数据写入基本 mipmap 级别,glGenerateMipmap 将执行足够的同步以使读取工作。

鉴于此,最好不要在渲染帧的中间调用它。

虽然此错误报告中的信息表明 prior implementations did exactly the above,但之前的规范没有答案。

【讨论】:

    猜你喜欢
    • 2017-01-05
    • 2011-03-30
    • 2018-10-02
    • 2011-10-12
    • 2012-09-08
    • 1970-01-01
    • 2014-01-20
    • 1970-01-01
    • 2014-02-04
    相关资源
    最近更新 更多