На работе отлаживаю баг.
Есть мейн тред. Есть рендер тред. Есть ГПУ. Все параллельные. И вот как-то получается что когда мейн тред занимается переаллоцированием шедоумапов, ГПУ в эти шедоумапы продолжает рендерить. Ну и падает все, конечно, на ассертах оверврайта границ выделенных блоков.
Писалось видимо так - написали "что-то", потом - "оба! не работает", хлопаем себя по лбу, вписываем еще флажок. И так 5 раз. И все бы ничего, я так тоже код пишу, но ведь когда закончил надо подумать и сделать общО и правильно. А этот шаг был пропущен. И поскольку вся эта хрень _вроде_ работает, никого не беспокоит небольшой бардак. Убедиться в том, что она работает верно, очень сложно, потому как надо тестировать не типичные тайминги, а ЛЮБЫЕ (медленный ГПУ, быстрый ГПУ, медленный мейнтред, и т.п.).
Но в общем-то пост меня побудило написать не это. Мне вот интересно, есть ли в другой какой-то индустрии такая же тема? Ну вот двигатель машины, например так же делают? Типа сначала умные дядьки сидят и проектируют. По цифрам все ОК, делаем образец, тестим. БАХ, взрывается цилиндр. "Мдаааа", говорят дядьки и качают головами. И предлагают другой металл использовать для цилиндра. Собрали опять движок. Оп-ца. А мощность фиговая. "Мдааа", говорят дядьки, и опять качают головами - "Ну давайте что ли в фильтр что-нибудь зафигачим". И в итоге от изначального проекта остаются рога и ноги. А что это значит? А это значит что что-то может быть неучтено. Если у дома 100 кирпичей заменить на кексы, дом может упасть.
Но не падают дома. И автомобили не взрываются. Наверное это только мы такие - программеры - качаем головами, говорим "Мдааа...", дебажим и фиксим.