首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Vulkan的OpenGL GLSL原子计数器

Vulkan的OpenGL GLSL原子计数器
EN

Stack Overflow用户
提问于 2019-06-20 16:57:34
回答 1查看 2.1K关注 0票数 3

当我尝试将我的OpenGL实现迁移到Vulkan时,我发现'uniform atomic_uint‘在Vulkan中不受支持。我的用例很简单:在所有片段中递增一个整数。我试图搜索解决方案,但没有找到任何最新的解决方案。

以下是旧解决方案的列表:

  1. https://software.intel.com/en-us/articles/opengl-performance-tips-atomic-counter-buffers-versus-shader-storage-buffer-objects.它说,OpenGL原子计数器类似于SSBO原子操作,在某些平台上可以实现为SSBO原子操作。(不确定它是否仍然是真的today).
  2. https://community.khronos.org/t/vulkan-atomic-counters/7146.它还说在SSBO上使用图像加载/存储或原子操作作为替代。(但内容已经存在2年了。)

既然Vulkan还在增长,有没有人能推荐一种最新的标准方法,在Vulkan中使用GLSL对整数进行原子递增?

编辑:

我已经得到了答案,但我会添加更多细节。在我的OpenGL代码中,我有一个带有顶点着色器和片段着色器的渲染过程(No compute着色器涉及)。在片段着色器中,我有以下glsl (简化):

#version 450
layout (binding = 0) uniform atomic_uint fragmentCount;

void main()
{
  atomicCounterIncrement(fragmentCount);
}

这个着色器在OpenGL中工作得很好,因为OpenGL在glBindBuffer中有枚举'GL_ATOMIC_COUNTER_BUFFER‘,在glBindBuffer中有关键字'atomic_uint’。但是,Vulkan没有对应的内置关键字。因此,我试图寻找它的替代品。我没有问如何查询正在渲染的碎片的数量,尽管这里的着色器看起来像是在做这件事。我想知道在Vulkan中是否存在通用图形着色器中的“原子计数器”。正如Nicol Bolas指出的那样,在Vulkan中没有这样的东西,在NVIDIA GPU上也没有实现,所以我决定使用SSBO和AtomicAdd来做同样的事情。

希望这能让我的问题更清晰。

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56682438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档