iOS12 вызывает ошибку при выполнении Metal Command Buffer, рендеринг сбой или не происходит - PullRequest
0 голосов
/ 22 сентября 2018

У нас есть приложение, которое использует Metal для рендеринга.Это приложение корректно работает на устройствах под управлением iOS11.При использовании одного и того же приложения на устройствах под управлением iOS12 у нас начались глюки и иногда зависания при рендерингеМы также пытались перекомпилировать для iOS12 и получаем то же самое плохое поведение.На консоли мы получаем следующие разные сообщения:

2018-09-22 09: 22: 29.508576-0500 OurApp [1286: 84481] Выполнение буфера команд было прервано из-за ошибки во времявыполнение.Отклонено (жертва ошибки / восстановления графического процессора) (код IOAF 5)

2018-09-22 09: 29: 55.654426-0500 OurApp [1286: 84625] Выполнение буфера команд было прервано из-за ошибки во времявыполнение.Вызванная ошибка зависания графического процессора (код IOAF 3)

2018-09-22 09: 34: 37.718054-0500 OurApp [1286: 87354] Выполнение буфера команд было прервано из-за ошибки во время выполнения.Игнорируется (для того, чтобы вызвать предыдущие / чрезмерные ошибки графического процессора) (код IOAF 4)

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

Это приложение использует SceneKit, создает экземпляр SCNView и использует значение по умолчанию CIContext,Также используется модель Physical Based Lighting, которая заставляет использовать рендерер Metal.Приложение имеет простую SCNNode геометрию, цилиндр.Каждый геометрический объект цилиндра получает нормальную текстуру (всего 3).Одинаковые значения диффузии, металличности и шероховатости применяются ко всем геометрическим объектам цилиндра.

Кто-нибудь сталкивался с этой проблемой?Если да, то как вы решили это?

Спасибо

ОБНОВЛЕНИЕ: Кажется, проблема возникает, когда изображение используется в качестве среды освещения сцены:

let scene = SCNScene()
scene.lightingEnvironment.contents = UIImage(named: "ourLightingEnvironmentImage")

Когда среда освещения не используется, проблема исчезает.Это начинает выглядеть как ошибка Apple, мы ее опубликуем.Мы застряли, потому что нам нужна световая среда для реалистичного отражения моделей в нашем приложении.

Ответы [ 4 ]

0 голосов
/ 01 апреля 2019

Это ошибка, вызванная изображениями молний с высоким разрешением.

Решение состоит в том, чтобы изменить размеры этих изображений, 1000x500 - это то, что мы используем сейчас.Работает отлично.

0 голосов
/ 26 января 2019

Я только что получил обновление об ошибке, которую я подал в Apple:

Отношения с разработчиками Apple

Мы считаем, что эта проблема решена в последней бета-версии iOS 12.2.Пожалуйста, протестируйте последнюю бета-версию iOS.Если у вас все еще есть проблемы, пожалуйста, обновите свой отчет об ошибках с любыми соответствующими журналами или информацией, которая могла бы помочь нам исследовать.iOS бета https://developer.apple.com/download/"

0 голосов
/ 28 февраля 2019

Кажется, у меня точно такая же проблема.Также, используя ARKit и редактор по умолчанию sceneKit, я продолжал бесконечно получать ошибку IOAF code 4, когда экран зависает.

Я исправил свою проблему, изменив среду с «Процедурное небо» на «Нет».Больше не зависает и не зависает, но это вряд ли является решением, так как мой объект AR теперь не имеет освещения или окружающей среды.Я полагаю, что в iOS 12.2 Beta есть исправление, но оно еще не обновлено.

Надеюсь, мое решение поможет другим.

0 голосов
/ 05 октября 2018

Я смог решить свои проблемы на данный момент, выбрав OpenGL ES в качестве режима рендеринга:

enter image description here

...