问题描述
以下计算着色器在使用 OpenGL 4.3 核心上下文的 Intels HD 4xxx / 5xxx 系列 GPU 上造成问题。
SHADER_ID_LINK 错误已生成。程序 4 的 GLSL 链接失败,“”:资源不足错误。
据我所知,这个着色器在声称符合 OpenGL 4.3 的 GPU 上应该是完全合法的,而且它实际上在较新的 GPU 上也能正常工作。
看到 20.19.15.5126 和许多不同的、所有最新的驱动程序版本上发生的错误。操作系统 Windows 8 和 Windows 10,64 位变体。
#version 430 core
// DO NOT CHANGE,must match game internal layout
struct TileData {
// TF_ flags 0:32
uint flags;
// TF_ flags 32:64
uint flags2;
// Sprites are all:
// spriteID=0:16,spriteFlags=16:32
uint floorSpriteUID ;
uint wallSpriteUID;
uint itemSpriteUID;
uint creatureSpriteUID;
uint jobSpriteFloorUID;
uint jobSpriteWallUID;
// fluidLevel=0:8,lightLevel=0:8,vegetationLevel=8:16
uint packedLevels;
};
struct TileDataUpdate {
uint id;
TileData tile;
};
layout(std430,binding = 0) writeonly restrict buffer tileData1
{
TileData data[];
} tileData;
layout(std430,binding = 1) readonly restrict buffer tileDataUpdate1
{
TileDataUpdate data[];
} tileDataUpdate;
uniform int uUpdateSize;
layout(local_size_x = 64) in;
void main()
{
uint id = gl_GlobalInvocationID.x;
if(id < uUpdateSize)
{
TileDataUpdate data = tileDataUpdate.data[id];
tileData.data[data.id] = data.tile;
}
}
有没有人知道链接错误的原因可能是什么?我自己无法访问任何此类 GPU,因此我无法自己进行测试。
编辑: 使用 5 年前的驱动程序版本 (20.19.15.4624) 进行测试,它实际上开箱即用。所以这是(又一个)英特尔驱动程序的回归。仍然不知道究竟是什么触发了错误或如何解决它。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)