【问题标题】:iOS Metal: Unable to create compute pipeline state with functioniOS Metal:无法使用函数创建计算管道状态
【发布时间】:2015-03-24 09:41:59
【问题描述】:

我正在尝试使用 iOS Metal Framework 在 GPU 上制作一个用于数独求解的简单应用。

我按照这篇博文中的说明进行操作:

http://memkite.com/blog/2014/12/15/data-parallel-programming-with-metal-and-swift-for-iphoneipad-gpu/

我在这里修改我的代码:

https://github.com/mateuszbuda/Sudoku

(在撰写此问题时,HEAD 是提交 c3e06e0)

而且我在调用时遇到了错误

newComputePipelineStateWithFunction

即在 ViewController 中设置 MTLDevice 时(第 95 行):

https://github.com/mateuszbuda/Sudoku/blob/c3e06e0e1edc724eea20962f32e49f0df8143b7d/Sudoku/ViewController.swift

我得到的错误是:

Error Domain=AGXMetal Code=1 "Compiler encountered an internal error"

我在装有 iOS 8.1.3 的 iPhone 6 Plus 上运行它

有人知道什么会导致我收到错误吗?

【问题讨论】:

    标签: ios iphone swift gpgpu metal


    【解决方案1】:

    您正在体验 Metal 中未完成的事情之一。错误说“内部”的原因是因为这是编译器错误,由编译器引起。不是你。试试这个:

    1. 复制“.metal”文件中所有不可编译的代码。
    2. 删除 .metal 文件(不仅仅是引用)。
    3. 删除位于 users/yourUser/Library/Developer/Xcode/DerivedData 的“DerivedData”文件夹的所有内容
    4. 创建一个新的 .metal 文件并将旧代码粘贴到这个新的 metal 文件中。

    现在构建并运行,你应该很高兴。 任何发现此错误的人确保向 Apple 发送某种错误报告,以便他们可以正确调试它并在 Xcode 的下一个版本中修复它。

    【讨论】:

    • 我认为,这只是一个编译器错误(因为我的代码中存在错误),但是在编译金属源时,我们无法直接访问编译器输出,只能通过金属与它通信。
    【解决方案2】:

    对于任何有同样问题的人,我已经解决了。

    这只是意味着内核函数有问题。即使您在 Xcode 中看不到任何错误,它也很可能无法编译。

    【讨论】:

      猜你喜欢
      • 2015-08-07
      • 2019-07-07
      • 2012-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-21
      • 2021-05-30
      相关资源
      最近更新 更多