LINUX.ORG.RU

Самосборная mesa с кривой версией OpenGL

 , ,


1

2

Есть свежая mesa из ppa:

$ glxinfo | grep -i -e opengl 
OpenGL vendor string: X.Org
OpenGL renderer string: AMD RAVEN (DRM 3.23.0, 4.16.2-041602-generic, LLVM 6.0.0)
OpenGL core profile version string: 4.5 (Core Profile) Mesa 18.1.0-devel
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.1 Mesa 18.1.0-devel
OpenGL shading language version string: 1.40
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.1 Mesa 18.1.0-devel
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.10
Есть самосбор из того же исходника, но с прикрученным llvm7
$ LD_LIBRARY_PATH=/opt/mesa/lib glxinfo | grep -i -e opengl 
OpenGL vendor string: X.Org
OpenGL renderer string: AMD RAVEN (DRM 3.23.0, 4.16.2-041602-generic, LLVM 7.0.0)
OpenGL version string: 2.1 Mesa 18.1.0-devel
OpenGL shading language version string: 1.40
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 2.0 Mesa 18.1.0-devel
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 1.0.16

Всё это барахло запускается на Ryzen 2400G. У месы из ppa с llvm6 шейдеры (базовые из secondlife viewer) сыпят адскими артефактами, более современные из некоего «advanced lighting model» работают хорошо, отображаются материалы с блеском и т.д. но картинка остается зашумлена предметами без материалов (артефакты базовых шейдеров).

Пробовал собрать mesa с llvm6 и llvm7. У моего самосбора не работают материалы, но у сборки с llvm7 пропадают артефакты базовых шейдеров. Осталось починить мою сборку и можно радоваться жизни, я так понимаю ноги растут из «OpenGL core profile version string». «MESA_GL_VERSION_OVERRIDE=4.5 MESA_GLSL_VERSION_OVERRIDE=450» приводят это дело в соответсвие, но материалы всё равно не работают, я так подозреваю что в моей сборке чего-то не хватает. Чего не представляю... Собирал так:

/configure --with-llvm-prefix=/usr/lib/llvm-7// --prefix=/opt/mesa/ --enable-dri3 --enable-driglx-direct --enable-gles1 --enable-gles2 --enable-glx-tls --with-egl-platforms='drm x11' --enable-glx=dri --with-dri-drivers=radeon --with-gallium-drivers=radeonsi
Два чаю тому господину, кто скажет что я делаю не так.

★★★★★
Ответ на: комментарий от Behem0th

Товарищ Behem0th, чай ваш! Огромное спасибо, я двое суток уже мучаюсь, дурак )))) Полет прекрасный, все рендерится отлично и даже фпс для встройки весьма приличный.

erfea ★★★★★
() автор топика
Ответ на: комментарий от erfea

НЗ.

Для интересующихся GL_ARB_texture_floats расширение нужно для OpenGL 3.0 выше. ЕМПИН оно запатентовано и изза этого по умолчанию не включено. Поэтому если собирать без этой опции на любом драйвере максимум будет OpenGL 2.1.

Behem0th ★★★★★
()
Ответ на: комментарий от Behem0th

Понятно. Спасибо за инфу, буду умнее. Никогда месу не ковырял, имеют богатый опыт возьни в далеком прошлом пропиетаркой нвидии и менее далеком прошлом с fglrx. Переход на amdgpu на ноуте (A8 + какая-то R7) свелся к установке месы из ppa.

erfea ★★★★★
() автор топика
Ответ на: комментарий от ZenitharChampion

Нет, было 2 расширения. ЕМНИП GL_S3_S3TC не было обязательным расширением но многие использовали, а GL_ARB_texture_floats нужно для OpenGL 3.0. Раньше месу нужно было собирать с библиотекой с реализацией S3TC сжатия текстур. Но в 2017(?) году срок действия патента на S3TC закончился и теперь меса по умолчанию поддерживает это расширение без всяких сторонних библиотек.

Behem0th ★★★★★
()
Последнее исправление: Behem0th (всего исправлений: 1)
Ответ на: комментарий от Behem0th

Поэтому если собирать без этой опции на любом драйвере максимум будет OpenGL 2.1.

что?

texture_float всеголишь представляет фреймбуферы как GL_FLOAT, без этого будет использоваться GL_ARGB8
в шейдерах часто используются отрицательные значения «цвета» поэтому и появляется шум, без GL_FLOAT отрицательные станут нулями

без GL_FLOAT можно писать хоть OpenGL4.5 шейдеры и они будут работать без «шума» если не использовать отрицательные значения

anonymous
()
Ответ на: комментарий от Behem0th

Значит, всего два. Спасибо! Поправлю тебя только в том, что libtxc_dxtn не нужно было собрать раньше Месы, чтобы Меса её «подхватила» (как могло показаться после прочтения твоего сообщения). Собирать/устанавливать пакет можно и после Месы, и Меса всё подхватит

ZenitharChampion ★★★★★
()
Ответ на: комментарий от anonymous

Вот только без texture_float у меня не артефакты были, а вообще не работали современные шейдеры. Артефакты были на простеньких старых шейдерах и не от texture_float, а от llvm6, лечит именyо сборка с llvm7.

erfea ★★★★★
() автор топика
Ответ на: комментарий от erfea

и че?

нвидиа тоже не может соблюдать стандарт уже 20+ лет,тыдумаешь какойто там опенсурс драйвер будет?

anonymous
()
Ответ на: комментарий от erfea

лечит именyо сборка с llvm7

Почему не лечит сборка с GCC7? Какие особенности в llvm7 от нас скрывают, что последняя Mesa к нему так приросла?

iZEN ★★★★★
()
Ответ на: комментарий от iZEN

Почему не лечит сборка с GCC7? Какие особенности в llvm7 от нас скрывают,

Причина в GLSL (shader language). Все игрушки идут с шейдерами в исходных кодах (т.е. в текстовом виде), они компилируются драйвером на лету в момент исполнения игрушек (в рантайме), компилируются в ассемблер специфичный для целевого GPU, в mesa скомпилированные шейдеры с недавних пор могут хранится на диске, shader cache называется, где-то в home должна создаваться директория. libllvm как раз и позволяет компилять шейдеры.

anonymous
()
Ответ на: комментарий от iZEN

Почему не лечит сборка с GCC7?

Сборка наверняка у ТС в GCC, только линкуется драйвер с libllvm.so, который и отвечает за компиляцию GLSL в assembler для radeon GCN. Смотри сюда. А теперь скажи умеет ли GCC генерировать ISA code для AMD GPU?

anonymous
()
Ответ на: комментарий от iZEN

Собирается он gcc. Шейдеры компилит в рантайме llvm. Вот llvm6 для 2400G компилит что-то невнятное, артефакты - трешак. Из-за чего и пришлось собирать месу самостоятельно.

erfea ★★★★★
() автор топика
Ответ на: комментарий от erfea

Вот llvm6 для 2400G компилит что-то невнятное, артефакты - трешак.

То есть компилируется без ошибок, а в рантайме артефакты? Отложенная компиляция, неправильная версия LLVM.

iZEN ★★★★★
()
Последнее исправление: iZEN (всего исправлений: 1)
Ответ на: комментарий от iZEN

То есть компилируется без ошибок, а в рантайме артефакты?

libllvm это компилятор шейдеров! Когда собирается драйвер он просто линкуется с компилятором[шейдеров], в рантайме артефакты потому что только в рантайме слинкованная libllvm начинает использоваться драйвером, в процессе сборки самого дайвера libllvm не участвует.

Если бы gcc умел бы генерировать из языка GLSL ассемблерные инструкции для GPU, то драйвер видеокарты в процессе работы периодически вызывал бы gcc отправляя ему на вход исходник шейдеров и получая назад бинарники которые бы уходили в видеопамять графической карты и исполнялись на GPU.

anonymous
()
Ответ на: комментарий от anonymous

в glsl1.1 (это opengl2) texture_float доступны

Факты «доступны в opengl2» и «являются обязательной частью opengl3.0» являются взаимоисключающими?

что?

Пример сборки без включения этого расширения ты можешь увидеть в топ посте. Если не лень можешь попробовать любой другой драйвер с тем же результатом.

Behem0th ★★★★★
()
Ответ на: комментарий от iZEN

То есть компилируется без ошибок,

А ты попробуй hello world на OpenGL написать, там о наличии ошибки в компиляции шейдера можно понять ну разве по коду в GetError, можно проигнорировать и от этого мир не упадет, просто шейдера не будет в конвейере и итоговая картинка пострадает.

anonymous
()
Ответ на: комментарий от iZEN

То есть компилируется без ошибок, а в рантайме артефакты?

А я почем знаю, мне еще в глубокую отладку уйти не хватало, я и так двое суток на это убил.

Отложенная компиляция, неправильная версия LLVM.

Нет правильной и не правильной версии llvm. 2400G с 6 артефачит, с 7 работает, A8 и R7 на llvm6 нормально работает. Очевидно проблемы в свежести камня, он в этом году вышел AMD до сих пор не потрудились amdgpu-pro под него запилить. А вот разрабы месы и llvm делают.

erfea ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.