Jay*_*Tee 7 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;
}
//...
Run Code Online (Sandbox Code Playgroud)
这适用于:
但是在特定的MacBook Pro(13英寸,2017年,High Sierra,集成的Intel GPU)上,存在一个很大的问题:没有绘制图形,我只能在背景中获得清晰的颜色.没有记录错误,我也没有遇到任何崩溃.
如果我"解包"包装器结构并直接使用float2数组,一切都很好.问题似乎集中在使用顶点ID索引到struct的程序范围数组(在Intel GPU上?).
为了测试目的,我已将所有内容都删除到最小的macOS示例项目中:下载示例项目.
它使用实例在随机位置绘制一些矩形.在有问题的Intel-GPU系统上,仅绘制红色背景.
谁能证实这个问题?它是否与英特尔驱动程序中的Metal实现相关联?或者我的代码中出现了错误/未定义的内容?
提前致谢!
更新
通过gfxCardStatus,我试图缩小问题的范围.实际上,它似乎与集成的英特尔GPU相关联:
MacBook Pro(Retina,15',2015):
MacBook Pro(15英寸,2017年):
MacBook Pro(13英寸,2017年)
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |