web-dev-qa-db-fra.com

iOS12 provoque une erreur lors de l'exécution de Metal Command Buffer, le rendu est glitch ou ne se produit pas

Nous avons une application qui utilise Metal pour le rendu. Cette application fonctionne correctement sur les appareils exécutant iOS11. Lorsque vous utilisez la même application sur des appareils exécutant iOS12, nous avons commencé à avoir des problèmes et parfois des blocages dans le rendu. Nous avons également essayé de recompiler pour iOS12 et obtenons le même mauvais comportement. Sur la console, nous recevons les différents messages suivants:

2018-09-22 09: 22: 29.508576-0500 OurApp [1286: 84481] L'exécution du tampon de commande a été interrompue en raison d'une erreur lors de l'exécution. Jeté (victime d'une erreur/récupération du GPU) (code IOAF 5)

2018-09-22 09: 29: 55.654426-0500 OurApp [1286: 84625] L'exécution du tampon de commande a été interrompue en raison d'une erreur lors de l'exécution. Erreur de blocage du GPU provoquée (code IOAF 3)

2018-09-22 09: 34: 37.718054-0500 OurApp [1286: 87354] L'exécution du tampon de commande a été abandonnée en raison d'une erreur lors de l'exécution. Ignoré (pour avoir causé des erreurs GPU antérieures/excessives) (code IOAF 4)

Avec les deux premiers messages, le rendu semble glitch, où un écran vide est présenté et enfin le rendu se produit à l'écran. Avec le dernier message, le rendu ne se produit pas réellement et le message continue d'être affiché jusqu'à ce que nous passions à une vue différente.

Cette application utilise SceneKit, instancie un SCNView et utilise un CIContext par défaut. Il utilise également le modèle d'éclairage basé sur la physique, qui force l'utilisation du rendu Metal. L'application a une simple géométrie SCNNode, un cylindre. Chaque objet géométrique du cylindre obtient une texture normale (3 au total). Les mêmes valeurs de diffusion, de métal et de rugosité sont appliquées à tous les objets de géométrie du cylindre.

Quelqu'un at-il rencontré ce problème? Si oui, comment l'avez-vous résolu?

Merci

MISE À JOUR: Le problème semble être causé lorsqu'une image est utilisée comme environnement d'éclairage de la scène:

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

Lorsqu'un environnement d'éclairage n'est pas utilisé, le problème disparaît. Cela commence à ressembler à un bug Apple, nous allons en déposer un. Nous sommes bloqués car nous avons besoin de l'environnement d'éclairage pour produire des réflexions réalistes pour les modèles de notre application.

12
caminante errante

C'est un bug causé par des images de foudre d'environnement haute résolution.

La solution est de redimensionner ces images, 1000x500 est ce que nous utilisons actuellement. Fonctionne parfaitement.

1
Sergio

J'ai pu résoudre mes problèmes pour le moment en choisissant OpenGL ES comme mode de rendu:

enter image description here

1
Stefan

Je viens de recevoir une mise à jour du bug que j'avais déposé auprès d'Apple:

Relations avec les développeurs Apple

Nous pensons que ce problème est résolu dans la dernière version bêta d'iOS 12.2. Veuillez tester avec la dernière version bêta d'iOS. Si vous avez toujours des problèmes, veuillez mettre à jour votre rapport de bogue avec tous les journaux ou informations pertinents qui pourraient nous aider à enquêter. iOS bêta https://developer.Apple.com/download/ "

1
caminante errante

Il me semble que j'ai exactement le même problème. En utilisant également ARKit et l'éditeur de scène par défaut, j'ai toujours eu l'erreur de code IOAF 4 infiniment lorsque l'écran se fige.

J'ai résolu mon problème en changeant l'environnement de "Sky procédural" en "Aucun". Ne traîne plus ou ne gèle plus, mais ce n'est guère la solution car mon objet AR n'a plus ni éclairage ni environnement. Je pense qu'il y a un correctif à venir dans iOS 12.2 Beta, mais je n'ai pas encore mis à jour.

J'espère que ma solution aide les autres.

0
Ali Aljoubory