macOS上的金属着色器中的结构数组(Intel-GPU?)

时间:2018-02-21 13:29:20

标签: macos shader intel metal

我正在为macOS和iOS编写一个多平台应用程序来使用Metal渲染矢量图形。在我的着色器中,顶点ID用作结构数组的偏移量(程序范围内的const,位于常量地址空间中):

//Simplified!
constant const WrapperStruct directionVectors[] =
{
    //Vertex data (const):
    { float2(-1, -1) },
    { float2(1, -1) },
    { float2(-1, 1) },
    { float2(1, 1) }
};

//...

vertex Vertex vertexShader(const InstanceAttributes attr [[ stage_in ]], const ushort vid [[ vertex_id ]])
{
    Vertex vert;

    vert.position = float4(attr.position + (attr.size * directionVectors[vid].value), 0, 1);
    vert.color = attr.color;

    return vert;
}

//...

这很好用:

  • iOS设备
  • 带有专用GPU的MacBook。

但是在特定的MacBook Pro(13英寸,2017年,High Sierra,集成的Intel GPU)上,存在一个大问题:没有绘制图形,我只能在后台获得清晰的颜色。没有记录错误,我也没有遇到任何崩溃。

如果我"打开"包装器结构并直接使用float2数组,一切都很好用。问题似乎集中在使用顶点ID索引到struct的程序范围数组(在英特尔GPU上?)。

我已将所有内容剥离到最小的macOS示例项目中以进行测试:Download sample project

使用实例化在随机位置绘制一些矩形。在有问题的Intel-GPU系统上,只绘制红色背景。

任何人都可以确认问题吗?它是否与英特尔驱动程序中的Metal实现相关联?或者我的代码中出现了错误/未定义的内容?

提前致谢!

更新

通过gfxCardStatus,我试图缩小问题的范围。实际上,它似乎与集成的英特尔GPU相关联:

  • MacBook Pro(Retina,15',2015):

    • 离散(AMD Radeon R9 M370X):没问题
    • 集成(Intel Iris Pro 1536 MB):没问题
  • MacBook Pro(15英寸,2017年):

    • 离散(Radeon Pro 560 4 GB):没问题
    • 集成(Intel HD Graphics 630 1536 MB):受影响
  • MacBook Pro(13英寸,2017年)

    • 集成(Intel Iris Plus图形640 1536 MB):受影响

0 个答案:

没有答案