Metal (API): Difference between revisions
Fix typo in Metal 3 support section and add source |
|||
(35 intermediate revisions by 29 users not shown) | |||
Line 3: | Line 3: | ||
{{Use mdy dates|date=January 2015}} |
{{Use mdy dates|date=January 2015}} |
||
{{Infobox software |
{{Infobox software |
||
| name |
| name = Metal |
||
| logo |
| logo = Metal 3 Logo.png |
||
| screenshot |
| screenshot = File:Vainglory Halcyon Fold map.tif |
||
| caption |
| caption = Apple used the mobile [[multiplayer online battle arena]] game ''[[Vainglory (video game)|Vainglory]]'' to demonstrate Metal's graphics capabilities at the [[iPhone 6]]'s September 2014 announcement event.<ref name="Polygon: iPhone 6"/> |
||
| developer |
| developer = [[Apple Inc.]] |
||
| released |
| released = {{start date and age|2014|06}} |
||
| latest release version = |
| latest release version = 24 |
||
| latest release date |
| latest release date = {{start date and age|2022|10}} |
||
| programming language |
| programming language = [[Shading language]]: [[C++14]], Runtime/API: [[Objective-C]] |
||
| operating system |
| operating system = [[iOS]], [[iPadOS]], [[macOS]], [[tvOS]] |
||
| platform |
| platform = |
||
| genre |
| genre = 3D graphics and compute [[Application programming interface|API]] |
||
| license |
| license = [[Proprietary software|Proprietary]] |
||
| website |
| website = {{URL|https://developer.apple.com/metal/}} |
||
}} |
}} |
||
'''Metal''' is a low-level, low-overhead [[Hardware acceleration|hardware-accelerated]] [[3D graphic]] and [[compute shader]] [[API]] created by [[Apple Inc.|Apple]] |
'''Metal''' is a low-level, low-overhead [[Hardware acceleration|hardware-accelerated]] [[3D graphic]] and [[compute shader]] [[API]] created by [[Apple Inc.|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 [[Computing platform|platforms]] such as [[Vulkan (API)|Vulkan]] and [[DirectX 12]]. |
||
Metal is an [[Object-oriented programming|object-oriented]] API that can be invoked using the [[Swift (programming language)|Swift]], [[Objective-C]] or [[C++17]]<ref>{{Cite web|url=https://developer.apple.com/metal/cpp/|title = Getting started with Metal-CPP - Metal}}</ref> [[programming language]]s. 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."<ref>{{cite web|last1=Apple Inc.|title=Metal Shading Language Specification|url=https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf}}</ref> |
Metal is an [[Object-oriented programming|object-oriented]] API that can be invoked using the [[Swift (programming language)|Swift]], [[Objective-C]] or [[C++17]]<ref>{{Cite web|url=https://developer.apple.com/metal/cpp/|title = Getting started with Metal-CPP - Metal}}</ref> [[programming language]]s. 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."<ref>{{cite web|last1=Apple Inc.|title=Metal Shading Language Specification|url=https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf}}</ref> |
||
==Features== |
==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. |
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.<ref>{{cite web|publisher=Apple Inc.|title=Setting Up a Command Structure|url=https://developer.apple.com/documentation/metal/setting_up_a_command_structure}}</ref> |
||
Metal improves the capabilities of [[GPGPU]] programming by using [[compute kernel|compute shader]]s. Metal uses a specific [[shading language]] based on [[C++14]], implemented using [[Clang]] and [[LLVM]].<ref>{{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}}</ref> |
Metal improves the capabilities of [[GPGPU]] programming by using [[compute kernel|compute shader]]s. Metal uses a specific [[shading language]] based on [[C++14]], implemented using [[Clang]] and [[LLVM]].<ref>{{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}}</ref> |
||
Metal |
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.<ref>{{cite web|last1=Apple Inc.|title=Setting Resource Storage Mode|url=https://developer.apple.com/documentation/metal/setting_resource_storage_modes}}</ref> <ref>{{cite web|title=Synchronizing a Managed Resource|publisher=Apple Inc.|url=https://developer.apple.com/documentation/metal/synchronizing_a_managed_resource}}</ref> |
||
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). |
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).<ref>{{cite web|title=GPU Selection in macOS|publisher=Apple Inc.|url=https://developer.apple.com/documentation/metal/gpu_selection_in_macos}}</ref> |
||
===Metal Performance Shaders=== |
===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. |
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.<ref>{{cite web|title=Metal Performance Shaders|url=https://developer.apple.com/documentation/metalperformanceshaders}}</ref> It provides functions including: |
||
* Image filtering algorithms |
* Image filtering algorithms |
||
Line 42: | Line 42: | ||
Metal has been available since June 2, 2014 on [[List of iOS devices|iOS devices]] powered by [[Apple A7]] or later,<ref>{{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}}</ref> and since June 8, 2015 on [[Macintosh|Macs]] (2012 models or later) running [[OS X El Capitan]].<ref>{{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 Inc.|Apple]] |date=8 June 2015 |location=[[San Francisco]] |first1=Colin |last1=Smith |first2=Starlayne |last2=Meza}}</ref> |
Metal has been available since June 2, 2014 on [[List of iOS devices|iOS devices]] powered by [[Apple A7]] or later,<ref>{{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}}</ref> and since June 8, 2015 on [[Macintosh|Macs]] (2012 models or later) running [[OS X El Capitan]].<ref>{{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 Inc.|Apple]] |date=8 June 2015 |location=[[San Francisco]] |first1=Colin |last1=Smith |first2=Starlayne |last2=Meza}}</ref> |
||
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 (computer programming)|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.<ref>{{cite web |title=Archived copy of the Metal homepage, November 2017 |url=https://developer.apple.com/metal/ |website=Apple Developer |publisher=[[Apple Inc.|Apple]] |via=[[Wayback Machine]] |date=20 November 2017 |url-status=bot: unknown |archive-url=https://web.archive.org/web/20171120014933/https://developer.apple.com/metal/ |archive-date=November 20, 2017 |df=mdy-all }}</ref> |
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 (computer programming)|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.<ref>{{cite web |title=Archived copy of the Metal homepage, November 2017 |url=https://developer.apple.com/metal/ |website=Apple Developer |publisher=[[Apple Inc.|Apple]] |via=[[Wayback Machine]] |date=20 November 2017 |url-status=bot: unknown |archive-url=https://web.archive.org/web/20171120014933/https://developer.apple.com/metal/ |archive-date=November 20, 2017 |df=mdy-all }}</ref> |
||
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.<ref>{{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}}</ref> |
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.<ref>{{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}}</ref> |
||
At the 2022 [[WWDC]], Apple announced the third version of Metal (Metal 3), |
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.<ref>{{cite web|url=https://developer.apple.com/videos/play/wwdc2022/10066|title=Discover Metal 3|website=developer.apple.com|access-date=2022-06-24}}</ref> Also announced possibility to use C/C++ for Metal API.<ref>{{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}}</ref> |
||
==Supported GPUs== |
==Supported GPUs== |
||
The first |
The first version of Metal supports the following hardware and software:<ref>{{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}}</ref> |
||
* [[Apple A7]] [[system on chip|SoC]] or later |
* [[Apple A7]] [[system on chip|SoC]] or later with [[iOS 8]] or later |
||
* [[Apple M1]] [[system on chip|SoC]] or later |
* [[Apple M1]] [[system on chip|SoC]] or later with [[macOS Big Sur|macOS 11]] or later |
||
* Intel Processor with [[Intel HD and Iris Graphics]] |
* Intel Processor with [[Intel HD and Iris Graphics]] Ivy Bridge series or later with [[OS X El Capitan|OS X 10.11]] or later |
||
* AMD Graphics with [[Graphics Core Next|GCN]] or [[RDNA (microarchitecture)|RDNA]] architecture with [[OS X El Capitan]] or later |
* AMD Graphics with [[Graphics Core Next|GCN]] or [[RDNA (microarchitecture)|RDNA]] architecture with [[OS X El Capitan|OS X 10.11]] or later |
||
* NVIDIA Graphics with [[Kepler (microarchitecture)| |
* NVIDIA Graphics with [[Kepler (microarchitecture)|Kepler]] architecture with [[OS X El Capitan|OS X 10.11]] to [[macOS Big Sur|macOS 11]] operating system |
||
* NVIDIA Graphics with [[Maxwell (microarchitecture)|Maxwell]] architecture or [[Pascal (microarchitecture)|Pascal]] architecture with [[OS X El Capitan]] to [[macOS High Sierra]] operating system |
* NVIDIA Graphics with [[Maxwell (microarchitecture)|Maxwell]] architecture or [[Pascal (microarchitecture)|Pascal]] architecture with [[OS X El Capitan|OS X 10.11]] to [[macOS High Sierra|macOS 10.13]] operating system |
||
The |
The second version of Metal supports the following hardware and software: |
||
⚫ | |||
* [[Apple |
* [[Apple A7]] [[system on chip|SoC]] or later with [[iOS 11]] or later |
||
* |
* [[Apple M1]] [[system on chip|SoC]] or later with [[macOS Big Sur|macOS 11]] or later |
||
* Intel Processor with [[Intel HD and Iris Graphics]] Skylake series or later with [[macOS High Sierra|macOS 10.13]] or later |
|||
* AMD Graphics with [[Graphics Core Next|GCN]] or [[RDNA (microarchitecture)|RDNA]] architecture with [[macOS High Sierra|macOS 10.13]] or later |
|||
The third version of Metal supports the following hardware and software:<ref>{{cite web|title=Metal feature set tables|url=https://developer.apple.com/metal/Metal-Feature-Set-Tables.pdf|website=[[Apple]]}}</ref> |
|||
⚫ | |||
* [[Apple M1]] [[system on chip|SoC]] or later with [[macOS Ventura|macOS 13]] or later |
|||
* Intel Processor with [[Intel HD and Iris Graphics|Intel]] UHD 630 or Iris Plus (Kaby Lake or later) with [[macOS Ventura|macOS 13]] or later |
|||
* AMD Graphics with [[RDNA (microarchitecture)|RDNA]] architecture (5000 and 6000 series) and Pro Vega (5th generation [[Graphics Core Next|GCN]] architecture) |
* AMD Graphics with [[RDNA (microarchitecture)|RDNA]] architecture (5000 and 6000 series) and Pro Vega (5th generation [[Graphics Core Next|GCN]] architecture) |
||
Line 70: | Line 77: | ||
!Developer (macOS version) |
!Developer (macOS version) |
||
!Game engine |
!Game engine |
||
!MacOS release date (OpenGL) |
!MacOS release date (OpenGL/DirectX) |
||
!Metal-based release date |
!Metal-based release date |
||
!Metal support notes |
!Metal support notes |
||
|- |
|- |
||
|[[Eve Online|EVE Online]] |
|''[[Eve Online|EVE Online]]'' |
||
|[[CCP Games]] |
|[[CCP Games]] |
||
|''N/A'' |
|''N/A'' |
||
|{{Dts|06/11/2007}} |
|||
⚫ | |||
|{{Dts|14/10/2021}} |
|{{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}} |
|||
⚫ | |||
|- |
|- |
||
|''[[Civilization VI]]'' |
|''[[Civilization VI]]'' |
||
Line 90: | Line 97: | ||
|''[[Batman: Arkham City]]'' |
|''[[Batman: Arkham City]]'' |
||
|[[Feral Interactive]] |
|[[Feral Interactive]] |
||
|[[ |
|[[Unreal Engine 3]] |
||
|{{Dts|18/10/2013}} |
|{{Dts|18/10/2013}} |
||
| |
| |
||
Line 127: | Line 134: | ||
|Foundation Engine |
|Foundation Engine |
||
| |
| |
||
|2019 |
|{{Dts|2019}} |
||
| |
| |
||
|- |
|- |
||
Line 139: | Line 146: | ||
|''[[Life Is Strange 2]]'' |
|''[[Life Is Strange 2]]'' |
||
|[[Feral Interactive]] |
|[[Feral Interactive]] |
||
|[[ |
|[[Unreal Engine 4]] |
||
| |
| |
||
|2019 |
|{{Dts|2019}} |
||
| |
| |
||
|- |
|- |
||
Line 152: | Line 159: | ||
|- |
|- |
||
|''[[Divinity: Original Sin II]]'' |
|''[[Divinity: Original Sin II]]'' |
||
|[[Larian Studios]] |
|||
|Elverils |
|||
|Divinity Engine 2 |
|Divinity Engine 2 |
||
| |
| |
||
Line 159: | Line 166: | ||
|- |
|- |
||
|''[[Baldur's Gate III]]'' |
|''[[Baldur's Gate III]]'' |
||
|[[Larian Studios]] |
|||
|Elverils |
|||
|Divinity Engine 4.0 |
|Divinity Engine 4.0 |
||
|{{TBA}} |
|||
| |
| |
||
|{{Dts|22/09/2023}} |
|||
|Metal support in early access since {{Dts|06/10/2020}}{{Citation needed|date=May 2021}} |
|Metal support in early access since {{Dts|06/10/2020}}{{Citation needed|date=May 2021}} |
||
|- |
|- |
||
Line 272: | Line 279: | ||
|''[[BioShock|Bioshock Remastered]]'' |
|''[[BioShock|Bioshock Remastered]]'' |
||
|[[Feral Interactive]] |
|[[Feral Interactive]] |
||
|[[ |
|[[Unreal Engine 2.5]] |
||
| |
| |
||
|{{Dts|22/8/2017}} |
|{{Dts|22/8/2017}} |
||
Line 279: | Line 286: | ||
|''[[BioShock 2|Bioshock 2 Remastered]]'' |
|''[[BioShock 2|Bioshock 2 Remastered]]'' |
||
|[[Feral Interactive]] |
|[[Feral Interactive]] |
||
|[[ |
|[[Unreal Engine 2.5]] |
||
| |
| |
||
|{{Dts|22/10/2020}} |
|{{Dts|22/10/2020}} |
||
Line 356: | Line 363: | ||
|''[[Fortnite]]'' |
|''[[Fortnite]]'' |
||
|[[Epic Games]] |
|[[Epic Games]] |
||
|[[ |
|[[Unreal Engine 4]] |
||
| |
| |
||
|{{Dts|25/7/2017}} |
|{{Dts|25/7/2017}} |
||
Line 363: | Line 370: | ||
|''[[Obduction (video game)|Obduction]]'' |
|''[[Obduction (video game)|Obduction]]'' |
||
|[[Cyan Worlds]] |
|[[Cyan Worlds]] |
||
|[[ |
|[[Unreal Engine 4]] |
||
| |
| |
||
|{{Dts|29/3/2017}} |
|{{Dts|29/3/2017}} |
||
Line 370: | Line 377: | ||
|''[[Everspace]]'' |
|''[[Everspace]]'' |
||
|Rockfish |
|Rockfish |
||
|[[ |
|[[Unreal Engine 4]] |
||
| |
| |
||
|{{Dts|26/5/2017}} |
|{{Dts|26/5/2017}} |
||
Line 377: | Line 384: | ||
|''[[Ark: Survival Evolved]]'' |
|''[[Ark: Survival Evolved]]'' |
||
|[[Studio Wildcard]] |
|[[Studio Wildcard]] |
||
|[[ |
|[[Unreal Engine 4]] |
||
| |
| |
||
|{{Dts|29/8/2017}} |
|{{Dts|29/8/2017}} |
||
Line 384: | Line 391: | ||
|''[[Observer (video game)|Observer]]'' |
|''[[Observer (video game)|Observer]]'' |
||
|[[Bloober Team]] |
|[[Bloober Team]] |
||
|[[ |
|[[Unreal Engine 4]] |
||
| |
| |
||
|{{Dts|24/10/2017}} |
|{{Dts|24/10/2017}} |
||
Line 391: | Line 398: | ||
|''[[Unreal Tournament (cancelled_video_game)|Unreal Tournament]]'' |
|''[[Unreal Tournament (cancelled_video_game)|Unreal Tournament]]'' |
||
|[[Epic Games]] |
|[[Epic Games]] |
||
|[[ |
|[[Unreal Engine 4]] |
||
|{{Cancelled}} |
|{{no2|Cancelled}} |
||
| |
| |
||
|Metal support since January 2017{{Citation needed|date=May 2021}} |
|Metal support since January 2017{{Citation needed|date=May 2021}} |
||
Line 398: | Line 405: | ||
|''Refunct'' |
|''Refunct'' |
||
|Dominique Grieshofer |
|Dominique Grieshofer |
||
|[[ |
|[[Unreal Engine 4]] |
||
| |
| |
||
|{{Dts|5/9/2016}} |
|{{Dts|5/9/2016}} |
||
Line 468: | Line 475: | ||
|''[[MXGP3]]'' |
|''[[MXGP3]]'' |
||
|[[Virtual Programming (company)|Virtual Programming]] |
|[[Virtual Programming (company)|Virtual Programming]] |
||
|[[ |
|[[Unreal Engine 4]] |
||
| |
| |
||
|{{Dts|23/11/2018}} |
|{{Dts|23/11/2018}} |
||
Line 475: | Line 482: | ||
|''[[Gravel (video game)|Gravel]]'' |
|''[[Gravel (video game)|Gravel]]'' |
||
|[[Virtual Programming (company)|Virtual Programming]] |
|[[Virtual Programming (company)|Virtual Programming]] |
||
|[[ |
|[[Unreal Engine 4]] |
||
| |
| |
||
|{{Dts|20/1/2019}} |
|{{Dts|20/1/2019}} |
||
Line 492: | Line 499: | ||
| |
| |
||
|{{Dts|18/11/2016}} |
|{{Dts|18/11/2016}} |
||
⚫ | |||
|- |
|||
|''[[The Sims 3]]'' |
|||
|[[Maxis]] Redwood Shores |
|||
|The Sims 3 Engine |
|||
|{{Dts|02/06/2009}} |
|||
|{{Dts|28/10/2020}} |
|||
| |
| |
||
|- |
|- |
||
Line 501: | Line 515: | ||
|Metal support added {{Dts|12/11/2019}}{{Citation needed|date=May 2021}} |
|Metal support added {{Dts|12/11/2019}}{{Citation needed|date=May 2021}} |
||
|- |
|- |
||
|The Elder Scrolls Online |
|''[[The Elder Scrolls Online]]'' |
||
|Zenimax Online Studios |
|[[Zenimax Online Studios]] |
||
|''N/A'' |
|''N/A'' |
||
|{{Dts|04/04/2014}} |
|{{Dts|04/04/2014}} |
||
Line 514: | Line 528: | ||
|{{Dts|18/07/2019}} |
|{{Dts|18/07/2019}} |
||
|Native Metal support added since pre-global live in November 2017 |
|Native Metal support added since pre-global live in November 2017 |
||
|- |
|||
|[[Resident Evil Village]] |
|||
|[[Capcom]] |
|||
|[[RE Engine]] |
|||
⚫ | |||
|{{Dts|28/10/2022}} |
|||
|First macOS game with MetalFX support |
|||
|} |
|} |
||
Line 522: | Line 543: | ||
* [[MoltenVK]] - software compatibility library to run Vulkan software on top of the Metal API |
* [[MoltenVK]] - software compatibility library to run Vulkan software on top of the Metal API |
||
* [[WebGPU]] |
* [[WebGPU]] |
||
* [[OpenGL]] - cross-platform graphics API |
|||
==References== |
==References== |
||
Line 537: | Line 559: | ||
{{iOS}} |
{{iOS}} |
||
[[Category: |
[[Category:2014 software]] |
||
[[Category:3D graphics APIs]] |
[[Category:3D graphics APIs]] |
||
[[Category:Apple Inc. developed frameworks]] |
|||
[[Category:Graphics libraries]] |
[[Category:Graphics libraries]] |
||
[[Category:IOS]] |
[[Category:IOS]] |
Latest revision as of 02:23, 15 October 2024
Developer(s) | Apple Inc. |
---|---|
Initial release | June 2014 |
Stable release | 24
/ October 2022 |
Written in | Shading language: C++14, Runtime/API: Objective-C |
Operating system | iOS, iPadOS, macOS, tvOS |
Type | 3D graphics and compute API |
License | Proprietary |
Website | developer |
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[2] 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."[3]
Features
[edit]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.[4]
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.[5]
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.[6] [7]
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).[8]
Metal Performance Shaders
[edit]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.[9] It provides functions including:
- Image filtering algorithms
- Neural network processing
- Advanced math operations
- Ray tracing
History
[edit]Metal has been available since June 2, 2014 on iOS devices powered by Apple A7 or later,[10] and since June 8, 2015 on Macs (2012 models or later) running OS X El Capitan.[11]
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.[12]
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.[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.[14] Also announced possibility to use C/C++ for Metal API.[15]
Supported GPUs
[edit]The first version of Metal supports the following hardware and software:[16]
- Apple A7 SoC or later with iOS 8 or later
- Apple M1 SoC or later with macOS 11 or later
- Intel Processor with Intel HD and Iris Graphics Ivy Bridge series or later with OS X 10.11 or later
- AMD Graphics with GCN or RDNA architecture with OS X 10.11 or later
- NVIDIA Graphics with Kepler architecture with OS X 10.11 to macOS 11 operating system
- NVIDIA Graphics with Maxwell architecture or Pascal architecture with OS X 10.11 to macOS 10.13 operating system
The second version of Metal supports the following hardware and software:
- Apple A7 SoC or later with iOS 11 or later
- Apple M1 SoC or later with macOS 11 or later
- Intel Processor with Intel HD and Iris Graphics Skylake series or later with macOS 10.13 or later
- AMD Graphics with GCN or RDNA architecture with macOS 10.13 or later
The third version of Metal supports the following hardware and software:[17]
- Apple A14 or later with iOS 16, iPadOS 16 or later
- Apple M1 SoC or later with macOS 13 or later
- Intel Processor with Intel UHD 630 or Iris Plus (Kaby Lake or later) with macOS 13 or later
- AMD Graphics with RDNA architecture (5000 and 6000 series) and Pro Vega (5th generation GCN architecture)
Adoption
[edit]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.[18] macOS games using Metal for rendering are listed below.
Title | Developer (macOS version) | Game engine | MacOS release date (OpenGL/DirectX) | Metal-based release date | Metal support notes |
---|---|---|---|---|---|
EVE Online | CCP Games | N/A | 6 November 2007 | 14 October 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] |
Civilization VI | Aspyr Media | LORE | 24 October 2016 | Metal support since 5 April 2019[citation needed] | |
Batman: Arkham City | Feral Interactive | Unreal Engine 3 | 18 October 2013 | Metal support since 21 February 2019 with v1.2[citation needed] | |
Dota 2 | Valve | Source 2 | 18 July 2013 | MoltenVK was announced on 26 February 2018.[19] The option to use this became available on 31 May 2018.[20] | |
Quake II | id Software | Quake II engine | 9 February 2019 | A port using MoltenVK was released as vkQuake2.[21] | |
Tomb Raider | Feral Interactive | Foundation Engine | 17 January 2014 | Metal support with v1.2 in July 2019[citation needed] | |
Rise of the Tomb Raider | Feral Interactive | Foundation Engine | 12 April 2018 | ||
Shadow of the Tomb Raider | Feral Interactive | Foundation Engine | 2019 | ||
F1 2016 | Feral Interactive | EGO Engine 4.0 | 6 April 2017 | ||
Life Is Strange 2 | Feral Interactive | Unreal Engine 4 | 2019 | ||
Life Is Strange: Before the Storm | Feral Interactive | Unity Engine | 13 September 2018 | ||
Divinity: Original Sin II | Larian Studios | Divinity Engine 2 | 31 January 2019 | ||
Baldur's Gate III | Larian Studios | Divinity Engine 4.0 | 22 September 2023 | Metal support in early access since 6 October 2020[citation needed] | |
Company of Heroes 2 | Feral Interactive | Essence Engine 3 | 21 January 2015 | Metal support since 19 October 2018[citation needed] | |
Hitman | Feral Interactive | Glacier 2 | 20 June 2017 | ||
Sid Meier's Railroads! | Feral Interactive | Gamebryo | 1 November 2012 | Metal support since 18 December 2018[citation needed] | |
Warhammer 40,000: Dawn of War III | Feral Interactive | Essence Engine 4 | 9 June 2017 | ||
Total War: Rome Remastered | Feral Interactive | TW Engine 2 | 29 April 2021 | ||
Total War: Three Kingdoms | Feral Interactive | TW Engine 3 | 23 May 2019 | ||
Total War: Warhammer | Feral Interactive | TW Engine 3 | 19 April 2017 | ||
Total War: Warhammer II | Feral Interactive | TW Engine 3 | 20 November 2018 | ||
Total War Saga: Thrones of Britannia | Feral Interactive | TW Engine 3 | 24 May 2018 | ||
Total War Saga: Troy | Feral Interactive | TW Engine 3 | 13 August 2020 | ||
Medieval II: Total War | Feral Interactive | TW Engine 2 | 17 December 2015 | Metal support since 25 October 2018[citation needed] | |
Empire: Total War | Feral Interactive | TW Engine 3 | 4 March 2009 | Metal support since 16 December 2019[citation needed] | |
Napoleon: Total War | Feral Interactive | TW Engine 3 | 2 July 2013 | Metal support since 25 October 2019 with v1.2[citation needed] | |
Total War: Shogun 2 | Feral Interactive | TW Engine 3 | 31 July 2014 | Metal support since 4 October 2019[citation needed] | |
Total War: Shogun 2: Fall of the Samurai | Feral Interactive | TW Engine 3 | 18 December 2014 | Metal support since 4 October 2019[citation needed] | |
Bioshock Remastered | Feral Interactive | Unreal Engine 2.5 | 22 August 2017 | ||
Bioshock 2 Remastered | Feral Interactive | Unreal Engine 2.5 | 22 October 2020 | ||
F1 2017 | Feral Interactive | EGO Engine 4.0 | 25 August 2017 | ||
Deus Ex: Mankind Divided | Feral Interactive | Dawn Engine | 12 December 2017 | ||
DiRT Rally | Feral Interactive | EGO Engine 2.5 | 16 November 2017 | ||
Ballistic Overkill | Aquiris Game Studio | Unity Engine 5 | 28 March 2017 | ||
BattleTech | Harebrained Schemes | Unity Engine 5 | 24 April 2018 | ||
Mafia III | Aspyr Media | Illusion Engine | 11 May 2017 | ||
World of Warcraft | Blizzard Entertainment | WoW Engine | 23 November 2004 | Metal support since August 2016[citation needed] | |
Starcraft | Blizzard Entertainment | Modified Warcraft II engine | 20 November 2001 | Metal support since 2 July 2020 with v1.23.5[citation needed] | |
StarCraft II | Blizzard Entertainment | SC2 Engine | 27 July 2010 | Metal support in beta since 24 January 2017[citation needed] | |
Heroes of the Storm | Blizzard Entertainment | SC2 Engine | 2 June 2015 | Metal support in beta since 24 January 2017 (temporarily removed on 29 November 2017[22] until ?)[citation needed] | |
Fortnite | Epic Games | Unreal Engine 4 | 25 July 2017 | ||
Obduction | Cyan Worlds | Unreal Engine 4 | 29 March 2017 | ||
Everspace | Rockfish | Unreal Engine 4 | 26 May 2017 | ||
Ark: Survival Evolved | Studio Wildcard | Unreal Engine 4 | 29 August 2017 | ||
Observer | Bloober Team | Unreal Engine 4 | 24 October 2017 | ||
Unreal Tournament | Epic Games | Unreal Engine 4 | Cancelled | Metal support since January 2017[citation needed] | |
Refunct | Dominique Grieshofer | Unreal Engine 4 | 5 September 2016 | ||
Cities: Skylines | Paradox Interactive | Unity Engine 5 | 10 March 2015 | Metal support since 18 May 2017[citation needed] | |
Universe Sandbox | Giant Army | Unity Engine 5 | TBA | Metal support in beta since June 2017[citation needed] | |
War Thunder | Gaijin Entertainment | Dagor Engine 4 | 1 November 2012 | Metal support added 24 May 2017 (removed in ? 2018 and reintroduced 27 August 2020)[citation needed] | |
The Witness | Thekla, Inc | Thekla Engine | 8 March 2017 | ||
Micro Machines World Series | Virtual Programming | Unity Engine 5 | 30 June 2017 | ||
Guardians of the Galaxy: The Telltale Series | Telltale Games | Telltale Tool | 18 April 2017 | ||
Batman: The Enemy Within | Telltale Games | Telltale Tool | 8 August 2017 | ||
Minecraft: Story Mode - Season Two | Telltale Games | Telltale Tool | 11 July 2017 | ||
ARMA 3 | Virtual Programming | Real Virtuality | TBA | Metal support in beta since 17 September 2017[citation needed] | |
MXGP3 | Virtual Programming | Unreal Engine 4 | 23 November 2018 | ||
Gravel | Virtual Programming | Unreal Engine 4 | 20 January 2019 | ||
X-Plane 11 | Laminar Research | N/A | 30 May 2017 | Metal support in beta since 2 April 2020[23] | |
Headlander | Double Fine Productions | Buddha Engine | 18 November 2016 | ||
The Sims 3 | Maxis Redwood Shores | The Sims 3 Engine | 2 June 2009 | 28 October 2020 | |
The Sims 4 | Maxis | SmartSim | 17 February 2015 | Metal support added 12 November 2019[citation needed] | |
The Elder Scrolls Online | Zenimax Online Studios | N/A | 4 April 2014 | 22 October 2018 | OpenGL Renderer replaced with Vulkan via MoltenVK wrapper (translates Vulkan API calls to Metal) in patch 4.2.5 |
Sky: Children of the Light | Thatgamecompany | N/A | 18 July 2019 | Native Metal support added since pre-global live in November 2017 | |
Resident Evil Village | Capcom | RE Engine | 28 October 2022 | First macOS game with MetalFX support |
See also
[edit]- Direct3D – DirectX 12 introduces low-level APIs
- Mantle – low-level API by AMD
- Vulkan – low-overhead successor to OpenGL
- MoltenVK - software compatibility library to run Vulkan software on top of the Metal API
- WebGPU
- OpenGL - cross-platform graphics API
References
[edit]- ^ McWhertor, Michael (September 9, 2014). "This is the game Apple used to show off iPhone 6". Polygon. Vox Media. Archived from the original on September 11, 2014. Retrieved September 9, 2014.
- ^ "Getting started with Metal-CPP - Metal".
- ^ Apple Inc. "Metal Shading Language Specification" (PDF).
- ^ "Setting Up a Command Structure". Apple Inc.
- ^ "Metal Shading Language Guide". September 8, 2014. Retrieved September 10, 2014.
- ^ Apple Inc. "Setting Resource Storage Mode".
- ^ "Synchronizing a Managed Resource". Apple Inc.
- ^ "GPU Selection in macOS". Apple Inc.
- ^ "Metal Performance Shaders".
- ^ Machkovech, Same (June 2, 2014). "Apple gets heavy with gaming, announces Metal development platform". Ars Technica. Condé Nast.
- ^ Smith, Colin; Meza, Starlayne (June 8, 2015). "Apple Announces OS X El Capitan with Refined Experience & Improved Performance". Newsroom. San Francisco: Apple.
- ^ "Archived copy of the Metal homepage, November 2017". Apple Developer. Apple. November 20, 2017. Archived from the original on November 20, 2017 – via Wayback Machine.
{{cite web}}
: CS1 maint: bot: original URL status unknown (link) - ^ "Bring your Metal app to Apple Silicon Macs". developer.apple.com. Retrieved July 13, 2020.
- ^ "Discover Metal 3". developer.apple.com. Retrieved June 24, 2022.
- ^ "Program Metal in C++ with metal-cpp". developer.apple.com. Retrieved September 10, 2022.
- ^ Chiappetta, Marco (December 11, 2018). "Apple Turns Its Back On Customers And NVIDIA With macOS Mojave". Forbes.
- ^ "Metal feature set tables" (PDF). Apple.
- ^ Apple Inc. "WWDC 2017 Platforms State of the Union".
- ^ "Vulkan Applications Enabled on Apple Platforms". Khronos Group Press Release. Retrieved February 24, 2021.
- ^ Larabel, Michael (June 1, 2018). "Initial Vulkan Performance On macOS With Dota 2 Is Looking Very Good". Phoronix. Retrieved June 5, 2018.
- ^ Kondrak, Krzysztof [@k_kondrak] (February 9, 2019). "vkQuake2 gets MacOS support" (Tweet). Retrieved February 9, 2019 – via Twitter.
- ^ "HEROES OF THE STORM BALANCE PATCH NOTES — NOVEMBER 29, 2017". news.blizzard.com. November 29, 2017.
- ^ "X-Plane 11.50 Public Beta 1: Vulkan and Metal Are Here". X-Plane Developer. April 2, 2020. Retrieved April 2, 2020.
External links
[edit]- Metal for Developers
- Metal Programming Guide (preliminary)
- WWDC14 demo; extended version
- Install macOS 10.14 Mojave on Mac Pro (Mid 2010) and Mac Pro (Mid 2012) - Apple article explaining what GPUs are compatible with Apple's Metal APIs on Mac OS 10.14 (Mojave) operating system