Металлические контакты и методы

В этой главе рассматриваются подсказки и методы, которые могут улучшить производительность приложения или производительность разработчика.

Создание библиотек во время процесса сборки приложения

Компиляция исходных файлов языка программы построения теней и создание библиотеки (.metallib файл) во время приложения процесс сборки достигает лучшей производительности приложения, чем компиляция исходного кода шейдера во время выполнения. Можно создать библиотеку в XCode или при помощи утилит командной строки.

Используя XCode для создания библиотеки

Любые исходные файлы программы построения теней, которые находятся в Вашем проекте, автоматически используются для генерации библиотеки по умолчанию, к которой можно получить доступ от Металлического кода платформы с newDefaultLibrary метод MTLDevice.

Используя утилиты командной строки для создания библиотеки

Рисунок 8-1 показывает утилиты командной строки, формирующие набор инструментальных средств компилятора для Металлического исходного кода шейдера. Когда Вы включаете .metal файлы в Вашем проекте, XCode вызывает эти инструменты для создания файла библиотеки, к которому можно получить доступ в приложении во время выполнения.

Скомпилировать источник программы построения теней в библиотеку, не используя XCode:

  1. Использовать metal скомпилировать каждого .metal файл в сингл .air файл, хранящий промежуточное представление кода языка программы построения теней.

  2. Использовать metal-ar заархивировать несколько .air файлы вместе в сингл .metalar файл. metal-ar подобно утилите Unix ar.

  3. Использовать metallib создавать Металл .metallib файл библиотеки от архива .metalar файл.

Рисунок 8-1  , создающий файл библиотеки с утилитами командной строки

Для доступа к получающейся библиотеке в коде платформы вызовите newLibraryWithFile:error: метод MTLDevice.

Металлические наборы функций

Металлический набор функций описывает возможности и ограничения Металлической реализации. supportsFeatureSet: метод MTLDevice возвращает булево значение, указывающее, применяются ли возможности и ограничения определенного набора функций к этой реализации.

Существует два набора функций: MTLFeatureSet_iOS_GPUFamily1_v1 и MTLFeatureSet_iOS_GPUFamily2_v1. В iOS_GPUFamilyN, суффикс _vN указывает различную версию в той же семье функции. Обратите внимание на то, что MTLFeatureSet_iOS_GPUFamily1_v1 и MTLFeatureSet_iOS_GPUFamily2_v1 находятся в различных семьях функции.

Таблица 8-1 суммирует известные возможности и ограничения каждого набора функций.

Табличные 8-1  наборы функций металла и возможности

Функция

Значение семьи 1 v1 GPU

Значение семьи 2 v1 GPU

Максимальное количество цветных присоединений на MTLRenderPassDescriptor

4

8

Максимальный цветной вывод данных на выборку (через все цветные присоединения) на рендеринг передачи

16 байтов

32 байта

Поддержки форматы пикселя ASTC

Нет

Да

Минимальный присоединяемый размер (цвет или глубина/шаблон), ширина или высота

32 пикселя

32 пикселя

Инкремент размера выделения памяти Threadgroup

16 байтов

16 байтов

Максимальное общее количество threadgroup выделение памяти

16 384 байта

16 384 байта

Максимум MTLTextureDescriptor высота и width

4096

4096

Максимум MTLTextureDescriptorглубина

2048

2048

Максимальное количество записей в таблицах параметра для рендеринга и вычисляет кодеры команды

31 (буфер)

31 (текстура)

16 (состояние сэмплера)

31 (буфер)

31 (текстура)

16 (состояние сэмплера)

Следующие примечания применяются к обоим наборам функций:

Настройки схемы XCode и производительность

Когда Металлическое приложение работает от XCode, настройки схемы по умолчанию сокращают производительность. XCode обнаруживает, ли Металл, API используется в исходном коде и автоматически включает настройки GPU Frame Capture и Metal API Validation, как замечено на рисунке 8-2. Когда Получение Кадра GPU включено, уровень отладки активируется. Когда Металл, который Проверка API включена, каждый вызов, проверен, который влияет на производительность далее. Для обеих настроек производительность ЦП более затронута, чем производительность GPU. Если Вы не отключаете эти настройки, производительность приложения может заметно улучшиться, когда приложение выполняется за пределами XCode.

Рисунок 8-2  редактор схемы XCode настройки для металлического приложения

Отладка

Используйте подсказки в следующих разделах для получения более полезной диагностической информации при отладке и профилировании Металлического приложения.

Расширение файла для металлических исходных файлов языка штриховки

Для Металлических имен файла исходного кода языка штриховки необходимо использовать .metal расширение файла, чтобы гарантировать, чтобы средства разработки (XCode и отладчик кадра GPU) распознали исходные файлы при отладке или профилировании.

Выполнение получения кадра с XCode

Для выполнения получения кадра в XCode включите отладку и вызовите insertDebugCaptureBoundary метод MTLCommandQueue сообщать XCode. presentDrawable: и presentDrawable:atTime: методы MTLCommandBuffer так же сообщите XCode о получении кадра, так вызов insertDebugCaptureBoundary только если не присутствуют те методы.

Свойство метки

Много Металлических объектов платформы — таких как буферы команд, конвейерные состояния и ресурсы — поддерживают a label свойство. Можно использовать это свойство для присвоения имени для каждого объекта, который значим в контексте проекта приложения. Эти метки появляются в интерфейсе отладки Получения Кадра XCode, позволяя Вам более легко идентифицировать объекты.