我正在尝试使用两个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驱动程序。 我想知道以前是否有人遇到过这类问题,可以告诉我问题是什么。
提前致谢。
答案 0 :(得分:1)
根据ARB_shader_image_load_store的扩展规范(第8.X节,图像函数),原子操作支持的格式数量非常有限:
原子内存操作 仅支持所有图像变量类型的子集;必须 是:
带有符号整数分量(iimage *)和a的图像变量 格式限定符“r32i”或
带有无符号整数分量(uimage *)和a的图像变量 格式限定符“r32ui”。
我从错误消息中假设您尝试使用不受支持的r8ui格式。