LINUX.ORG.RU

Что надо прочитать, чтобы понять как работает DRI3?

 


0

1

Я слышал, что это расширение к протоколу X11, которое позволяет передавать графические буферы из приложения в приложение. Но мне совершенно непонятно, как это происходит. Ведь графические буферы находятся в памяти видеопроцессора, а не в памяти центрального процессора.

Ничего. Там нечего понимать. И почему DRI3, если отличия там минимальны? Ты не хрчешь устройство скейтборда какой-нибудь конкретной марки почитать? А вообще вся инфа в гугле на фридесктоп.орг. Ищите и обрящите.

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

Я не понимаю слов, которые пишут в гугле. Вот например: https://cgit.freedesktop.org/xorg/proto/dri3proto/tree/dri3proto.txt

Что такое: DMA-BUF objects, что такое Fences, как работает расширение протокола X11 Present (https://cgit.freedesktop.org/xorg/proto/presentproto/tree/presentproto.txt) и так далее.

Т.е. хотелось бы длинный учебник про протоколу X11 на русском языке, потому что мне не понятно, как работает графика в Linux. Почему X11, а не Wayland? Потому что уверен, что по второму книжек пока не написали.

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

Да это, братан история длинная. Короче Вялый сидит на ДРМ драйвере. Иксы используют сокеты. ДРИ – расширение для Иксов, которое в обычном случае не требует ничего и работает само по себе. Вообще, Иксы вроде теперь тоже на ДРМ дровах. Ну да это ничего не меняет. У них архитектура такая: пишешь в сокет, что-то на экране меняется. ДРИ нужен для того, чтобы графон летел не через сокет, а напрямую в видяху. И хоть рнальный выхлоп от этого всего 1-2%, кто-то с этого радуется. Вот собственно и всё. Вопросы?

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

Опенглом рисуй или Вулканом. ДРИ и Икс-протокол не про это.

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

Вообще GLFW+OpenGL. Ну или какую-нибудь либу, типа Cairo используй. Примеры там всякие имеются.

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

какую-нибудь либу, типа Cairo используй.

Мне нужно понимание того, как работает. Я не могу использовать готовые клиентские библиотеки, знакомые амиши против.

Поэтому хочу описание X-протокола на уровне байтов и писать в сокет самостоятельно, вместо XCB/Xlib.

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

В таком случае у тебя два варианта:

  1. Принять тот факт, что религиозные заблуждения – вовсе не самое важное в жизни (чему масса примеров). И ставить их выше ценности своего времени не стоит.
  2. Учить английский.

Второй вариант тебе не сильно поможет. Т.к. видеокарты, занимающиеся отрисовкой графики – чёрный ящик. Можно примерно прикинуть, как они работают, но нельзя точно. Конечно, если ты устроишься инженером в НВидия, то часть тайн сможешь для себя открыть. А вообще, это очень большая тема, чтобы в принципе уместиться в одной голове, если общие слова не интересуют.

Вообще всё происходит так.

Ты пишешь программу, которая использует библиотеки типа Xlib, xcb, opengl и прочих. Твоя программа подключается к Икс-серверу и общается с ним по икс-протоколу. Создаёт окно, подписывается на события мыши и клавиатуры, создаёт OpenGL-контекст. Потом ты работаешь с событиями и контекстом. Вот и всё. Так всё и происходит.

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

Поэтому хочу описание X-протокола на уровне байтов и писать в сокет самостоятельно, вместо XCB/Xlib.

Открой сорцы xcb и смотри. Или проще аналога для Go xgb. Там не то чтобы сложно. Вообще-то икс-протокол довольно простой.

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

аналога для Go xgb.

Вот они же смогли, сами, байтами!

Вообще-то икс-протокол довольно простой.

что ж его по исходникам тогда предлагают изучать? Учебники где?

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

библиотеки типа Xlib, xcb, opengl

Даже в этой строчке уже непонятно, opengl работает только на клиенте, или есть и на клиенте и на сервере и его реализацию можно вызывать через X-протокол.

https://en.wikipedia.org/wiki/GLX

Как пишут расширения для X-протокола?

https://upload.wikimedia.org/wikipedia/commons/thumb/4/47/Linux_graphics_drivers_DRI_current.svg/1120px-Linux_graphics_drivers_DRI_current.svg.png

Я хочу как на этой картинке GLX -> X server -> AIGLX -> и там оно как-нибудь само без меня

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

что ж его по исходникам тогда предлагают изучать? Учебники где?

На фридесктоп.орг всё описано. Но тебе не зашло.

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

Мне нужно понимание того, как работает

иксы это абстракция для многозадачности - прозрачного использования одного экрана и устройств ввода несколькими приложениями . Там есть примитивные возможности для отрисовки но тебе это точно не нужно

Я не могу использовать готовые клиентские библиотеки

х..ню пишешь

хочу описание X-протокола на уровне байтов и писать в сокет самостоятельно

есть и на русском языке - мне искать лень, делом лучше займись

anonymous
()

Зачем? Это очередное тормозное говно, сливающее проприетарным дровам.

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

и писать в сокет самостоятельно

Ну и нафига? Если для оптимизации, то это бред, нужно вообще выкидывать иксы из цепочки, используя DRM или EGLstreams.

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

Это так себе ссылка. Вот, например, если мне хочется понять что означает «расширение протокола X» (в том смысле, что GLX - это расширение протокола X), то я читаю соответствующий раздел страницы:

клиент может запросить список всех доступных расширений для данных, относящихся к определенному расширению. Пакеты расширений похожи на пакеты протокола ядра. Протокол ядра указывает, что запрос, событие, и пакеты ошибок содержат целое число, показывающее его тип (например, запрос на создание нового окна пронумеровано 1). Диапазон этих чисел зарезервированы для расширений.

Лично мне тут ничего непонятно. Например, какой диапазон имеется в виду, как именно запросить список доступных расширений. Гиперссылок должно быть больше, текст должен быть развёрнутей.

Einstok_Fair ★★☆
() автор топика
Последнее исправление: Einstok_Fair (всего исправлений: 2)
Ответ на: комментарий от anonymous

Ты посмотри как там написано. Непонятно написано.
Например по ссылке https://www.x.org/releases/current/doc/xproto/x11protocol.html
написано:

an additional minor opcode encoded in the second data byte in the request header.

Вот этот «Second data byte» - это второй, четвёртый или пятый байт от начала пакета? Если второй, то как тогда определяют длину пакета в общем виде для обычных пакетов и для пакетов расширений протокола?

Если пятый, то для чего нужен четвёртый байт?

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

Вот этот «Second data byte» - это второй, четвёртый или пятый байт от начала пакета?

However, the placement and interpretation of this minor opcode and of all other fields in extension requests are not defined by the core protocol

как тогда определяют длину пакета в общем виде для обычных пакетов и для пакетов расширений протокола?

The length field defines the total length of the request, including the header

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

Мне не нравится что у них в описании заголовка пакетов из четырёх байт

four bytes of a header (containing the major opcode, the length field, and a data byte)

используется слово «data byte»
А при описании вспомогательного кода операции используется слова

opcode encoded in the second data byte in the request header


Мне не ясно чем «second data byte» во второй цитате отличается от «data byte» в первой цитате.
Процитированные тобой предложения хороши сами по себе, но не проясняют моего непонимания. Могу ли я использовать вместо second data byte просто data byte ? Если да, то почему?

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

Могу ли я использовать вместо second data byte просто data byte ?

Ты можешь и должен использовать тот байт, который тебе укажет спецификация конкретного расширения. Здесь тебе просто сказали, что обычно (но необязательно!) расширения используют для этого второй байт данных (т.е. первый байт второго пакета).

gremlin_the_red ★★★★★
()

DRI это прямой рендеринг. Это как прямой доступ к памяти, только прямой доступ к монитору, не нагружая системную шину. Самый первый 3D-ускоритель (3dfx) был отдельно от видеокарты, и прямой рендеринг там был реализован особым кабелем. Потом видеокарту и 3D-ускоритель объединили, и там не знаю как было. Непрямой рендеринг, это наверное когда картинка идёт от 3D-ускорителя видеокарты на вывод VGA видеокарты - через материнку в проц, и обратно. Обычно непрямой рендеринг используют для проброса картинки по локальной сети, а не на локальной машине. А прямой рендеринг, это из 3D-ускорителя сразу на экран. Хотя блин, а как тогда захватывать видео с экрана? Я не понял

DRI 1, про него я читал коммент на ЛОРе, что он неудачный, и NVIDIA его не стала у себя реализовывать, сделав своё собственное расширение.

DRI 2 это то же самое, что и DRI 1, только с поправками и пожеланиями от NVIDIA.

DRI 3 это то же самое, что и DRI 2, только с поправками для гибридной графики (NVIDIA Optimus, ATi PowerXPress). Также для гибридной грфаики используются технологии DMA BUF и DRI PRIME.

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

А что, на ЛОРе есть разделы?! А я из Трекера в темы попадаю...

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

Какого второго пакета?

Я так понял, что пакет всего один. У этого пакета старший бит означает 0 - простой пакет протокола X, 1 - пакет расширения. Если старший бит первого байта 0, то дальше 2 байта длины и данные. А про пакеты с 1 в старшем бите первого байта надо смотреть на описание расширения (по его номеру в семи младших битах)

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

Какого второго пакета?

Четырёхбайтной последовательности, если так проще. Но я глянул парочку расширений — я всё таки неправильно их понял, они имели ввиду второй байт заголовка, тот, который «байт данных». В любом случае, для каждого расширения это надо смотреть спецификацию.

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

они имели ввиду второй байт заголовка, тот, который «байт данных».

Ну то есть четвёртый от начала, с индексом 3, если считать от нуля.

Я про это и говорю - спецификация написана мутно.

для каждого расширения это надо смотреть спецификацию.

Мне, например, так и осталось непонятным, длина в четвёрках байтов это только для пакетов основного протокола, или для расширений это тоже обязательное поле.

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

Это как прямой доступ к памяти, только прямой доступ к монитору, не нагружая системную шину

Что?

Самый первый 3D-ускоритель (3dfx) был отдельно от видеокарты, и прямой рендеринг там был реализован особым кабелем

Что? [×2]

Непрямой рендеринг, это наверное когда картинка идёт от 3D-ускорителя видеокарты на вывод VGA видеокарты - через материнку в проц, и обратно

Нет, прямой рендеринг (в контексте иксов и DRI) — это когда приложение посылает команды видеокарте напрямую, минуя иксы. Непрямой, соответственно, это когда приложение рисует картинку исключительно через иксы.

DRI 1, про него я читал коммент на ЛОРе, что он неудачный

А ты неплох в выборе источников информации. Но он действительно был неудачным, по причине эксклюзивного захвата видяшки приложением на время рендеринга.

DRI 2 это то же самое, что и DRI 1, только с поправками и пожеланиями от NVIDIA

Нет, DRI2 принципиально другой и нвидия тут не при чём.

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

Тебе плевать на то, что ты дурачок и пишешь бред, к сожалению.

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

Ну то есть четвёртый от начала, с индексом 3, если считать от нуля

Нет, второй. 0 - opcode 1 - data[0] 2-3 — length

спецификация написана мутно

Спецификация написана однозначно. Мутновато описание спецификации словами.

или для расширений это тоже обязательное поле

Почти все расширения используют это поле. Но, как минимум, есть расширение для больших запросов (больше 65535*4), где это поле равно 0, а реальная длина хранится в следующих 4х байтах.

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

> Нет, прямой рендеринг (в контексте иксов и DRI) — это когда приложение посылает команды видеокарте напрямую, минуя иксы. Непрямой, соответственно, это когда приложение рисует картинку исключительно через иксы.

Спасибо за ликбез. А в винде есть прямой рендеринг? Кабель для Voodoo вот

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

А в винде есть прямой рендеринг?

Там отсутствует непрямой, как явление.

Кабель для Voodoo

Потому что первые вуды были чисто 3д-ускорителями, для 2д нужна была отдельная видяшка.

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

Меня тут отвлекли и я не закончил мысль.

для 2д нужна была отдельная видяшка

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

gremlin_the_red ★★★★★
()

Что надо прочитать, чтобы понять как работает DRI3?

Если найдёшь такое чтиво, чтобы всё было описано в одном месте, поделись ссылкой. Можно на русском, можно на английском. Можно даже на суахили.

i-rinat ★★★★★
()
Ответ на: комментарий от Einstok_Fair

Не, ну тут так ржачно, что аж не сдержаться. Зенитар такую бредятину пишет, а ты: «он добрый, не то, что анонимы».

i-rinat ★★★★★
()
Ответ на: комментарий от burato

официальный язык стран Танзании, Кении и Уганды.

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

Нет. Просто ты не в теме, как графика в Linux работает. Ты видишь только один путь, а там их пять, и меня интересует другой.

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