Отставание ARSCNView с ошибкой графического процессора «Выполнение буфера команд было прервано ... (код IOAF 5)» на iOS 12 - PullRequest
0 голосов
/ 26 октября 2018

Я не уверен, какой код уместен для публикации здесь, но мне просто интересно, как вообще отладить это. Я отображаю ARSCNView с включенной конфигурацией ARFaceTrackingConfiguration, и в фоновом потоке я часто выполняю Vision VNDetectFaceLandmarksRequest и ARSCNView.hitTest для геометрии лица. У меня не было проблем с запаздыванием до iOS 12, и даже сейчас он только прерывистый, но когда это происходит, он замораживает весь экран на несколько секунд и отображает ошибку:

Execution of the command buffer was aborted due to an error during execution. Discarded (victim of GPU error/recovery) (IOAF code 5)

Не уверен, что это связано, но я также иногда получаю сбои в потоке рендеринга SceneKit (com.apple.scenekit.scnview-renderer ", без какой-либо обратной трассировки, которую я могу использовать для отладки. Я не использую какие-либо пользовательские металлические шейдеры, и я даже не рендеринг геометрии SceneKit во время этих лагов / сбоев.

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

Если кто-то сталкивался с этими ошибками при рендеринге ARSCNViews и имеет какие-либо советы о том, как отладить эти лаги, это было бы очень полезно.

Обновление

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

1 Ответ

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

Устранена проблема при удалении этого кода из моего приложения (sceneView - это ARSCNView from IB):

let scene = try SCNScene(url: ConfigAR.loader!, options: nil)
preloaderSCNView.scene = scene
sceneView.addSubview( preloaderSCNView ) // the root of the problem
...