Изменения

Блог:Виталий Филиппов/2014-09-18 Blender, Radeon, Mesa, OpenCL

708 байтов добавлено, 08:16, 22 сентября 2014
м
Нет описания правки
Итак, после исправления этой очипятки ядро собралось… но после этого, увы, блендер просто стал падать с segmentation fault’ом где-то в недрах LLVM уже при попытке трансляции видимо IR’а в radeon’овый шейдерный код. И тут я пока хз, получится ли это поправить. Есть ещё маленькая вероятность, что это баг oibaf’ской сборки, так как mesa у меня именно оттуда… В общем, буду искать баг дальше. Очень уж хочется Cycles на GPU запустить.
UPD: Залез в недра LLVM, попробовал поискать баг; обнаружил, что в SIAnnotateControlFlow.cpp в handleLoopCondition() в какой-то момент попадает PHINode, у которого первый аргумент равен ему самому. Теперь вся интрига в том, как это всё-таки происходит? Ага! В gdb же есть условые контрольные точки! break 'llvm: UPD2:Видимо, в LLVM PHINode::setIncomingValue(unsigned int, llvm::Value*содержащий себя — это вполне нормальная ситуация. Причём мало того, что он может содержать себя напрямую, в качестве одного из IncomingValue, так оказывается, что может и через другой PHINode (то есть phi->getIncomingValue(0)->getIncomingValue(0)' if V == this && i != 32767phi)… Поэтому просто пропускать значения, равные самому PHINode, не помогает, нужно проверять во всю глубину… И главное, не очень понятно, ЧТО вообще по логике означают такие PHINode. Написал по этому поводу в список рассылки LLVMdev — пока в ответ тишина…
{{wl-publish: 2014-09-18 19:33:14 +0400 | VitaliyFilippov }}