Camada gráfica do Linux: da introdução à sua primeira contribuição Paulo Zanoni paulo.r.zanoni@intel.com
Quem sou eu? Intel Mandriva C3SL M.Sc. & B.Sc. UFPR 2 SSG System Software Division
Sumário 1. O que é um driver de vídeo? Como ele funciona? 1. X 2. 3D 3. 2D 4. Composite 5. KMS 6. Wayland 7. VA-API 2. Qual o estado atual? 3. Como posso ajudar? 4. Perguntas? 3 SSG System Software Division
O que é um driver de vídeo? Como ele funciona? 4 SSG System Software Division
X Window System 1984! Protocolo Cliente/Servidor Funciona pela rede! Servidores Xorg Driver DDX (xf86-video-intel) Xnest, Xephyr, Xdmx Clientes Apps & Window Manager Xlib & XCB Toolkits Driver de vídeo: DDX 5 SSG System Software Division
Sopa de letrinhas X11: protocolo X versão 11 Xlib: X11 library (biblioteca) X.org: fundação Xorg: servidor (/usr/bin/xorg) DDX driver: Device Dependent X driver XCB: X protocol C language Binding WM: Window Manager 6 SSG System Software Division
3D OpenGL: API Mesa: implementação do OpenGL (1993) GLX: extensão do protocolo X libgl: fruto da compilação do Mesa 7 SSG System Software Division
3D OpenGL: API Mesa: implementação do OpenGL (1993) Código pra HW específico + fallback em software GLX: extensão do protocolo X DRI: Direct Rendering Infrastructure (1998) DRM: Direct Rendering Manager drm.ko, i915.ko libdrm: envólucro para as ioctls do DRM libgl: fruto da compilação do Mesa Driver de vídeo: DDX + módulo DRM + backend Mesa + parte da libdrm 8 SSG System Software Division
2D X Render (2000) Fontes bonitas Transparência Anti-aliasing Cairo XAA (1996) EXA (2005) UXA (2008), Glamor (2011), SNA (2011) 9 SSG System Software Division
Composite 2004 Off screen rendering Transformações Compositor Coisas bonitas! 10 SSG System Software Division
Kernel Mode Setting 2007 Kernel do Linux controla os modos de vídeo (resolução) Mais código do driver vai para o Kernel Melhora: Suspend/Resume Debug Suporte a usuários não-x Troca de VT DDX torna-se 2D somente 11 SSG System Software Division
Wayland 2008 Problemas: Compositor fora do X X pode ser menor Wayland: Protocolo Biblioteca Compositor Display server Sem renderização no servidor! Weston Curitiba! 12 SSG System Software Division
Video Acceleration API 2007 Biblioteca genérica para encode/decode de vídeo Driver backends Driver de vídeo: DDX + módulo DRM + backend Mesa + parte da libdrm + backend libva 13 SSG System Software Division
Qual o estado atual? 14 SSG System Software Division
Melhorando! X: multitouch 3D: OpenGL 3.0, desempenho, piglit 2D: desempenho do Cairo, Cairo GL, Glamor, SNA Composite: Wayland KMS: novos drivers, APIs Wayland: 0.85, toolkits VA-API: usuários da biblioteca 15 SSG System Software Division
Como posso ajudar? 16 SSG System Software Division
Escolha uma área Display 2D 3D X11 Wayland Input Media 17 SSG System Software Division
Comece a aprender Torne-se um usuário Howtos, APIs, especificações Implemente alguma coisa Reinvente a roda Torne-se um membro da comunidade Listas de email, Bugzilla, Wiki, IRC, Planet Compile, leia o código Encontre alguma coisa pra fazer! Bugs Empacotamento & bugs de distribuição Rode a suíte de testes Analise: saída da compilação, analizador estático, Valgrind Ideias GSoC 18 SSG System Software Division
Display Aprenda libxrandr: leia randrproto.txt Aprenda a API do KMS: /usr/include/xf86drmmode.h Leia especificações: EDID, HDMI, DisplayPort, CEA, VBE Registradores de HW intellinuxgraphics.org/documentation.html x.org/docs/amd nouveau.freedesktop.org Brinque com as ferramentas: intel-gpu-tools: intel_reg_dumper, intel_reg_read, intel_reg_write Encontre um problema (bug?), tente aprender tudo sobre ele Especificações, registradores de HW relevantes, ferramentas Leia o livro Linux Device Drivers (ou outros mais novos) 19 SSG System Software Division
2D Aprenda Cairo Suíte de testes do Cairo é muito boa! Centenas de bugs fáceis de encontrar e consertar! Aprenda a matemática envolvida cairo/bibliography Aprenda as bibliotecas de baixo nível Xrender, Xft Aprenda DDX: Leia DESIGN do Xorg: xorg/xserver/hw/xfree86/doc/ddxdesign.xml Leia o código do xf86-video-dumy 20 SSG System Software Division
3D Aprenda OpenGL & OpenGL ES Dezenas de livros! Implemente alguma coisa Um jogo pra celular! Leia as especificações do OpenGL opengl.org/registry Piglit! Encontre e conserte bugs agora mesmo! Adicione novos testes! Implemente uma extensão que falta Comece com o bakcend de SW 21 SSG System Software Division
X11 Aprenda Xlib & XCB Subindo Melhore os toolkits com as coisas novas do X11 Porte alguma coisa pra XCB Descendo TODO list do Xserver sempre enorme Desenvolvimento recente em suítes de teste Servidores deprecated Integração com Wayland Input 22 SSG System Software Division
Wayland Em desenvolvimento! Enorme TODO list publicada recentemente Código pequeno, mais fácil pra aprender Qualquer coisa pode ser melhorada! Ajude no lado das aplicações também 23 SSG System Software Division
Input Mouse, teclado, dedo Aprenda Xlib (eventos, grabs, Xkb, Xinput) Aprenda como o HW funciona Aprenda input do Kernel, evdev Mais fácil de aprender do que vídeo Encontre uma funcionalidade quebrada em um driver Compre um dispositivo diferente e faça funcionar 24 SSG System Software Division
Media Aprenda os algoritmos Leia as especificações Adicione suporte à VA-API em algo 25 SSG System Software Division
E o mais importante Meta a cara no código! Não tenha medo de código dos outros! Pergunte! Pesquise! 26 SSG System Software Division
Perguntas? X X11 X.org Xorg Xnest Xephyr Xdmx Xkb Xinput Xrandr Xrender Xft Xlib XCB DDX Cairo XAA EXA UXA Glamor SNA KMS OpenGL OpenGL ES Mesa GLX DRI DRM libgl libdrm WM Composite Compositor VT Wayland Weston VA-API libva EDID HDMI DP VBE evdev 27 SSG System Software Division