imageAtomicExchange 无法编译

imageAtomicExchange won't compile

我正在尝试使用两个 opengl 图像,其中一个是稀疏的,另一个用作一种页面 table,我在其中跟踪实际提交的页面。

我有一个简单的小着色器,看起来像这样(不包括主要内容):

#version 450 core
#extension GL_ARB_shader_image_load_store : require

uniform float gridSize;
uniform float pageTableSize;

bool isPageInMemoryOrRequest (in ivec3 pos)
{
    bool returnValue = false;
    if ( 255u == imageAtomicExchange(pageTable, pos, 128u) )
    {
        returnValue = true;
    }

    return returnValue;
}

我的问题是这无法编译。我不断收到此消息: 错误 C1115:无法找到兼容的重载函数 "imageAtomicExchange(struct uimage3D1x8_bindless, ivec3, uint)"

我很确定我从未在规范中的任何地方看到过 _bindless 部分,而且我不确定编译器如何在编译时确定这是一个无绑定纹理(或者它们可能都是无绑定的在最新的驱动程序中)。

我有一个 GTX660TI,我正在使用 352.86 驱动程序。 我想知道是否有人以前遇到过此类问题,可以告诉我问题出在哪里。

提前致谢。

根据 ARB_shader_image_load_store 的扩展规范(第 8.X 节,图像函数),原子操作支持的格式非常有限:

Atomic memory operations are supported on only a subset of all image variable types; must be either:

  • an image variable with signed integer components (iimage*) and a format qualifier of "r32i", or

  • an image variable with unsigned integer components (uimage*) and a format qualifier of "r32ui".

根据错误消息,我假设您已尝试使用不受支持的 r8ui 格式。