glGenerateMipmap需要哪个内存屏障?

8
我已经使用GL_ARB_shader_image_load_store向纹理的第一个mipmap级别写入了内容。文档指出,在我将此图像的内容用于其他操作之前,需要调用glMemoryBarrier以适当地刷新缓存。
例如,在执行glTexSubImage2D操作之前,我需要发出GL_TEXTURE_UPDATE_BARRIER_BIT,并在使用采样该纹理的着色器发出绘制调用之前,需要发出GL_TEXTURE_FETCH_BARRIER_BIT。
然而,在确保glGenerateMipmap将使用最近编写的数据之前,我需要发出哪个屏障?

1
看起来你在规范中发现了一个漏洞。我建议你联系规范的作者,询问他们澄清一下。 - Bahbar
随着OpenGL 4.5的发布,出现了一个新的函数glTextureBarrier(),它可以实现你想要的功能。https://www.opengl.org/sdk/docs/man/html/glTextureBarrier.xhtml - plasmacel
1个回答

4
OpenGL 4.6规范对此进行了澄清:
任何在执行此缩减之前需要的同步都将在Generate*Mipmap命令本身中完成。
因此,您不需要任何类型的同步。如果您以任何方式导致数据被写入基本mipmap级别,则glGenerateMipmap将执行足够的同步以使读取工作。
考虑到这一点,在渲染帧的过程中最好不要调用它。
以前的规范没有答案,但来自此错误报告的信息表明以前的实现正是如上所述

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接