Metal (API)

{{short description|iOS, macOS, and tvOS graphics rendering API}}

{{distinguish|text=the MeTaL API by S3 Graphics}}

{{Use mdy dates|date=January 2015}}

{{Infobox software

| name = Metal

| logo = Metal 3 Logo.png

| screenshot = File:Vainglory Halcyon Fold map.tif

| caption = Apple used the mobile multiplayer online battle arena game Vainglory to demonstrate Metal's graphics capabilities at the iPhone 6's September 2014 announcement event.

| developer = Apple Inc.

| released = {{start date and age|2014|06}}

| latest release version = 24

| latest release date = {{start date and age|2022|10}}

| programming language = Shading language: C++14, Runtime/API: Objective-C

| operating system = iOS, iPadOS, macOS, tvOS

| platform =

| genre = 3D graphics and compute API

| license = Proprietary

| website = {{URL|https://developer.apple.com/metal/}}

}}

Metal is a low-level, low-overhead hardware-accelerated 3D graphic and compute shader API created by Apple, debuting in iOS 8. Metal combines functions similar to OpenGL and OpenCL in one API. It is intended to improve performance by offering low-level access to the GPU hardware for apps on iOS, iPadOS, macOS, and tvOS. It can be compared to low-level APIs on other platforms such as Vulkan and DirectX 12.

Metal is an object-oriented API that can be invoked using the Swift, Objective-C or C++17{{Cite web|url=https://developer.apple.com/metal/cpp/|title = Getting started with Metal-CPP - Metal}} programming languages. Full-blown GPU execution is controlled via the Metal Shading Language. According to Apple promotional materials: "MSL [Metal Shading Language] is a single, unified language that allows tighter integration between the graphics and compute programs. Since MSL is C++-based, you will find it familiar and easy to use."{{cite web|last1=Apple Inc.|title=Metal Shading Language Specification|url=https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf}}

Features

Metal aims to provide low-overhead access to the GPU. Commands are encoded beforehand and then submitted to the GPU for asynchronous execution. The application controls when to wait for the execution to complete thus allowing application developers to increase throughput by encoding other commands while commands are executed on the GPU or save power by explicitly waiting for GPU execution to complete. Additionally, command encoding is CPU independent thus applications can encode commands to each CPU thread independently. Lastly, render states are pre-computed beforehand, allowing the GPU driver to know in advance how to configure and optimize the render pipeline before command execution.{{cite web|publisher=Apple Inc.|title=Setting Up a Command Structure|url=https://developer.apple.com/documentation/metal/setting_up_a_command_structure}}

Metal improves the capabilities of GPGPU programming by using compute shaders. Metal uses a specific shading language based on C++14, implemented using Clang and LLVM.{{cite web|url=https://developer.apple.com/library/prerelease/ios/documentation/Metal/Reference/MetalShadingLanguageGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40014364|title=Metal Shading Language Guide|date=September 8, 2014|access-date=September 10, 2014}}

Metal allows application developers to create Metal resources such as buffers, textures. Resources can be allocated on the CPU, GPU, or both and provides facilities to update and synchronize allocated resources. Metal can also enforce a resource's state during a command encoder's lifetime.{{cite web|last1=Apple Inc.|title=Setting Resource Storage Mode|url=https://developer.apple.com/documentation/metal/setting_resource_storage_modes}}{{cite web|title=Synchronizing a Managed Resource|publisher=Apple Inc.|url=https://developer.apple.com/documentation/metal/synchronizing_a_managed_resource}}

On macOS, Metal can provide application developers the discretion to specify which GPU to execute. Application developers can choose between the low-power integrated GPU of the CPU, the discrete GPU (on certain MacBooks and Macs) or an external GPU connected through Thunderbolt. Application developers also have the preference on how GPU commands are executed on which GPUs and provides suggestion on which GPU a certain command is most efficient to execute (commands to render a scene can be executed by the discrete GPU while post-processing and display can be handled by the integrated GPU).{{cite web|title=GPU Selection in macOS|publisher=Apple Inc.|url=https://developer.apple.com/documentation/metal/gpu_selection_in_macos}}

=Metal Performance Shaders=

Metal Performance Shaders is a highly optimized library of graphics functions that can help application developers achieve great performance at the same time decrease work on maintaining GPU family specific functions.{{cite web|title=Metal Performance Shaders|url=https://developer.apple.com/documentation/metalperformanceshaders}} It provides functions including:

  • Image filtering algorithms
  • Neural network processing
  • Advanced math operations
  • Ray tracing

History

Metal has been available since June 2, 2014 on iOS devices powered by Apple A7 or later,{{Cite web |url=https://arstechnica.com/apple/2014/06/apple-gets-heavy-with-gaming-announces-metal-development-platform/ |title=Apple gets heavy with gaming, announces Metal development platform |work=Ars Technica |publisher=Condé Nast |date=2 June 2014 |first=Same |last=Machkovech}} and since June 8, 2015 on Macs (2012 models or later) running OS X El Capitan.{{Cite web |url=https://www.apple.com/pr/library/2015/06/08Apple-Announces-OS-X-El-Capitan-with-Refined-Experience-Improved-Performance.html |title=Apple Announces OS X El Capitan with Refined Experience & Improved Performance |work=Newsroom |publisher=Apple |date=8 June 2015 |location=San Francisco |first1=Colin |last1=Smith |first2=Starlayne |last2=Meza}}

On June 5, 2017, at WWDC, Apple announced the second version of Metal, to be supported by macOS High Sierra, iOS 11 and tvOS 11. Metal 2 is not a separate API from Metal and is supported by the same hardware. Metal 2 enables more efficient profiling and debugging in Xcode, accelerated machine learning, lower CPU workload, support for virtual reality on macOS, and specificities of the Apple A11 GPU, in particular.{{cite web |title=Metal 2 |url=https://developer.apple.com/metal/ |website=Apple Developer |publisher=Apple |via=Wayback Machine |date=20 November 2017 |url-status=deviated |archive-url=https://web.archive.org/web/20171120014933/https://developer.apple.com/metal/ |archive-date=November 20, 2017 |df=mdy-all }}

At the 2020 WWDC, Apple announced the migration of the Mac to Apple silicon. Macs using Apple silicon will feature Apple GPUs with a feature set combining what was previously available on macOS and iOS, and will be able to take advantage of features tailored to the tile based deferred rendering (TBDR) architecture of Apple GPUs.{{cite web|url=https://developer.apple.com/videos/play/wwdc2020/10631|title=Bring your Metal app to Apple Silicon Macs|website=developer.apple.com|access-date=2020-07-13}}

At the 2022 WWDC, Apple announced the third version of Metal (Metal 3), which would debut with the release of macOS Ventura, iOS 16 and iPadOS 16. Metal 3 introduces the MetalFX upscaling framework, which renders complex scenes in less time per frame with high-performance upscaling and anti-aliasing, mesh shaders support.{{cite web|url=https://developer.apple.com/videos/play/wwdc2022/10066|title=Discover Metal 3|website=developer.apple.com|access-date=2022-06-24}} Also announced possibility to use C/C++ for Metal API.{{cite web|url= https://developer.apple.com/videos/play/wwdc2022/10160|title=Program Metal in C++ with metal-cpp|website=developer.apple.com|access-date=2022-09-10}}

Supported GPUs

The first version of Metal supports the following hardware and software:{{cite web|title=Apple Turns Its Back On Customers And NVIDIA With macOS Mojave|url=https://www.forbes.com/sites/marcochiappetta/2018/12/11/apple-turns-its-back-on-customers-and-nvidia-with-macos-mojave|first=Marco |last=Chiappetta|website=Forbes|date=11 December 2018}}

The second version of Metal supports the following hardware and software:

The third version of Metal supports the following hardware and software:{{cite web|title=Metal feature set tables|url=https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf|publisher=Apple}}

Adoption

According to Apple, more than 148,000 applications use Metal directly, and 1.7 million use it through high-level frameworks, as of June 2017.{{cite web|last1=Apple Inc.|title=WWDC 2017 Platforms State of the Union|url=https://developer.apple.com/videos/play/wwdc2017/102/}} macOS games using Metal for rendering are listed below.

class="wikitable sortable"

!Title

!Developer (macOS version)

!Game engine

!MacOS release date (OpenGL/DirectX)

!Metal-based release date

!Metal support notes

Ark: Survival Evolved

|Studio Wildcard

|Unreal Engine 4

|

|{{Dts|29/8/2017}}

|

ARMA 3

|Virtual Programming

|Real Virtuality

|{{Dts|31/08/2015}}

|

|Metal support in beta since {{Dts|17/9/2017}}{{Citation needed|date=May 2021}}

Baldur's Gate III

|Larian Studios

|Divinity Engine 4.0

|

|{{Dts|22/09/2023}}

|Metal support in early access since {{Dts|06/10/2020}}{{Citation needed|date=May 2021}}

Ballistic Overkill

|Aquiris Game Studio

|Unity Engine 5

|

|{{Dts|28/3/2017}}

|

Batman: Arkham City

|Feral Interactive

|Unreal Engine 3

|{{Dts|18/10/2013}}

|

|Metal support since 21 February 2019 with v1.2{{Citation needed|date=May 2021}}

Batman: The Enemy Within

|Telltale Games

|Telltale Tool

|

|{{Dts|08/08/2017}}

|

BattleTech

|Harebrained Schemes

|Unity Engine 5

|

|{{Dts|24/4/2018}}

|

data-sort-value="Bioshock 1R"|Bioshock Remastered

|Feral Interactive

|Unreal Engine 2.5

|

|{{Dts|22/8/2017}}

|

data-sort-value="Bioshock 2R"|Bioshock 2 Remastered

|Feral Interactive

|Unreal Engine 2.5

|

|{{Dts|22/10/2020}}

|

Cities: Skylines

|Paradox Interactive

|Unity Engine 5

|{{Dts|10/3/2015}}

|

|Metal support since {{DTS|18/05/2017}}{{Citation needed|date=May 2021}}

Civilization VI

|Aspyr Media

|LORE

|{{Dts|24/10/2016}}

|

|Metal support since 5 April 2019{{Citation needed|date=May 2021}}

Company of Heroes 2

|Feral Interactive

|Essence Engine 3

|{{Dts|21/01/2015}}

|

|Metal support since {{Dts|19/10/2018}}{{Citation needed|date=May 2021}}

Deus Ex: Mankind Divided

|Feral Interactive

|Dawn Engine

|

|{{Dts|12/12/2017}}

|

DiRT Rally

|Feral Interactive

|EGO Engine 2.5

|

|{{Dts|16/11/2017}}

|

Divinity: Original Sin II

|Larian Studios

|Divinity Engine 2

|

|{{Dts|31/01/2019}}

|

Dota 2

|Valve

|Source 2

|{{Dts|18/07/2013}}

|

|MoltenVK was announced on {{Dts|26/02/2018}}.{{Cite news|url=https://www.khronos.org/news/press/vulkan-applications-enabled-on-apple-platforms|title=Vulkan Applications Enabled on Apple Platforms|publisher=Khronos Group Press Release|access-date=2021-02-24|language=en-us}} The option to use this became available on {{Dts|31/05/2018}}.{{cite web|url=https://www.phoronix.com/scan.php?page=news_item&px=Dota-2-Initial-Mac-Vulkan|title=Initial Vulkan Performance On macOS With Dota 2 Is Looking Very Good|last=Larabel|first=Michael|publisher=Phoronix|date=June 1, 2018|access-date=June 5, 2018}}

data-sort-value="Elder Scrolls Online, The"|The Elder Scrolls Online

|Zenimax Online Studios

|N/A

|{{Dts|04/04/2014}}

|{{Dts|22/10/2018}}

|OpenGL Renderer replaced with Vulkan via MoltenVK wrapper (translates Vulkan API calls to Metal) in patch 4.2.5

Empire: Total War

|Feral Interactive

|TW Engine 3

|{{Dts|4/3/2009}}

|

|Metal support since 16 December 2019{{Citation needed|date=May 2021}}

EVE Online

|CCP Games

|N/A

|{{Dts|06/11/2007}}

|{{Dts|14/10/2021}}

|Previously available on macOS via DirectX 9.0 from November 2007 until February 2009; native macOS version using Metal released 14 November 2021{{citation needed|date=May 2024}}

Everspace

|Rockfish

|Unreal Engine 4

|

|{{Dts|26/5/2017}}

|

F1 2016

|Feral Interactive

|EGO Engine 4.0

|

|{{Dts|06/04/2017}}

|

F1 2017

|Feral Interactive

|EGO Engine 4.0

|

|{{Dts|25/8/2017}}

|

Fortnite

|Epic Games

|Unreal Engine 4

|

|{{Dts|25/7/2017}}

|

Gravel

|Virtual Programming

|Unreal Engine 4

|

|{{Dts|20/1/2019}}

|

Guardians of the Galaxy: The Telltale Series

|Telltale Games

|Telltale Tool

|

|{{Dts|18/4/2017}}

|

Headlander

|Double Fine Productions

|Buddha Engine

|

|{{Dts|18/11/2016}}

|

Heroes of the Storm

|Blizzard Entertainment

|SC2 Engine

|{{Dts|2/6/2015}}

|

|Metal support in beta since {{Dts|24/1/2017}} (temporarily removed on {{DTS|29/11/2017}}{{Cite web|date=29 November 2017|title=HEROES OF THE STORM BALANCE PATCH NOTES — NOVEMBER 29, 2017|url=https://news.blizzard.com/en-us/heroes-of-the-storm/21273597/heroes-of-the-storm-balance-patch-notes-november-29-2017|access-date=|website=news.blizzard.com|language=en}} until ?){{Citation needed|date=May 2021}}

Hitman

|Feral Interactive

|Glacier 2

|

|{{Dts|20/06/2017}}

|

data-sort-value="Life Is Strange 0"|Life Is Strange: Before the Storm

|Feral Interactive

|Unity Engine

|

|{{Dts|13/09/2018}}

|

data-sort-value="Life Is Strange 2"|Life Is Strange 2

|Feral Interactive

|Unreal Engine 4

|

|{{Dts|2019}}

|

Mafia III

|Aspyr Media

|Illusion Engine

|

|{{Dts|11/5/2017}}

|

Medieval II: Total War

|Feral Interactive

|TW Engine 2

|{{Dts|17/12/2015}}

|

|Metal support since 25 October 2018{{Citation needed|date=May 2021}}

Micro Machines World Series

|Virtual Programming

|Unity Engine 5

|

|{{Dts|30/6/2017}}

|

Minecraft: Story Mode - Season Two

|Telltale Games

|Telltale Tool

|

|{{Dts|11/7/2017}}

|

MXGP3

|Virtual Programming

|Unreal Engine 4

|

|{{Dts|23/11/2018}}

|

Napoleon: Total War

|Feral Interactive

|TW Engine 3

|{{Dts|2/7/2013}}

|

|Metal support since 25 October 2019 with v1.2{{Citation needed|date=May 2021}}

Obduction

|Cyan Worlds

|Unreal Engine 4

|

|{{Dts|29/3/2017}}

|

Observer

|Bloober Team

|Unreal Engine 4

|

|{{Dts|24/10/2017}}

|

Quake II

|id Software

|Quake II engine

|

|{{Dts|09/02/2019}}

|A port using MoltenVK was released as vkQuake2.{{cite tweet |last1=Kondrak |first1=Krzysztof |user=k_kondrak |number=1094192063292297217 |date=February 9, 2019 |title=vkQuake2 gets MacOS support |access-date=February 9, 2019}}

Refunct

|Dominique Grieshofer

|Unreal Engine 4

|

|{{Dts|5/9/2016}}

|

Resident Evil Village

|Capcom

|RE Engine

|

|{{Dts|28/10/2022}}

|First macOS game with MetalFX support

Rise of the Tomb Raider

|Feral Interactive

|Foundation Engine

|

|{{Dts|12/04/2018}}

|

Shadow of the Tomb Raider

|Feral Interactive

|Foundation Engine

|

|{{Dts|2019}}

|

Sid Meier's Railroads!

|Feral Interactive

|Gamebryo

|{{Dts|01/11/2012}}

|

|Metal support since {{Dts|18/12/2018}}{{Citation needed|date=May 2021}}

data-sort-value="Sims 3, The"|The Sims 3

|Maxis Redwood Shores

|The Sims 3 Engine

|{{Dts|02/06/2009}}

|{{Dts|28/10/2020}}

|

data-sort-value="Sims 4, The"|The Sims 4

|Maxis

|SmartSim

|{{Dts|17/02/2015}}

|

|Metal support added {{Dts|12/11/2019}}{{Citation needed|date=May 2021}}

Sky: Children of the Light

|Thatgamecompany

|N/A

|

|{{Dts|18/07/2019}}

|Native Metal support added since pre-global live in November 2017

Starcraft

|Blizzard Entertainment

|Modified Warcraft II engine

|{{Dts|20/11/2001}}

|

|Metal support since {{Dts|02/07/2020}} with v1.23.5{{Citation needed|date=May 2021}}

StarCraft II

|Blizzard Entertainment

|SC2 Engine

|{{Dts|27/7/2010}}

|

|Metal support in beta since {{Dts|24/1/2017}}{{Citation needed|date=May 2021}}

Tomb Raider

|Feral Interactive

|Foundation Engine

|{{Dts|17/01/2014}}

|

|Metal support with v1.2 in July 2019{{Citation needed|date=May 2021}}

Total War: Rome Remastered

|Feral Interactive

|TW Engine 2

|

|{{Dts|29/4/2021}}

|

Total War: Shogun 2

|Feral Interactive

|TW Engine 3

|{{Dts|31/7/2014}}

|

|Metal support since 4 October 2019{{Citation needed|date=May 2021}}

Total War: Shogun 2: Fall of the Samurai

|Feral Interactive

|TW Engine 3

|{{Dts|18/12/2014}}

|

|Metal support since 4 October 2019{{Citation needed|date=May 2021}}

Total War: Three Kingdoms

|Feral Interactive

|TW Engine 3

|

|{{Dts|23/5/2019}}

|

Total War: Warhammer

|Feral Interactive

|TW Engine 3

|

|{{Dts|19/4/2017}}

|

Total War: Warhammer II

|Feral Interactive

|TW Engine 3

|

|{{Dts|20/11/2018}}

|

data-sort-value="Total WarSaga Thrones of Britannia"|Total War Saga: Thrones of Britannia

|Feral Interactive

|TW Engine 3

|

|{{Dts|24/05/2018}}

|

data-sort-value="Total WarSaga Troy"|Total War Saga: Troy

|Feral Interactive

|TW Engine 3

|

|{{Dts|13/08/2020}}

|

Universe Sandbox

|Giant Army

|Unity Engine 5

|{{TBA}}

|

|Metal support in beta since June 2017{{Citation needed|date=May 2021}}

Unreal Tournament

|Epic Games

|Unreal Engine 4

|{{no2|Cancelled}}

|

|Metal support since January 2017{{Citation needed|date=May 2021}}

War Thunder

|Gaijin Entertainment

|Dagor Engine 4

|{{Dts|1/11/2012}}

|

|Metal support added {{Dts|24/5/2017}} (removed in ? 2018 and reintroduced {{Dts|27/8/2020}}){{Citation needed|date=May 2021}}

Warhammer 40,000: Dawn of War III

|Feral Interactive

|Essence Engine 4

|

|{{Dts|9/6/2017}}

|

data-sort-value="Witness, The"|The Witness

|Thekla, Inc

|Thekla Engine

|

|{{Dts|8/3/2017}}

|

World of Warcraft

|Blizzard Entertainment

|WoW Engine

|{{Dts|23/11/2004}}

|

|Metal support since August 2016{{Citation needed|date=May 2021}}

X-Plane 11

|Laminar Research

|N/A

|{{Dts|30/5/2017}}

|

|Metal support in beta since {{Dts|2/4/2020}}{{Cite web|url=https://developer.x-plane.com/2020/04/x-plane-11-50-public-beta-1-vulkan-and-metal-are-here/|title=X-Plane 11.50 Public Beta 1: Vulkan and Metal Are Here|date=2020-04-02|website=X-Plane Developer|language=en-US|access-date=2020-04-02}}

See also

References

{{Reflist|refs=

{{cite web|url=http://www.polygon.com/2014/9/9/6127259/vainglory-iphone-6-moba-game-apple |access-date=September 9, 2014 |title=This is the game Apple used to show off iPhone 6 |last=McWhertor |first=Michael |date=September 9, 2014 |work=Polygon |publisher=Vox Media |archive-url=https://web.archive.org/web/20140911002224/http://www.polygon.com/2014/9/9/6127259/vainglory-iphone-6-moba-game-apple |archive-date=September 11, 2014 |url-status=live }}

}}