Какой барьер памяти требуется для glGenerateMipmap?

Я записал на первый уровень mipmap текстуры, используя GL_ARB_shader_image_load_store. В документации указано, что мне нужно вызвать glMemoryBarrier, прежде чем я буду использовать содержимое этого изображения в других операциях, чтобы правильно очистить кэши.

Например, прежде чем я выполню операцию glTexSubImage2D, мне нужно выдать GL_TEXTURE_UPDATE_BARRIER_BIT​, а перед вызовом отрисовки с помощью шейдера, который сэмплирует эту текстуру, мне нужно выдать GL_TEXTURE_FETCH_BARRIER_BIT​.

Однако какой барьер мне нужно создать, чтобы убедиться, что glGenerateMipmap будет использовать самые последние записанные данные?


person rdb    schedule 11.07.2014    source источник
comment
Мне кажется, вы нашли целое в спецификации. Я бы посоветовал вам связаться с авторами спецификации, чтобы попросить их уточнить это.   -  person Bahbar    schedule 21.01.2015
comment
В версии OpenGL 4.5 появилась новая функция glTextureBarrier(), которая должна делать то, что вы хотите. opengl.org/sdk/docs/man/html/glTextureBarrier.xhtml< /а>   -  person plasmacel    schedule 22.01.2015


Ответы (1)


Спецификация OpenGL 4.6 разъясняет это:

Любая синхронизация, необходимая перед выполнением этого сокращения, будет выполнена в самих командах Generate*Mipmap.

Таким образом, вам не нужна какая-либо синхронизация. Если вы каким-либо образом записали данные на базовый уровень MIP-карты, glGenerateMipmap выполнит достаточную синхронизацию, чтобы чтение работало.

Учитывая это, вероятно, будет действительно хорошей идеей не вызывать это в середине рендеринга кадра.

В предыдущих спецификациях не было ответа, хотя информация из этого отчета об ошибке предполагает, что предыдущие реализации делали именно так. выше.

person Nicol Bolas    schedule 03.12.2015