代码之家  ›  专栏  ›  技术社区  ›  Babaluno

imageAtomicExchange无法编译

  •  2
  • Babaluno  · 技术社区  · 9 年前

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

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

    #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)”

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

    我有一台GTX660TI,我使用的是352.86驱动程序。 我想知道是否有人以前遇到过这种问题,可以告诉我可能是什么问题。

    提前感谢。

    1 回复  |  直到 9 年前
        1
  •  1
  •   BDL Vyxzl    9 年前

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

    原子存储器操作 仅在所有图像变量类型的子集上支持;必须 可以是:

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

    • 具有无符号整数分量(uimage*)和 “r32ui”的格式限定符。

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