Кривая графическая подсистема Linux | автор: gaal | 18 мая 2009
Категория: GNU/Linux
Автор данного текста рассматривает архитектуру графической системы linux и показывает все ее несовершенство. Так же затрагиваются вопросы касательно открытых и закрытых видео-драйверов, и публикуемых на них спецификаций. Кратко описывается OpenGL, DRI/DRM, а так же архитектура Xorg.
Разумеется, так как я только начал рассказывать правду про графическую подсистему, коллеги, позвольте просто называться линуксографиконенавистником. Ходил послушать напыщенную речь. Давайте посмотрим на причины того, почему с open source драйверами ATI и Intel до сих пор такая отстойная задница. Меня также там поправили. Возможно Nvidia на самом деле делает деньги на linux драйверах. Хорошо им, но пока они все еще скрывают тот факт, что делают это для своих платежеспособных клиентов, думаю поддержу общую точку зрения.
В любом случае, без дальнейших церемоний, представляю линуксографиконенавистничество первой редакции...
И так, все продолжают напыщенные речи о том как это чудесно, что у intel и ati есть открытые драйвера и спецификации, как приходиться получать nvidia с закрытым драйвером и как больше не будут покупать nvidia комплектующие.
Теперь, постойте секундочку - если вам достаточно повезло иметь intel/ati систему и nvidia система по боку, можете подыграть, но с другой стороны, почитайте.
Запустите glxinfo на каждой машине и сравните вывод - думаю Вы найдете результаты... поучительными, но давайте зададим себе целый ряд вопросов.
Какой(ие) драйвер(ы) поддерживает(ют) pbuffers
Какой(ие) драйвер(ы) поддерживает(ют) объекты фреймбуфера
Какой(ие) драйвер(ы )поддерживает(ют) GLSL (шейдеры)
Какой(ие) драйвер(ы) поддерживает(ют) прямой Direct Rendering
Какой(ие) драйвер(ы) предлагает(ют) полный OpenGL 2.1 с аппаратным ускорением
Какой(ие) драйвер(ы) предлагает(ют) полный GLX 1.4 с аппаратным ускорением
Если Вы потратили какое-то время пытаясь сделать что-то на OpenGL, Вы знаете ответы на эти вопросы - и ответ на все из них тот же. Фактически только nvidia драйвер поддерживает полный OpenGL. Mesa ребята с радостью сообщат Вам как хорошо поддерживают полную спецификацию 2.1 - и что-то пробормочут о программном рендерере - да это истинное положение вещей, до тех пока Вам не нужно какое-либо аппаратное ускорение, Mesa инструмент для Вас - или может быть должны переосмыслить используемый инструмент...
Печальная истина заключается в том, что фактически ни один open source драйвер не обеспечивает полный OpenGL, даже, когда сама аппаратура способна. Публикация документации и оплачиваемые разработчики не решает эту проблему для ATI или Intel. (Разоблачаю полностью, закрытые ATI драйвера поддерживают некоторые из этих функций, но больше нет фритарда заинтересованного в них). Почему? Потому что нет инфраструктуры - linux DRI/DRM слой сломан и усилия по исправлению этого продолжаться в ледниковом периоде.
Как nvidia этого избежала? Они обошли его полностью - nvidia драйвер может выглядеть как обычный видео драйвер Xorg, но фактически очень агрессивно заменяет нижнюю треть X сервера (Большинство битов X управляются через замещаемую таблицу функций - славно эх?). У них нет выбора: у Вас может быть самая впечатлющая аппаратура мира и разработчики, но, если Вы не обеспечиваете совместимости с DRI/DRM - нет того, кто Вам поможет.
Это грубое приближение, но наиболее важное различие между архитектурой nvidia и DRI/DRM в том, что у nvidia фактически имеется менеджер памяти - и единственно в этом. Без менеджера памяти невозможно выделить внеэкранные буферы (следовательно, нет pbuffers или fbos) и без единого менеджера памяти невозможно согласовать 2D и 3D операции (следовательно нет перенаправленного Direct Rendering(Прямого Рендеринга)). Accelerated Indirect (Ускоренный Непрямой) GLX функция, которой фритарды были заняты представляет собой нескончаемый источник незаберихи - и в конечном итоге хак по его обходу отсутствие менеджера памяти.
Непрямой рендеринг, когда GL приложение передает полномочия на 3d операции X серверу вместо того, чтобы связываться непосредственно c 3D драйвером. Это делает операции медленней, но не обязательно неприемлемо медленными - до тех пор пока X сервер сам способен связываться с 3D драйвером и делать аппаратно ускоренные вызовы. Теперь DRI/DRM, X сервер первоначально *не мог* связываться с 3D драйвером, потому что только один прямой клиент мог запускаться за раз - так, что сервер сам был исключен, потому что большинство людей хотят, чтобы связывались их 3D приложения. Однако, они поняли, что, если форсируют все 3D приложения с использованием непрямого рендеринга, то смогут избежать необходимости в менеджере памяти, потому что X сервер сам выступает в качестве единственного центра контроля над всем 2D и 3D рендерингом - так, что они занялись исправлением так, чтобы сервер мог быть 3D клиентом и ускорять непрямой рендеринг, и так родился AIGLX как функция должная быть над всем. Никогда не забывайте, что 3D приложения используют непрямой рендеринг и потому такие тормозные. Никогда не забывайте, что nvidia драйвер предлагает Accelerated Indirect Rendering (Ускоренный Непрямой Рендеринг) с самого первого дня еще в 2000. Никогда не забывайте, что nvidia не нужно использовать, потому что они могут делать перенаправление прямого рендеринга правильно.
Так что, безусловно это проблема и они не дураки, так они пытаються решить это - как много лет? Каждый день, несмотря на все очевидные проявления прогресса, если ты установишь самый последний релиз твоего любимого дистра, у тебя будет драйвер без менеджера памяти, без поддержки какой-либо из этих функций. Только, если выкопаешь экзотичные ветки драйверов и mesa, применишь патчи к твоему дереву ядра, получиться что-то смутно апроксимирующее драйвер оснащенный менеджером памяти и только на часть 'поддерживаемой' intel/ati аппаратуры. Это просто замечательно.
Так, почему ты думаешь nvidia игнорирует все петиции, громкие слова, мольбы, угрозы использовать другую аппаратуру? Угадай - они пишут linux драйвера, потому что платежеспособные клиенты хотят их - и это места серьезного рендеринга и необходимости этих полных OpenGL функций - иначе бы nvidia не добавляла их в первую очередь! Они не собираются давать вам возможности придти к ним с вашим говеным open source драйвером, который не поддерживает функции изобретенные свыше 10 лет тому назад (pbuffers в SGI - 1997)
И мля, почему мои nvidia боксы засыпают/просыпаются успешно пока моя Intel карточка использует старый пропатченный драйвер, потому что один из последних продолжает виснуть. Мля, отлично смотрится. Хорошая работа ребята.
Источник
Прочитано 14235 раз и оставлено 66 комментариев.
Автор данного текста рассматривает архитектуру графической системы linux и показывает все ее несовершенство. Так же затрагиваются вопросы касательно открытых и закрытых видео-драйверов, и публикуемых на них спецификаций. Кратко описывается OpenGL, DRI/DRM, а так же архитектура Xorg.
Разумеется, так как я только начал рассказывать правду про графическую подсистему, коллеги, позвольте просто называться линуксографиконенавистником. Ходил послушать напыщенную речь. Давайте посмотрим на причины того, почему с open source драйверами ATI и Intel до сих пор такая отстойная задница. Меня также там поправили. Возможно Nvidia на самом деле делает деньги на linux драйверах. Хорошо им, но пока они все еще скрывают тот факт, что делают это для своих платежеспособных клиентов, думаю поддержу общую точку зрения.
В любом случае, без дальнейших церемоний, представляю линуксографиконенавистничество первой редакции...
И так, все продолжают напыщенные речи о том как это чудесно, что у intel и ati есть открытые драйвера и спецификации, как приходиться получать nvidia с закрытым драйвером и как больше не будут покупать nvidia комплектующие.
Теперь, постойте секундочку - если вам достаточно повезло иметь intel/ati систему и nvidia система по боку, можете подыграть, но с другой стороны, почитайте.
Запустите glxinfo на каждой машине и сравните вывод - думаю Вы найдете результаты... поучительными, но давайте зададим себе целый ряд вопросов.
Какой(ие) драйвер(ы) поддерживает(ют) pbuffers
Какой(ие) драйвер(ы) поддерживает(ют) объекты фреймбуфера
Какой(ие) драйвер(ы )поддерживает(ют) GLSL (шейдеры)
Какой(ие) драйвер(ы) поддерживает(ют) прямой Direct Rendering
Какой(ие) драйвер(ы) предлагает(ют) полный OpenGL 2.1 с аппаратным ускорением
Какой(ие) драйвер(ы) предлагает(ют) полный GLX 1.4 с аппаратным ускорением
Если Вы потратили какое-то время пытаясь сделать что-то на OpenGL, Вы знаете ответы на эти вопросы - и ответ на все из них тот же. Фактически только nvidia драйвер поддерживает полный OpenGL. Mesa ребята с радостью сообщат Вам как хорошо поддерживают полную спецификацию 2.1 - и что-то пробормочут о программном рендерере - да это истинное положение вещей, до тех пока Вам не нужно какое-либо аппаратное ускорение, Mesa инструмент для Вас - или может быть должны переосмыслить используемый инструмент...
Печальная истина заключается в том, что фактически ни один open source драйвер не обеспечивает полный OpenGL, даже, когда сама аппаратура способна. Публикация документации и оплачиваемые разработчики не решает эту проблему для ATI или Intel. (Разоблачаю полностью, закрытые ATI драйвера поддерживают некоторые из этих функций, но больше нет фритарда заинтересованного в них). Почему? Потому что нет инфраструктуры - linux DRI/DRM слой сломан и усилия по исправлению этого продолжаться в ледниковом периоде.
Как nvidia этого избежала? Они обошли его полностью - nvidia драйвер может выглядеть как обычный видео драйвер Xorg, но фактически очень агрессивно заменяет нижнюю треть X сервера (Большинство битов X управляются через замещаемую таблицу функций - славно эх?). У них нет выбора: у Вас может быть самая впечатлющая аппаратура мира и разработчики, но, если Вы не обеспечиваете совместимости с DRI/DRM - нет того, кто Вам поможет.
Это грубое приближение, но наиболее важное различие между архитектурой nvidia и DRI/DRM в том, что у nvidia фактически имеется менеджер памяти - и единственно в этом. Без менеджера памяти невозможно выделить внеэкранные буферы (следовательно, нет pbuffers или fbos) и без единого менеджера памяти невозможно согласовать 2D и 3D операции (следовательно нет перенаправленного Direct Rendering(Прямого Рендеринга)). Accelerated Indirect (Ускоренный Непрямой) GLX функция, которой фритарды были заняты представляет собой нескончаемый источник незаберихи - и в конечном итоге хак по его обходу отсутствие менеджера памяти.
Непрямой рендеринг, когда GL приложение передает полномочия на 3d операции X серверу вместо того, чтобы связываться непосредственно c 3D драйвером. Это делает операции медленней, но не обязательно неприемлемо медленными - до тех пор пока X сервер сам способен связываться с 3D драйвером и делать аппаратно ускоренные вызовы. Теперь DRI/DRM, X сервер первоначально *не мог* связываться с 3D драйвером, потому что только один прямой клиент мог запускаться за раз - так, что сервер сам был исключен, потому что большинство людей хотят, чтобы связывались их 3D приложения. Однако, они поняли, что, если форсируют все 3D приложения с использованием непрямого рендеринга, то смогут избежать необходимости в менеджере памяти, потому что X сервер сам выступает в качестве единственного центра контроля над всем 2D и 3D рендерингом - так, что они занялись исправлением так, чтобы сервер мог быть 3D клиентом и ускорять непрямой рендеринг, и так родился AIGLX как функция должная быть над всем. Никогда не забывайте, что 3D приложения используют непрямой рендеринг и потому такие тормозные. Никогда не забывайте, что nvidia драйвер предлагает Accelerated Indirect Rendering (Ускоренный Непрямой Рендеринг) с самого первого дня еще в 2000. Никогда не забывайте, что nvidia не нужно использовать, потому что они могут делать перенаправление прямого рендеринга правильно.
Так что, безусловно это проблема и они не дураки, так они пытаються решить это - как много лет? Каждый день, несмотря на все очевидные проявления прогресса, если ты установишь самый последний релиз твоего любимого дистра, у тебя будет драйвер без менеджера памяти, без поддержки какой-либо из этих функций. Только, если выкопаешь экзотичные ветки драйверов и mesa, применишь патчи к твоему дереву ядра, получиться что-то смутно апроксимирующее драйвер оснащенный менеджером памяти и только на часть 'поддерживаемой' intel/ati аппаратуры. Это просто замечательно.
Так, почему ты думаешь nvidia игнорирует все петиции, громкие слова, мольбы, угрозы использовать другую аппаратуру? Угадай - они пишут linux драйвера, потому что платежеспособные клиенты хотят их - и это места серьезного рендеринга и необходимости этих полных OpenGL функций - иначе бы nvidia не добавляла их в первую очередь! Они не собираются давать вам возможности придти к ним с вашим говеным open source драйвером, который не поддерживает функции изобретенные свыше 10 лет тому назад (pbuffers в SGI - 1997)
И мля, почему мои nvidia боксы засыпают/просыпаются успешно пока моя Intel карточка использует старый пропатченный драйвер, потому что один из последних продолжает виснуть. Мля, отлично смотрится. Хорошая работа ребята.
Источник
ВНИМАНИЕ !
Возможно что-то уже неактуально. Обращайте внимание на даты !
Эта статья опубликована 18 мая 2009-го года !
Прочитано 14235 раз и оставлено 66 комментариев.
#1.ifm