Представлена реализацию виртуальных CRTC-видеоконтроллеров (VCRTC)
Илья Хаджич (Hadzic) из Bell Labs представил 0 реализацию виртуальных CRTC-видеоконтроллеров (VCRTC), позволяющих претворить в жизнь механизм перенаправления пикселей из фреймбуфера определённого GPU на иное устройство вывода. С использованием виртуального контроллера CRTC возможно довольно гибко манипулировать выводом информации в системах с несколькими видеокартами, абстрагируя GPU на коем производится рендеринг и непосредственное устройство вывода.
Механизм VCRTC может выясниться полезным при реализации помощи гибридных систем с несколькими видеоадаптерами. К примеру, видеоподсистема NVIDIA Optimus дает возможность на лету переключать вывод м/у встроенной энергоэффективной видеокартой на базе GPU Интел и мощной дискретной картой NVIDIA. При помощи VCRTC возможно исполнять трудный рендеринг на GPU дискретной карте, а выводить информацию ч/з интегрированную видеокарту. Также, при подключении ч/з порт USB внешнего видеоадаптера DISPLAYLINK, возможно сформировать сложную 3d-сцену с использованием GPU стационарной видеокарты, однако вывести её на внешнюю видеокарту.
Почти, в качестве устройств вывода (CTD - Compression Transmission and Display) могут выступать любые устройства, которые способны сделать нечто полезное со сформированным набором пикселей, в частности вероятно сделать синтетический драйвер для вывода ч/з V4L2 или для записи в файл. Сформировав изображение на GPU, однако использовав для вывода драйвер V4L2, вероятно перенаправление сформированного на GPU потока по сети, с его последующей обработкой в в любом приложении, поддерживающем V4L2, к примеру, в видеоплеере VLC.
CRTC отвечает за создание синхросигналов и выполняют чтение содержимого фреймбуфера из видеопамяти. Виртуальный CRTC может оказаться реализован на уровне драйвера, который эмулирует поведение аппаратного CRTC. Перераспределением трафика м/у GPU и устройством вывода (CTD) занимается особый менеджер виртуальных CRTC, который выполнен в виде DRI-модуля VCRTCM для ядра Линукс. VCRTCM может оперировать как виртуальными CRTC, так и реальными CRTC существующих видеокарт. Для оптимизации производительности VCRTCM по возможности старается применять для передачи данных DMA, и обеспечивает поддержку этих специфичных для CRTC вещей, как видеорежимы, замещения страниц, аппаратный курсор и т.п.
За исключением DRI-модуля vcrtcm в рамках проекта разработана небольшая программа vcrtcm_ctl, предназначенная для управления виртуальными CRTC. К тому же опубликована исчерпывающая документация по архитектуре и сборке. Код проекта доступен в рамках лицензии GPL. В данный момент поддерживаются лишь работа с драйвером Radeon и GPU R6XX, R7XX, Evergreen, Northern Island. В будущем планируется прибавить поддержку драйверов Интел и Nouveau.