metal developer tools for windows что это
Metal Developer Tools on Windows Offer New Gaming Opportunities
Game developers are now able to more easily develop games for Apple devices using Windows machines, thanks to a new set of Metal developer tools released by Apple (via Reddit).
Apple quietly released a set of Metal Developer Tools for Windows 10 at WWDC this year, which enables Metal Shading Language (MSL) compilation on Windows into Metal Library Objects targeting Apple platforms. This means that game production teams may now use PCs to compile games developed on Windows for macOS and other Apple operating systems.
Many game development studios have established game or graphics asset production pipelines that use the Microsoft Windows infrastructure. One of the key final steps in the asset creation process is compiling the graphics and compute shaders for inclusion in the game.
Since Apple is transitioning the Mac to custom silicon, developers that bring their games to Metal will be able to run them on iOS, iPadOS, tvOS, and macOS. Apple’s API automatically translates all inputs to whatever the available input method may be, such as touch, controller, or keyboard and mouse. Developers targeting the Apple platform can now develop for iPad, iPhone, Mac, and Apple TV simultaneously. This may make the Apple platform more attractive to game developers as they will have access to a far larger market share than on macOS or iOS alone.
Although it is not possible to develop games for Apple devices on Windows entirely, since a Mac is still needed to sign software and for testing, the availability of gaming-oriented Apple developer tools for Windows marks a significant step in gaming on Apple devices.
As Apple moves the Mac to custom silicon, where it will no longer support Boot Camp, it is interesting that Apple is releasing developer tools specifically for gaming with regards to Windows. Seeing that these new developer tools allow Windows games to be compiled into Metal for Apple platforms, rather than being completely rebuilt, it should now be easier for developers to port native PC games and AAA titles to the Mac.
Update: Max Tech also has a good video covering the topic:
Apple Metal API: в чем же фишка?
На WWDC 2014 всех нас ждал сюрприз: анонс нового графического 3D API под названием Metal. Но на этот раз мы имеем дело не с новым высокоуровневым API поверх OpenGL ES (как было в случае с Scene Kit), а с новым низкоуровневым API для рендеринга и вычислений, которое может служить заменой OpenGL в играх. По словам Apple, Metal может быть до 10 раз быстрее, чем OpenGL ES (точнее говоря — может генерировать вызовы отрисовки [draw calls; передача данных на GPU] в 10 раз быстрее) и доступен только на устройствах с iOS и процессором последнего поколения A7.
Этот анонс спровоцировал новую волну обсуждения и споров насчет необходимости появления новых графических API, которые должны (или не должны — кто знает) заменить OpenGL. Предлагаемый вашему вниманию пост не намерен участвовать в этой дискуссии – его целью является разъяснение того, чем все-таки Metal отличается от OpenGL ES, чьей заменой он является. Чтобы понять, что такого особенного (или же наоборот, ничего особенного) есть в Metal API, нам придется немного заглянуть под «капот» графических API и GPU.
Как работают GPU и графические API
Наивный читатель может предположить, что вызов API напрямую делает что-то на GPU или позволяет чему-то происходить внутри GPU. Еще более наивный читатель предполагает, что GPU заканчивает обработку этого вызова, когда API возвращает результат. Оба этих утверждения далеки от реальности. Если бы драйвер выполнял команды рендеринга в тот же момент, когда они были созданы и ждал бы завершения процесса рендеринга перед возвращением результата в вызов API, то ни CPU, ни GPU не могли бы работать эффективно, поскольку один из процессоров всегда был бы заблокирован в угоду другому.
Для простого улучшения в работе GPU этот процесс стоит запустить асинхронно; тогда GPU не будет блокировать CPU и вызовы API будут возвращать результат почти мгновенно. В этом случае GPU возможно не будет использоваться на все 100%, поскольку ему возможно придется ждать от CPU новых вызовов рендеринга (= начала кадра), в то время как вызовы остальных команд будут ждать завершения предыдущих. Это становится причиной того, почему большинство графических драйверов собирают все вызовы отрисовки (и другие задачи, которые нужно будет выполнить на GPU — например, изменение состояний) для отрисовки всего кадра перед отправкой его на GPU. Эти буферизованные команды будут затем отосланы обратно после того, как будет получена команда для отрисовки следующего кадра, благодаря чему GPU будет использоваться настолько эффективно, насколько это возможно. Конечно, это добавит один кадр задержки: пока CPU будет создавать задание для текущего фрейма, прошлый фрейм будет рендериться на GPU. На самом деле, можно буферизовать больше одного кадра и таким образом добиваться большей частоты смены кадров — за счет еще большей задержки.
Другая ошибка в нашем наивном предположении состоит в предположении о том, чем занимаются вызовы изменения состояний.
Итак, мы узнали как минимум две важные вещи о том, что происходит за сценой совместной работы OpenGL с современными GPU: изменение состояний может быть сложным, если требуется новая комбинация состояний и все операции на GPU будут задержаны на некоторое количество времени.
В приложении, один поток актуальных команд для одного кадра, которые надо выполнить на GPU, формируется и отправляется на GPU сразу весь за один раз (на самом деле все немного сложнее, но давайте не будет пока углубляться).
Подробнее прочитать о том, как работает современный пайплайн компьютерной графики вы можете в серии статей Fabian Giesens — “A trip down the Graphics Pipeline“.
Почему у другой программной модели могут быть преимущества
Как вы уже увидели, от программиста спрятано огромное количество сложностей и хитрых трюков (их наверняка еще больше, чем я упомянул), которые прячут то, что непосредственно происходит. Одни из них делают жизнь простого разработчика проще, другие — заставляют его искать способы обхитрить драйвер или «копать» в сторону побочных эффектов работы вызовов API.
Некоторые графические API сегодня пытаются убрать большую часть этих трюков, раскрывая скрываемую ими «запутанность» – и в некоторых случаях оставляя на волю программы решение всех связанных проблем. В этом направлении шли графические API PS3, в нем же идет AMD со своим Mantle, туда же собираются грядущие DirectX 12 и Apple Metal.
Что же изменилось?
Буферы команд теперь открыты и приложение должно заполнять эти буферы и отправлять их в очередь команд, которая будет выполнять эти буферы в заданном порядке на GPI — таким образом приложение будет иметь полный контроль над заданием, отправляемым на GPU, и определять, сколько кадров задержки необходимо добавить (добавляя задержку, но при этом увеличивая степень используемости GPU). Буферизация команд на GPU и отправка их асинхронно в следующий фрейм должна быть реализована самим приложением.
Поскольку становится ясно, что эти буферы не будут выполняться прямо сразу (то есть во время создания) и что множественные буферы могут быть созданы и добавлены в очередь на выполнение в определенном порядке, приложение может позволить себе их построение в нескольких потоках в параллели. Также для программиста становится более очевидным, какие из результатов вычислений уже доступны, а какие — нет.
Изменения состояний теперь организованы в объекты состояний, которые могут просто переключаться, в то время как создание этих объектов будет обходиться дороже. Например, MTLRenderPipelineState содержит шейдеры и все состояния, которые реализованы их патчингом.
Другой плюс от нового API в том, что оно не обязано нести груз совместимости с предыдущими версиями и поэтому не будет таким консервативным.
Есть нюанс и в заточке под A7 — благодаря ему Metal заточен под работу на системах с общей памятью, т.е. CPU и GPU могут получать прямой доступ к одним данным без необходимости перебрасывать их по шине PCI. Metal дает прямой доступ для программы к буферам из CPU, и ответственность за то, что эти данные не используются одновременно и GPU, ложится на плечи программиста. Эта полезная функция позволяет смешивать произведение вычислений на GPU и CPU.
И как это в 10 раз быстрее?
Каждый вызов отрисовки стоит сколько-то времени на CPU и сколько-то времени на GPU. Metal API уменьшает время, затрачиваемое CPU, благодаря упрощению контроля за состояниями и благодаря этому уменьшению числу проверок на ошибки от драйвера на правильность комбинаций состояний. Еще помогает предварительное вычисление состояний: можно не просто выполнять проверку на ошибки во время билда, но и само изменения состояния потребует меньшее количество вызовов API. Возможность параллельного построения буферов команд еще больше увеличивает число вызовов отрисовки в том случае, если приложение привязано к CPU.
А вот рендеринг на GPU с другой стороны быстрее не становится, приложение которое делает совсем немного вызовов отрисовки для больших мешей (меш — часть модели, состоящая из вершин объекта] не получит никакого преимущества от перехода на Metal.
Может ли то же самое быть сделано на OpenGL?
На GDC 14 была отличная презентация “Approaching Zero Driver Overhead” за авторством Cass Everitt, John McDonald, Graham Sellers и Tim Foley. Основной ее идеей было уменьшение работы драйвера в OpenGL при помощи увеличения количества работы, производимым вызовов отрисовки, и использованием новых объектов GL и меньшего количества числа вызовов GL для повышения эффективности.
Эта и другие идеи потребуют дальнейшего расширения OpenGL и появления новых версий этого API, но многое из этого можно будет перенести в OpenGL ES. Что мы потеряем — так это возможность прямого управления командными буферами, со всеми своими «за» и «против».
Какова вероятность увидеть это в будущем? Из-за поддержки обратной совместимости, остается надеяться только на появление некоего набора функций, который можно будет назвать «современное ядро», но и его скорее всего придется сделать совместимым со всем вплоть до оригинальной функции glBegin(). Это ограничение будет действовать на протяжении всего потенциального будущего OpenGL и станет пределом его эволюции, делая альтернативы вроде Metal API все более предпочитаемыми…
Metal
Accelerating graphics and much more.
Metal provides a platform-optimized, low-overhead API for developing the latest 3D pro applications and amazing games using a rich shading language with tighter integration between graphics and compute programs. To help you do more while managing ever more complex shader code, Metal adds an unparalleled suite of advanced GPU debugging tools to help you realize the full potential of your graphics code.
What’s new
Enhanced graphics and compute integration
To better realize the latest GPU rendering techniques, you can now call dynamic libraries, use function pointers, and leverage the Ray Tracing API directly from your graphics shaders.
Function stitching
Efficiently combine precompiled functions into more complex functions at run time. This allows shader authoring tools to precompile individual shader nodes while maintaining flexibility as they author shaders.
New Ray Tracing features
The Ray Tracing API now supports motion blur, user instance IDs, and an extension of numerical limits to help you generate immensely complex scenes with professional renders.
GPU-accelerated ML training
MPSGraph adds new operations and optimizations using Metal buffer-based ML primitives on the GPU, so you can accelerate ML model training on Mac with higher peak performance.
Metal plugin for TensorFlow
Metal adds support for the PluggableDevice interface for TensorFlow, so you can start training with great performance on macOS Monterey.
GPU Performance State Debugger
Optimize your graphics code for power and performance on all Apple platforms.
Metal Debugger timeline view
To help achieve peak performance with the latest rendering techniques, Metal Debugger now includes performance counters and bottleneck analysis tools while providing a unified view of Metal commands, resources, and buffers on the timeline of GPU events.
Selective Shader Debugger
To dramatically reduce the time it takes to debug incredibly large GPU shader code, Xcode 13 now includes the option to target and debug specific functions within the overall GPU shader code.
GPU Address Sanitizer
Xcode 13 can automatically find difficult bugs, such as buffer overruns, in complex GPU shader code.
Texture Converter Tool
To simplify optimizing game texture assets for Apple platforms, the new Texture Converter Tool supports the latest modern texture formats used by high-end games. For game developers with a Windows-based build environment, the Texture Converter Tool is also available in the Metal Tools for Windows package.
Documentation
Browse the latest documentation, including API reference and articles.
Metal-cpp
Add Metal functionality to graphics apps, games, and game engines using low overhead Metal C++ headers.
Metal Developer Tools for Windows
Bring your high-end games and assets to Mac with the Texture Converter Tool and Metal Shader Compiler.
Sample code
Get sample code to see how Metal APIs are implemented.
Videos
Learn how to take advantage of the latest advancements in Metal.
Forums
Ask questions and discuss Metal with Apple engineers and other developers.
Apple releases Metal Developer Tools for Windows 10 PCs
Apple has taken the wraps off the new Metal Developer Tools for PCs that run on the Windows 10 operating system. Thanks to a new set of Metal developer tools from Apple, it will be so much easier for game developers to design and develop games for Apple devices using Windows 10 machines.
Metal Developer Tools for Windows 10
Apple allows game developers to compile Metal Shading Language (MSL) on Windows into Metal Library Objects that target Apple platforms, courtesy of The Metal Developer Tools for Windows.
“Accelerating graphics and much more. Metal provides near-direct access to the graphics processing unit (GPU), enabling you to maximize the graphics and compute potential of your apps on iOS, macOS, and tvOS,” Apple said.
These tools will be highly useful as far as compiling shaders are concerned. The move makes sense since many game developers predominantly tend to design and develop content on Windows 10 machines, which is a standard industry procedure. With the introduction of Metal Developer Tools, Apple wants game developers to be able to compile and export the assets for all platforms including Windows 10.
This will also be useful for game developers that are already using metal ready game engines. For example, Unity, Unreal, and so on.
“Building on an approachable, low-overhead architecture with precompiled GPU shaders, fine-grained resource control, and multithreading support, Metal further evolves support for GPU-driven command creation, simplifies working with the array of Metal-capable GPUs, and lets you tap into Pro power of Mac Pro and Pro Display XDR,” the company added.
According to Apple, Metal in iOS 13 and tvOS 13 operating system enables GPU to construct its own compute commands, courtesy of Indirect Compute Encoding. What’s more, Metal Performance Shaders (MPS) help game developers speed raytracing operations. They also enable optimized de-noising filters in the collection of compute and graphics shaders.
Game developers and content-creation apps can benefit from major improvements in Metal on macOS Catalina. Apple claims to dramatically simplify developing with Metal as far as using GPU families are concerned. Last but not least, Metal-enabled iOS Simulator that can speed up the development of iOS apps.
Date: July 13, 2020 Tags: Apple report this ad
[email protected]
Tanmay loves writing about Technology, Internet, Apps, Social Media, and Cybersecurity. He also tracks OTT video content streaming space and likes to spend his weekends watching plays. You can contact him on Twitter @techtsp.
Metal developer tools for windows что это
Технологический митап, организованный международным IT-разработчиком Altenar в формате открытого и доверительного разговора про насущные проблемы в области разработки ПО, собрал немало участников из числа начинающих и продвинутых программистов.
Делимся содержанием наиболее интересных докладов.
Наиболее заметным стало выступление независимого WEB-разработчика Антона Грибанова. Он поделился своим опытом использования DevTools. На самом деле, обзорных статей по заявленной тематике для профессионалов немало. С ними легко можно ознакомиться на профильных ресурсах (тык, тык, тык, тык).
Данная статья, прежде всего, обращена к тем, кто еще находится в самом начале своего пути к программистскому Олимпу. Поэтому, если вы матерый разработчик, вас вряд ли заинтересует дальнейшее повествование. Хотя, вы можете поделиться своим богатым жизненным опытом в комментариях к публикации.
Инструменты разработчика (от англ. «development tools» или сокращённо «DevTools») ─ это программы, позволяющие создавать, тестировать и отлаживать (debug) программное обеспечение.
Современные браузеры, Safari, Firefox, Microsoft Edge, Chrome, Яндекс и другие, имеют встроенные инструменты разработчика, позволяющие просмотреть исходный код сайта. Отдельно устанавливать их не требуется. С их помощью можно просматривать и отлаживать HTML сайта, его CSS и Javascript. Также можно проверить сетевой трафик, потребляемый сайтом, его быстродействие и много других параметров.
В правом углу размещенной выше иллюстрации можно увидеть структуру web-страницы и стили, примененные к текущему элементу.
Типичная веб-страница представляет собой текстовый файл в формате HTML, который определяет структуру и контент страницы, а также может содержать ссылки на файлы в других форматах (текст, графические изображения, видео, аудио, базы данных и др.), а также гиперссылки для быстрого перехода на другие веб-страницы или доступа к ссылочным файлам.
Несколько веб-страниц, объединенных общей темой и дизайном, а также связанных между собой ссылками, образуют — веб-сайт. При этом образующие веб-сайт страницы могут находиться на одном или нескольких веб-серверах, которые могут располагаться в одном дата-центре или удаленно друг от друга, зачастую в разных странах.
HTML (англ. HyperText Markup Language) ─ это скелет веб-страницы. Для того, чтобы вся эта история начала двигаться и нужен Javascript (календарики, выпадающее меню, всплывающие окна, анимация и прочее, делается с помощью JS). Для придания странице божеского вида вам понадобится CSS (каскадные таблицы стилей).Представим HTML-документ в простейшей форме:
На WWDC 2014 всех нас ждал сюрприз: анонс нового графического 3D API под названием Metal. Но на этот раз мы имеем дело не с новым высокоуровневым API поверх OpenGL ES (как было в случае с Scene Kit), а с новым низкоуровневым API для рендеринга и вычислений, которое может служить заменой OpenGL в играх. По словам Apple, Metal может быть до 10 раз быстрее, чем OpenGL ES (точнее говоря — может генерировать вызовы отрисовки [draw calls; передача данных на GPU] в 10 раз быстрее) и доступен только на устройствах с iOS и процессором последнего поколения A7.
Этот анонс спровоцировал новую волну обсуждения и споров насчет необходимости появления новых графических API, которые должны (или не должны — кто знает) заменить OpenGL. Предлагаемый вашему вниманию пост не намерен участвовать в этой дискуссии – его целью является разъяснение того, чем все-таки Metal отличается от OpenGL ES, чьей заменой он является. Чтобы понять, что такого особенного (или же наоборот, ничего особенного) есть в Metal API, нам придется немного заглянуть под «капот» графических API и GPU.
Как работают GPU и графические API
Наивный читатель может предположить, что вызов API напрямую делает что-то на GPU или позволяет чему-то происходить внутри GPU. Еще более наивный читатель предполагает, что GPU заканчивает обработку этого вызова, когда API возвращает результат. Оба этих утверждения далеки от реальности. Если бы драйвер выполнял команды рендеринга в тот же момент, когда они были созданы и ждал бы завершения процесса рендеринга перед возвращением результата в вызов API, то ни CPU, ни GPU не могли бы работать эффективно, поскольку один из процессоров всегда был бы заблокирован в угоду другому.
Для простого улучшения в работе GPU этот процесс стоит запустить асинхронно; тогда GPU не будет блокировать CPU и вызовы API будут возвращать результат почти мгновенно. В этом случае GPU возможно не будет использоваться на все 100%, поскольку ему возможно придется ждать от CPU новых вызовов рендеринга (= начала кадра), в то время как вызовы остальных команд будут ждать завершения предыдущих. Это становится причиной того, почему большинство графических драйверов собирают все вызовы отрисовки (и другие задачи, которые нужно будет выполнить на GPU — например, изменение состояний) для отрисовки всего кадра перед отправкой его на GPU. Эти буферизованные команды будут затем отосланы обратно после того, как будет получена команда для отрисовки следующего кадра, благодаря чему GPU будет использоваться настолько эффективно, насколько это возможно. Конечно, это добавит один кадр задержки: пока CPU будет создавать задание для текущего фрейма, прошлый фрейм будет рендериться на GPU. На самом деле, можно буферизовать больше одного кадра и таким образом добиваться большей частоты смены кадров — за счет еще большей задержки.
Другая ошибка в нашем наивном предположении состоит в предположении о том, чем занимаются вызовы изменения состояний.
Итак, мы узнали как минимум две важные вещи о том, что происходит за сценой совместной работы OpenGL с современными GPU: изменение состояний может быть сложным, если требуется новая комбинация состояний и все операции на GPU будут задержаны на некоторое количество времени.
В приложении, один поток актуальных команд для одного кадра, которые надо выполнить на GPU, формируется и отправляется на GPU сразу весь за один раз (на самом деле все немного сложнее, но давайте не будет пока углубляться).
Подробнее прочитать о том, как работает современный пайплайн компьютерной графики вы можете в серии статей Fabian Giesens — “A trip down the Graphics Pipeline“.
Почему у другой программной модели могут быть преимущества
Как вы уже увидели, от программиста спрятано огромное количество сложностей и хитрых трюков (их наверняка еще больше, чем я упомянул), которые прячут то, что непосредственно происходит. Одни из них делают жизнь простого разработчика проще, другие — заставляют его искать способы обхитрить драйвер или «копать» в сторону побочных эффектов работы вызовов API.
Некоторые графические API сегодня пытаются убрать большую часть этих трюков, раскрывая скрываемую ими «запутанность» – и в некоторых случаях оставляя на волю программы решение всех связанных проблем. В этом направлении шли графические API PS3, в нем же идет AMD со своим Mantle, туда же собираются грядущие DirectX 12 и Apple Metal.
Что же изменилось?
Буферы команд теперь открыты и приложение должно заполнять эти буферы и отправлять их в очередь команд, которая будет выполнять эти буферы в заданном порядке на GPI — таким образом приложение будет иметь полный контроль над заданием, отправляемым на GPU, и определять, сколько кадров задержки необходимо добавить (добавляя задержку, но при этом увеличивая степень используемости GPU). Буферизация команд на GPU и отправка их асинхронно в следующий фрейм должна быть реализована самим приложением.
Поскольку становится ясно, что эти буферы не будут выполняться прямо сразу (то есть во время создания) и что множественные буферы могут быть созданы и добавлены в очередь на выполнение в определенном порядке, приложение может позволить себе их построение в нескольких потоках в параллели. Также для программиста становится более очевидным, какие из результатов вычислений уже доступны, а какие — нет.
Изменения состояний теперь организованы в объекты состояний, которые могут просто переключаться, в то время как создание этих объектов будет обходиться дороже. Например, MTLRenderPipelineState содержит шейдеры и все состояния, которые реализованы их патчингом.
Другой плюс от нового API в том, что оно не обязано нести груз совместимости с предыдущими версиями и поэтому не будет таким консервативным.
Есть нюанс и в заточке под A7 — благодаря ему Metal заточен под работу на системах с общей памятью, т.е. CPU и GPU могут получать прямой доступ к одним данным без необходимости перебрасывать их по шине PCI. Metal дает прямой доступ для программы к буферам из CPU, и ответственность за то, что эти данные не используются одновременно и GPU, ложится на плечи программиста. Эта полезная функция позволяет смешивать произведение вычислений на GPU и CPU.
И как это в 10 раз быстрее?
Каждый вызов отрисовки стоит сколько-то времени на CPU и сколько-то времени на GPU. Metal API уменьшает время, затрачиваемое CPU, благодаря упрощению контроля за состояниями и благодаря этому уменьшению числу проверок на ошибки от драйвера на правильность комбинаций состояний. Еще помогает предварительное вычисление состояний: можно не просто выполнять проверку на ошибки во время билда, но и само изменения состояния потребует меньшее количество вызовов API. Возможность параллельного построения буферов команд еще больше увеличивает число вызовов отрисовки в том случае, если приложение привязано к CPU.
А вот рендеринг на GPU с другой стороны быстрее не становится, приложение которое делает совсем немного вызовов отрисовки для больших мешей (меш — часть модели, состоящая из вершин объекта] не получит никакого преимущества от перехода на Metal.
Может ли то же самое быть сделано на OpenGL?
На GDC 14 была отличная презентация “Approaching Zero Driver Overhead” за авторством Cass Everitt, John McDonald, Graham Sellers и Tim Foley. Основной ее идеей было уменьшение работы драйвера в OpenGL при помощи увеличения количества работы, производимым вызовов отрисовки, и использованием новых объектов GL и меньшего количества числа вызовов GL для повышения эффективности.
Эта и другие идеи потребуют дальнейшего расширения OpenGL и появления новых версий этого API, но многое из этого можно будет перенести в OpenGL ES. Что мы потеряем — так это возможность прямого управления командными буферами, со всеми своими «за» и «против».
Какова вероятность увидеть это в будущем? Из-за поддержки обратной совместимости, остается надеяться только на появление некоего набора функций, который можно будет назвать «современное ядро», но и его скорее всего придется сделать совместимым со всем вплоть до оригинальной функции glBegin(). Это ограничение будет действовать на протяжении всего потенциального будущего OpenGL и станет пределом его эволюции, делая альтернативы вроде Metal API все более предпочитаемыми…
СОДЕРЖАНИЕ
Функции
Metal стремится обеспечить доступ к графическому процессору с низкими издержками. Команды заранее кодируются, а затем отправляются в графический процессор для асинхронного выполнения. Приложение контролирует, когда ждать завершения выполнения, что позволяет разработчикам приложений увеличивать пропускную способность, кодируя другие команды, пока команды выполняются на графическом процессоре, или экономить энергию, явно ожидая завершения выполнения графическим процессором. Кроме того, кодирование команд не зависит от ЦП, поэтому приложения могут кодировать команды для каждого потока ЦП независимо. Наконец, состояния рендеринга предварительно вычисляются заранее, что позволяет драйверу графического процессора заранее знать, как настроить и оптимизировать конвейер рендеринга перед выполнением команды.
Metal предлагает разработчикам приложений гибкость при создании ресурсов Metal (буферов, текстур). Ресурсы могут быть выделены на центральном процессоре, графическом процессоре или на обоих, и предоставляют средства для обновления и синхронизации выделенных ресурсов. Metal также может обеспечивать соблюдение состояния ресурса в течение срока службы кодировщика команд.
В macOS Metal может предоставить разработчикам приложений право по своему усмотрению указывать, какой графический процессор следует выполнять. Разработчики приложений могут выбирать между маломощным встроенным графическим процессором центрального процессора, дискретным графическим процессором (на некоторых MacBook и Mac) или внешним графическим процессором, подключенным через Thunderbolt. Разработчики приложений также имеют предпочтение относительно того, как команды графического процессора выполняются на каких графических процессорах, и предлагают рекомендации, на каком графическом процессоре определенная команда наиболее эффективна для выполнения (команды для рендеринга сцены могут выполняться дискретным графическим процессором, а постобработка и отображение могут обрабатывается встроенным графическим процессором).
Шейдеры Metal Performance
История
Поддерживаемые графические процессоры
Принятие
Фреймворк относится к числу новейших разработок Apple, однако совместим с целым спектром чипов Intel, NVIDIA и AMD прошлых лет. Общий официальный ограничитель – сборка компьютера Mac должна быть не древнее 2012-го года, но все варьируется от модели к модели.
В свое время презентация Metal стала сенсационным событием для всех, причастных к миру компьютерных игр и передовых графических технологий. Затмить ее сумела лишь новость о том, что вслед за мобильным устройствами технология станет доступна и на десктопах, в частности, купертиновцы обещали полную поддержку Metal уже в OS X 10.11 El Capitan. Ключевой особенностью новинки стала горячо обсуждаемая система алгоритмов адаптируемой многопоточности, эффективно перераспределяющая нагрузку между CPU и GPU. Что же это означает с практической точки зрения?
В силу того, что модельный ряд Mac включает в себя десктопы, моноблоки и ноутбуки разных конфигураций, единое требование, «не старше 2012-го года», следует воспринимать с оговоркой.
Список моделей, поддерживающих Metal, ниже:
Как проверить дату выпуска своего Mac:
1. Нажмите на меню и откройте раздел Об этом Mac.
2. Под названием операционной системы и данными о ее версии находим строку с типом модели и периодом ее выпуска.
3. В данном примере – очевидно, что все преимущества Metal не будут доступны владельцу этого компьютера.
OS X El Capitan Developer Preview уже доступна для авторизованных тестеров, практически без проблем устанавливается и запускается на компьютерах, что помнят еще старый добрый Mavericks. Однако полноценная сборка OS X El Capitan в виде бесплатного обновления вряд ли окажется доступна раньше осени текущего года. К тому же Apple не спешит публиковать конкретные системные требования, так что пока придется отталкиваться от косвенных данных по совместимости с моделями прошлых лет. Зато яблочная компания своевременно позаботилась предложить разработчикам инструментарий MetalKit с настойчивой рекомендацией не мешкать в его освоении. Что и было сделано, по крайней мере, Epic Games еще год назад показала Unreal Engine 4, адаптированный для максимально полного использования возможностей Metal.