Месяц назад я писал про то, что DRI надо нафиг переписать, а имеющееся засыпать солью и вбить крест в грудь, чтоб не оживало. Так вот, я сейчас работаю на этим, и по ходу работы у меня возникают вопросы.
Для начала что у нас есть. Общая архитектура такова:
приложение->opengl/openvl/foo->usermode_driver->(kernel)->новое DRI->kernelmode_driver->hardware.
«новое DRI» - это то, что я пилю в данный момент. планируется для начала сделать «новое DRI», фейковый kernelmode_driver для вывода в приложение и далее в иксы :), usermode_driver из llvmа, делающий IR, и «железо» из LLVMа, компилящего IR на своей стороне. тормозить будет адски :)
Вопросы у мня архитектурные.
DRI будет показывать наружу 4 устройства. /dev/gpu - для работы с gpu вида создай текстуру-рисуй треугольник-запусти шейдер-opencl. можно будет открыть только один /dev/gpu на процесс(придется хакать что-то в структурах ведра ибо приоритеты нам тоже понадобятся)
как быть с композитором? я не хочу вводить ограничение «один композитор на 1 тачку». ведь можно отсылать скриншоты еще и панели задач(как в 7ке), другому приложению и т.д.).
возмонжно, можно будет открыть еще один /dev/gpu, сделать на него ioctl и отправить через unix socket композитору. этот fd будет урезан в правах до «только читать текстуру или юзать ее в шейдере». минусы - надо будет делать poll+read вместо одного ioctl или read
ах да. если текстурка помечена как конфиденциальная, то ни её, ни результаты обсчета шейдером получить обратно уже будет низя. чтоб не скриншотили номера кредиток
/dev/gpu_features - ну вот есть у amd uvd и pcom. их можно будет дергать, а загружаться они будут из огороженного в целях безопасности демона. т.е. шейдер можно будет взять готовый. почему отгорожено будет? чтоб не сломали вас дебажа каталист. катаглист огораживаете аппармором, и этот девайс тоже. оттуда же можно будет рулить питанием.
/dev/gpu_io - управление видеовыходами. опять же отдельное устройство, чтоб никто не загадил экран. только проверенные apparmorом приложения.
/dev/gpu_ctl - для отладки и контроля доступа.
apparmor приведен для примера.
какие-нибудь предложения есть по поводу вышенаписанного?