imageAtomicExchange将无法编译

时间:2015-08-31 19:29:15

标签: c++ windows opengl glsl nvidia

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

我有一个简单的小阴影,看起来像这样(主要不包括在内):

#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驱动程序。 我想知道以前是否有人遇到过这类问题,可以告诉我问题是什么。

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

  

原子内存操作       仅支持所有图像变量类型的子集;必须       是:

     
      
  • 带有符号整数分量(iimage *)和a的图像变量       格式限定符“r32i”或

  •   
  • 带有无符号整数分量(uimage *)和a的图像变量       格式限定符“r32ui”。

  •   

我从错误消息中假设您尝试使用不受支持的r8ui格式。