Anonymous
ребят привет, есть конфа холивара?
Ned
Интерфейс одинаковый, а содержимое libGL.so разное
Ну, допустим. Как тогда это всё по сути своей работает? Я такой обращаюсь к opengl и грю "Хочу 3-дэ", она делает 3Д и в каком виде мне отдаёт?
Alexander
Модуль в ядре обычно отвечает за таблицу страниц, очередь сообщений и регистры контекста на GPU. Ну то есть, ядро имеет к ним доступ и фильтрует запросы от программ. Для 3Д обычно задаешь массив вершин и атрибутов (координаты, цвета). Пишешь программу на glsl. Компилятор из glsl в инструкции, специфичные для GPU, внутри Mesa/libgl.
Alexander
Получается машинный код, который записывается в память GPU.
Alexander
И потом в очередь сообщений кладется команда "рисовать"
Matwey
Ну, допустим. Как тогда это всё по сути своей работает? Я такой обращаюсь к opengl и грю "Хочу 3-дэ", она делает 3Д и в каком виде мне отдаёт?
Не совсем. Есть еще некий слой совместимости GLX. Он позволяет захотеть 3d в заданном окне X11 сервера
Matwey
Туда тебе твое 3d и нарисуют
Matwey
А бывает EGL
Matwey
Он вообще без экрана может работать
Matwey
Embedded GL
Egor
ребят привет, есть конфа холивара?
pro.cxx.holywars (https://telegram.me/joinchat/BYlFbECi8UKU0bCqc7jWlQ)
Ned
Не совсем. Есть еще некий слой совместимости GLX. Он позволяет захотеть 3d в заданном окне X11 сервера
во, это мне и интересно. было бы глупо возвращать с видюхи в память окна, оттуда в фреймбуффер (или как там это работает) видюхи и потом отрисовывать
Anonymous
спасибо
Ned
Можно и так. Хоть просто картинку или avi сохраняй, почему нет?
Это и есть рендеринг, или рендерят на процах?
Alexander
Рендеринг - это из вершин и текстур сделать проекцию. А объединить разные окна - это композитинг
Alexander
Кстати, в @prographon могут больше рассказать
Ned
Нет, я спрашиваю о том, одно ли и то же "рендеринг" и "просчёт триды и отправка её в файл или куда там ещё"?
Ned
А вообще, к чему я это всё. Мне стало резко интересно, как работают видеодрайвера
Ned
И что за что отвечает
Ned
И есть ли какие-то стандарты, которые позволят ядру худо-бедно рисовать окошки (и прон) на любой видеокарте
Ned
безо всяких там игровых загонов, кроссфайров и проч.
Alexander
И есть ли какие-то стандарты, которые позволят ядру худо-бедно рисовать окошки (и прон) на любой видеокарте
Не, 3д специфичное для каждой карты, потому что надо машинный код и знание регистров для параметров
Alexander
Для 2д проще
Ned
слышал, VGA, VESA и чёт там такое
Alexander
Тебе UEFI отдает указатель на фреймбуффер
Ned
а мне тридэ и не нужна
Ned
мне нужна худобедная графика
Ned
получить видеорежимы, настроить наилучший и погнали
Alexander
И VESA, и VGA. Но это медленно, потому что надо на цпу считать
Ned
да я не игры рисую, бро
Ned
я пишу драйвер видеокарты
Ned
мне вообще пох на скорость
Alexander
Ну, если только 2д, то да, есть эти стандарты
Ned
там даже не окна рисуются, а текест
Ned
Ну, если только 2д, то да, есть эти стандарты
а каково покрытие видеокарт этими стандартами? любая на свете видеокарта обязана это поддерживать, или нет?
Alexander
Можно в линупсе посмотреть исходники драйверов
Ned
И VESA, и VGA. Но это медленно, потому что надо на цпу считать
если на проце это медленно, тогда как в общем виде какая-нить тридэ игра заставляет графоний считаться на ГПУ?
Ned
и где в цепочке ИГРА - ... - ГПУ находится драйвер?
Alexander
Игра...libGL.so...kernel driver... GPU
Ned
нет же системных вызовов giveme3d()
Alexander
Ну, драйвера для 3д под каждую карту свои. Универсального стандарта нет
Alexander
Просто 3Д вычисления и вывод 2д никак не связаны
Ned
а где описан интерфейс между libgl.so и driver?
Ned
и может ли быть что-то ещё на месте LibGL?
Alexander
а где описан интерфейс между libgl.so и driver?
Специфичен для каждого драйвера
Ned
Специфичен для каждого драйвера
с каждой новой видюхой в либгл добавляются строки?
Ned
варварство и колхоз какой-то
Alexander
Ну а как ты по-другому сделаешь? Вот на цпу есть пара популярных архитектур, а на гпу архитектура (кодирование инструкций) меняется от поколения к поколению. И ещё очень много багов в ГПУ из-за релиза каждый год новой архитектуры. Поэтому это фиксят в драйверах, а пользователю дают высокоуровневый язык
Berkus
я пишу драйвер видеокарты
Может почитать теорию тогда? На том же осдев вики есть достаточно по теме для старта
Matwey
Специфичен для каждого драйвера
ну за исключением того что есть gallium (вроде) и прочая балалайка
Matwey
ну, когда он специфичен, но так случайно получилось, что одинаков
Alexander
ну за исключением того что есть gallium (вроде) и прочая балалайка
Ну gallium - он внутри libgl и это в основном управление ресурсами внутри него же (OpenGL объектами)
Alexander
Между ядром и либой - DRM
Alexander
Он как бы стандартный
Matwey
Как называется набор ioctl-ов в /dev/dri то?
Alexander
Но с расширениями
Matwey
ну ок
Matwey
но у nvidia он все-равно свой по-моему?
Alexander
но у nvidia он все-равно свой по-моему?
Ну и у интела есть свои расширения. Там из совместимых API - выделить буфер и получить дескриптор на него. А вот уже сделать его буфером под код или текстуру - бывает специфично.
Berkus
Ну да
oles
подскажите плз а стандарт posix както регламентирует структуру elf файла?
Anonymous
Не посикс
oles
а кто
Anonymous
там стандарт от sysv, емнип
Anonymous
На вики точно ссылка на него была
oles
то есть в позикс эта тема вообще не входит?
Anonymous
угу
oles
ок спасибо
Sergey
constexpr int sum(int a, int b) { return a + b; }
Sergey
int res = sum(100, 200)
Sergey
объясните плз, почему constexpr не работает тут
Sergey
в плане, почему, когда res не constexpr
Egor
В смысле "не работает"?