【问题标题】:Metal 2 API features on older devices旧设备上的 Metal 2 API 功能
【发布时间】:2021-08-18 20:22:15
【问题描述】:

根据文档(https://developer.apple.com/documentation/metal/gpu_features/understanding_gpu_family_4)“在基于 A7 到 A10 的设备上,Metal 没有明确描述这种基于图块的架构”。在同一篇文章中,我看到 “A11 GPU 上的 Metal 2” 并感到困惑,因为在金属着色语言规范中没有找到有关 Metal 2 支持的更多信息。例如,我发现表“片段函数平铺输入参数的属性”并注意“iOS:自 Metal 2.0 起支持表 5.5 中的属性”。 Metal 2 支持是否特定于 gpu 系列?

【问题讨论】:

    标签: metal


    【解决方案1】:

    并非所有设备都支持所有功能。新设备通常支持更多功能,旧设备可能不支持新功能。

    这种支持有几个因素。

    首先,每个MTLDevice都有一组MTLGPUFamily,它支持你可以用supportsFamily方法查询。一些文档文章提到了设备需要支持什么样的家庭才能使用这个或那个功能,但通常,您可以在Metal Feature Set Tables 中找到该信息。对这些系列的支持可能会有所不同,具体取决于芯片本身、可用的内存量或其他一些单元。并且根据这些将芯片分组为系列。

    虽然MTLDevice 上还有其他supports* 查询,它们不依赖于设备系列,而是依赖于设备本身。例如,supportsRaytracing 查询。这些也基于 GPU 本身,但可能是分开的,可能是因为它们不完全属于任何“家族”。

    第三种支持基于操作系统版本。较新版本的操作系统可能会提供新的 API 或现有 API 的扩展。这些在标题中标有API_AVAILABLE 宏,并且只能在相同版本或更高版本的操作系统上使用。要查询对这些的支持,您需要在 Objective-C 中使用宏或 if #available 语法或在 Swift 中使用类似语法。在这里,API 的可用性并不受 GPU 本身的影响,而是受到更新的操作系统和驱动程序的影响。

    最后一种限制某些功能的“支持”是金属着色语言版本。它与操作系统版本相关,它指的是您在问题中提到的Metal Shading Language specification 中的那些注释。在这里,功能的可用性是编译器版本的限制的混合(不是每个人都会使用最新和最好的规范,我认为大多数生产游戏引擎都使用像 Metal 2.1 这样的东西,至少那些没有使用的游戏最新和最好的游戏引擎版本)和设备限制。例如,图块着色器仅限于编译器版本,但也仅限于 Apple Silicon GPU。

    因此,当您在应用程序中使用 Metal 时,会出现不同类型的支持,很容易混淆它们,但了解每一种支持很重要。

    【讨论】:

      猜你喜欢
      • 2019-11-13
      • 1970-01-01
      • 1970-01-01
      • 2017-10-13
      • 2020-05-01
      • 2012-08-30
      • 2011-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多