Divinity Original Sin Enhanced Edition @ Mesa r600g
Я таки заставил эту игру работать 😊
В процессе была куча сегфолтов и адовые артефакты.
По сути проблемы всего три (конкретно для r600g, в целом для месы – 2):
- Контекст OpenGL 4.2. Драйвер r600g рапортует версию 3.3, а движок игры, в свою очередь, работает по принципу segfault driven error handling. Решается просто:
MESA_GL_VERSION_OVERRIDE=4.2 MESA_GLSL_VERSION_OVERRIDE=420
- Невалидные шейдеры. Тут сразу:
- Во-первых, разрабы используют расширение
ARB_shading_language_include
, которое не поддерживается ничем кроме невидиевской проприетарщины. Но во имя амдшной проприетарщины они запилили в движок fallback режим, в котором это расширение реализуется прямо в движке на коленке, однако включается этот fallback режим (немного) через жопу – они (только) проверяют возвращаемое значение функцииglXGetProcAddressARB
наnullptr
. АglXGetProcAddressARB
не обязан возвращатьnullptr
, кроме адреса надо смотреть еще в список расширений, чего они не делают, а месовская реализация никогда не возвращаетnullptr
-> segfault driven error handling. Чинится этот баг подстановкой костыля в LD_PRELOAD. - Во-вторых, в шейдерах постобработки SMAA/FXAA у них где-то в дебрях кода обложенное ifdef'ами лежит включение очередного расширения, что, блджад, не правильно. После обнаружения этой фигни месовский GLSL компилятор совершенно справедливо прерывает компиляцию, а так как ребята не умеют в обработку ошибок — см. выше. Этот баг обходится с помощью
месовского механизма подмены шейдеров в рантайме и костыля-решейпера их кода шейдеров.файла drirc, в который нужно добавить<application name='Divinity Original Sin Enhanced Edition' executable='EoCApp'> <option name='allow_glsl_extension_directive_midshader' value='true' /> </application>
- Во-первых, разрабы используют расширение
- Графические артефакты. У них в движке (насколько я понял) есть две принципиально разные ветки кода/рендеринга, которые разделяются по (внимание!) строке в GL_VENDOR: если в этой строке что угодно кроме
"ATI Technologies Inc."
, то активируется невидиевская ветвь, что на месе приводит к аду, если же доставить в LD_PRELOAD еще один костыль с этой строкой, то рендеринг становится мягким и шелковистым.
TL;DR: Gentoo, дефолтные кеды, ШГ, панелька с автоскрытием.
>>> Просмотр (1600x900, 1682 Kb)