首页 > 解决方案 > 计算着色器图像和原子一致性

问题描述

在研究了 OpenGL 内存模型之后,我有 2 个问题:

  1. 原子操作(例如,atomicAdd()ssbo 中的 a)如何被认为是不连贯的?这是否意味着我必须声明 ssbo 连贯并memoryBarrierBuffer()atommicAdd()?

  2. 为了保证多个计算着色器调用之间的内存一致性,我使用了多个调度,一次一个,每个调度都有一个工作组。每次调用都调用groupMemoryBarrier()以确保内部工作组内存的一致性,并且在调度之后我发出一个glMemoryBuffer(GL_TEXTURE_FETCH_BARRIER_BIT|GL_SHADER_STORAGE_BARRIER_BIT)以确保下一次调度的外部可见性。我是否可以安全地假设,即使在同一调度的多个工作组之间发出内部内存一致性(这样我就可以启动具有多个工作组的单个调度),而是在memoryBarrierImage()之后发出 a ?imageStore()

标签: openglglslopengl-4

解决方案


推荐阅读