Я разрабатываю приложение на основе металла, а в некоторых случаях правильно скомпилированный и связанный шейдерный код приведет к простому сбою приложения без каких-либо ошибок.При каких условиях Металлический шейдерный код "crash?"
«Сбой» состоит из остановки визуального вывода (в некоторых случаях предшествует короткое заикание пары чередующихся кадров), но в остальном нормальное шествие остальной части приложения. Утилиты мониторинга производительности Xcode сообщают 60 кадров в секунду, но 0 мс латентности графического процессора, а исполнение на стороне процессора продолжается, а вызовы Metal API все еще успешно завершаются.
На консоль не сообщается никаких ошибок.
Это очень сложно отлаживать, поскольку у меня нет указаний на то, где в шейдерном коде возникает ошибка. Это помогло бы, если бы я знал, при каких условиях это должно произойти, чтобы у меня был хороший список вещей для проверки. В противном случае я просто стреляю в темноте, когда это возникает.
Я работаю с вычислительными ядрами, и у меня также есть частые сбои. Никакой помощи от xcode в любом случае. Я прокомментирую код до тех пор, пока он не будет работать, а затем добавим части обратно. Занимает огромное количество времени. Металлическая площадка была бы потрясающей. Быстрое тестирование небольших фрагментов кода. –
После небольшого рабочего времени, похоже, это побочный эффект систем восстановления от отказа iOS (я не получаю много этих проблем в OS X). Я сократил большинство сбоев либо в шейдере, выполняющем слишком медленно (iOS, кажется, автоматически разбивает приложения, когда FPS идет ниже 1, чтобы предотвратить сбой приложения во всем устройстве) или когда я обращаюсь к недопустимой области памяти (приложения iOS, в конце концов, песочница). Теперь было бы неплохо, если бы эти системы действительно обменивались данными с интерфейсом Metal, что драйвер был разбит, так что вызовы API сообщили бы о реальной ошибке. – Textfield
У меня есть тестовый проект, настроенный для C++, чтобы просто отлаживать код. Выделение и отладка синтаксиса намного лучше. Я думаю, что большие шейдеры с множеством петель. а затем он сбой, такой же, как у вас. –