Intel HD 4xxx / 5xxx GPU 上的计算着色器链接失败

问题描述

以下计算着色器在使用 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 (将#修改为@)