#xorg #modesetting #dri3 #бомбёжка
Что с кодовой базой иксов? Саботаж? Код вообще проверяют? Апстримный modesetting драйвер просто кешит use-after-free, недавний код для tearfree каким-то чудом вообще работает.
Недавно начал эксперименты с програмной реализацией dri3. Цель сделать чтобы работал вывод текстур с opengl/vulkan приложений с отключенным glamor там, где нет реализации 2д ускорения (для amdgpu её нет)
Взял за основу драйвер modesettiing. Сначала экспериментировал с патчами msdri3 (кто-то уже пытался сделать что-то подобное для raspberry pi, но в таком виде оно не работало на большинстве драйверов и патчи отклонили).
На ветке того времени у меня получилась условно работоспособная реализация, ранний прототип, но т.к там копипаста из старых версий без истории и намешан код под разными лицензиями, решил переписать с нуля.
Замержил апстримный (c master) код modesetting поверх старого репозитория, добавил проверки на отсутствующие фичи (tearfree код требует так же и изменений в xorg-server), но выключенный tearfree эти изменения не затрагивают.
Вроде драйвер заработал (но tearfree требует xorg-server из апстрима)
Начал заново писать softdri3, уже с учётом архитектурынх изменений.
Первый звоночек - вместо указателя на фукнцию в приватной структуре оказывается NULL. Добавил проверку, вроде заработало.
Добавляю ещё один указатель в структуру (ничего больше не трогаю). На предыдущем указателе NULL уже нету.
Уже понятно, что дело тут нечистое, но добавил паддинг и пошёл дальше писать код...
Добавляю обёртку функций отрисовки и xrender (идея в том, чтобы во время отрисовки использовался dumb buffer, а для чтения gbm bo).
xrender вызывается, а в отрисовку ничего не приходит вообще, а с отрубленным shadow buffer вместо CreateGC nullptr.
Через некоторое время собрал код на другой машине с address sanitizer и обнаружил что практически весь код добавленный Sultan Alsawaf (TearFree патчсет) разваливается при закрытии любого opengl окна.
С glamor видимых проблем пока что нет, но это вопрос времени.
Что с кодовой базой иксов? Саботаж? Код вообще проверяют? Апстримный modesetting драйвер просто кешит use-after-free, недавний код для tearfree каким-то чудом вообще работает.
Недавно начал эксперименты с програмной реализацией dri3. Цель сделать чтобы работал вывод текстур с opengl/vulkan приложений с отключенным glamor там, где нет реализации 2д ускорения (для amdgpu её нет)
Взял за основу драйвер modesettiing. Сначала экспериментировал с патчами msdri3 (кто-то уже пытался сделать что-то подобное для raspberry pi, но в таком виде оно не работало на большинстве драйверов и патчи отклонили).
На ветке того времени у меня получилась условно работоспособная реализация, ранний прототип, но т.к там копипаста из старых версий без истории и намешан код под разными лицензиями, решил переписать с нуля.
Замержил апстримный (c master) код modesetting поверх старого репозитория, добавил проверки на отсутствующие фичи (tearfree код требует так же и изменений в xorg-server), но выключенный tearfree эти изменения не затрагивают.
Вроде драйвер заработал (но tearfree требует xorg-server из апстрима)
Начал заново писать softdri3, уже с учётом архитектурынх изменений.
Первый звоночек - вместо указателя на фукнцию в приватной структуре оказывается NULL. Добавил проверку, вроде заработало.
Добавляю ещё один указатель в структуру (ничего больше не трогаю). На предыдущем указателе NULL уже нету.
Уже понятно, что дело тут нечистое, но добавил паддинг и пошёл дальше писать код...
Добавляю обёртку функций отрисовки и xrender (идея в том, чтобы во время отрисовки использовался dumb buffer, а для чтения gbm bo).
xrender вызывается, а в отрисовку ничего не приходит вообще, а с отрубленным shadow buffer вместо CreateGC nullptr.
Через некоторое время собрал код на другой машине с address sanitizer и обнаружил что практически весь код добавленный Sultan Alsawaf (TearFree патчсет) разваливается при закрытии любого opengl окна.
С glamor видимых проблем пока что нет, но это вопрос времени.