La Pile Graphique Linux

La Pile Graphique Linux

La pile graphique Linux Jérôme Pouiller <[email protected]> Programme Rappels sur les OS Historique du protocole X (la préhistoire) Accélération 2D Accélération des vidéos Accélération 3D des clients Drivers graphiques 3D Accélération du bureau toolkits graphiques Sysmic - J. Pouiller La pile graphique Linux 2 / 29 Rappel sur la mémoire Les CPU modernes intègrent un composant appelé MMU (Memory Management Unit): Unité de translation d’adresses mémoire On parle d’adresses physiques et virtuelles Lorsque le MMU est actif (cas nominal), toutes les adresses du code assembleur sont des adresses virtuelles Il est possible de configurer le MMU avec une instruction spéciale et en lui donnant un pointeur sur un tableau (dans la pratique, il s’agit plutôt d’un arbre) associant les adresses physiques et les adresses virtuelles Sysmic - J. Pouiller La pile graphique Linux 3 / 29 Drivers en espace utilisateur mmap permet d’allouer des plage d’adresses virtuelles Elles sont associées à : Mémoire anonyme (= allocation de mémoire) Fichiers (en intégralité ou en partie) /dev/mem représente la mémoire physique Utiliser mmap avec /dev/mem revient à accéder directement aux adresses physiques Avec iopl et ioperm, il est possible à un programme utilisateur d’accéder au ioport (inb, outb, ...) XFree86 est basé sur ce modèle Sysmic - J. Pouiller La pile graphique Linux 4 / 29 Fonctionnement de XFree86 Permet d’être portable entre les différents OS X gère aussi l’accès partagé aux périphériques d’entrées (souris, clavier, ’ecran tactile) C’est normalement le rôle de l’OS de gérer les accès aux périphériques Accéder directement aux périphériques peut rentrer en conflit avec la gestion de l’OS (plantage) Au fur et a mesure du temps, on a porté des morceaux des pilotes de X dans le noyau : Au lieu de travailler sur /dev/mem, on travaille sur /dev/nvidia. Sysmic - J. Pouiller La pile graphique Linux 5 / 29 Glossaire X11R6.X, X11R7.X : Xserver + Xlib + applications X + documentation Xserver : Le serveur en lui même. Il est divisé en deux parties : DDX : Device Dependent X : Xfree86/Xorg, Xnest, KDrive/TinyX, XWin, Darwin, xvfb, xgl, etc... un DDX peut avoir plusieurs drivers. chaque driver peut generer une binaire ou un module. Parfois, on nomme "Xserver" la partie DDX. DIX : Device Independent X : Le reste : gestion des protocoles clients, gestion des entrées, etc... Xorg : Fork de XFree86 pour des raison de licence (Xfree86 4.4, 2003) XAA : Différentes API interne à Xorg-Xserver pour travailler avec des drivers noyau et offrir un peu d’accélération (XFree86 3.3, 1997) Sysmic - J. Pouiller La pile graphique Linux 6 / 29 Coté utilisateur Sysmic - J. Pouiller La pile graphique Linux 7 / 29 Coté utilisateur Protocole X : Protocole de haut niveau Lent Sysmic - J. Pouiller La pile graphique Linux 8 / 29 Accélération 2D L’accélération 2D est toujours basé sur le même principe : Donner un buffer de mémoire au client sur lequel il peut écrire directement (un framebuffer). Le buffer est copié vers la carte graphique par DMA. Il est possible de demander à la carte graphique d’altérer différents buffers : positionnement sur l’écran, duplication, composition, etc... /dev/fb : Framebuffer fourni par le noyau. Peut-être implémenté par divers drivers Xrender : Extension du protocole X pour permettre l’accès direct a des framebuffer (Xfree86 4.0, 2000) EXA/UXA/SNA : Amélioration de XAA pour permettre une meilleure intégration de Xrender KAA : Idem EXA mais pour KDrive/tinyX Sysmic - J. Pouiller La pile graphique Linux 9 / 29 Le framebuffer noyau /dev/fb : L’interface framebuffer fournie par le noyau. Il existe un driver Xserver-XFree86 s’appuyant sur /dev/fb Directfb : Bibliothèque fournissant une abstraction entre /dev/fb et les différentes entrées. Le framebuffer ne peut être utilisé que par une appliction à la fois. Le patch noyau linux-fusion ajoute le support multi-application au framebuffer. Il faut utiliser DirectFB-fusion pour en profiter. Les toolkits courants ont un backend DirectFB ou /dev/fb. Certain driver peuvent ajouter des extensions plus ou moins documentées à /dev/fb Sysmic - J. Pouiller La pile graphique Linux 10 / 29 Accélération 2D/Video Les vidéos peuvent être optimisée d’une manière particulière. Il est possible de remplir une série de buffer et de demander à la carte graphique de passer automatiquement d’un buffer à l’autre. Xv : Extension permettant cette optimisation Aussi basé sur XAA/EXA Généralement, si Xrender est présent, Xv l’est aussi. Sysmic - J. Pouiller La pile graphique Linux 11 / 29 Accélération du décodage video XvMC/XvBA/VDPAU/VA-API : Extension permettant d’effectuer une partie du décodage de la vidéo sur la carte graphique. VA-API s’est imposé. Les bibliothèque de lecture courrant utilise normalement ces extensions : mplayer, gstreamer, etc... Dans l’embarqué, certains drivers ne respectent pas ces API. Les fournisseurs de chipsets proposent alors des versions patchées de mplayer/gstreamer (ou parfois des players maison). Se méfier. Sysmic - J. Pouiller La pile graphique Linux 12 / 29 Autres extensions X Gestion physique des écrans : xrandr Gestion du clavier : xkbd Gestion multi-écrans : xinerama Gestion multi-pointeurs : MPX Gestion de fenêtres non carrées : xshape Gestion du curseur : xcursor Gestion des périphériques d’entrée modernes : xi (Input eXtention) Accès exclusif à l’écran (pour les jeux) : DGA Et d’autres : xdmcp, xprint, xft (fonts), xaccess, etc... Sysmic - J. Pouiller La pile graphique Linux 13 / 29 Accélération 3D SGI/Khronos a spécifié plusieurs API pour communiquer avec les cartes graphiques : OpenGL (1 à 4), GLU, OpenGLESv1, OpenGLESv2, OpenCL, OpenVG, .... SGI/Khronos a interdit à la communauté de réutiliser le nom OpenGL dans l’implémentation. L’implémentation s’appelle donc Mesa3D (contient libGL, libEGL, libGLES) Afin d’ouvrir une fenêtre OpenGL, il est nécessaire de s’interfacer avec X : glx : extension de X wgl : API MS Windows équivalente à glx EGL : Api normalisée par SGI/Khronos (afin d’éviter de refaire l’erreur de glx/wgl). Portable : Xorg, Windows, /dev/fb, DirectFB... Fonctionne avec GLES, OpenVG Sysmic - J. Pouiller La pile graphique Linux 14 / 29 Accélération 3D Mesa3D a besoin de s’interfacer avec le hardware. Il doit partager des ressources avec le serveur X. Mesa s’intègre par l’intermédiaire d’une interface interne appelé DRI (Direct Rendering Infrastructure). Le DRI s’appuie ensuite généralement sur un driver se trouvant dans le noyau. Ces drivers implémentent l’interface DRM (Direct Rendering Manager) Mesa3D fourni un moteur software capable de fournir les fonctions OpenGL non implémentées par le Hardware. Sysmic - J. Pouiller La pile graphique Linux 15 / 29 Accélélration 3D Sysmic - J. Pouiller La pile graphique Linux 16 / 29 Accélération 3D Afin de gérer les différents drivers et les différentes API, Mesa3D se repose sur une architecture appelée Gallium3D : Sysmic - J. Pouiller La pile graphique Linux 17 / 29 Accélération 3D Sur framebuffer : Sur /dev/fb, l’API ne permet pas d’accéder à OpenGL (pas de GLX). Certains drivers propriétaires permettent d’avoir un accès à EGL en utilisant des extensions non standards DirectFB propose des API pour accéder à OpenGL/EGL ... fortement dépendentes du driver ... s’appuie sur les DRM (EGL uniquement) Travail récent Sysmic - J. Pouiller La pile graphique Linux 18 / 29 Drivers propriétaire Un driver propriétaire doit fournir : Une implémentation de libGL, libGLES, etc... Du coup, il remplace Mesa3D Un driver Xserver et en particulier pour Xrender Un driver pour la 2D (/dev/fb) Un DRI pour Xorg-Xserver. Toutefois, le driver peut ne pas garder la notion de DRI dans son architecture Un driver pour la 3D (DRM). Notons que l’interface DRM n’est utilisé que par le DRI. Du coup, les constructeurs se permettent de ne pas respecter les interfaces standards sur ces deux composants. Sysmic - J. Pouiller La pile graphique Linux 19 / 29 Dans l’embarqué Pas différent Choix large Dépendent de l’implémentation du driver par le fournisseur Attention au restriction sur l’usage et la publication Généralement, fournissent : un driver exposant un /dev/fb et une interface pour la 3D (équivalent DRM) un driver pour Xorg-Xserver implémentant Xrender, EGL et/ou GLX une implémentation de libEGL, libGLES, libOpenVG la Possibilité d’utiliser ces bibliothèques sur /dev/fb et/ou DirectFB Sysmic - J. Pouiller La pile graphique Linux 20 / 29 Dans l’embarqué Exemples : Chip Driver libre Exemples de chipsets Imagination Tech- Apple, Intel Atom (GMA 500/GMA nologies PowerVR 600), Texas Instrument OMAP (PandaBoard), ... ARM Mali Lima Allwinner Sunxi, Samsung Exynos Qualcomm Adreno Freedreno Freescale i.mx51/i.mx53 (AMD), Qualcomm Snapdragon Vivante Etnaviv Freescale imx6 Broadcom Video- Broadcom BCMx (Raspberry Pi) Core Nvidia Tegra Grate Nvidia Tegra Nvidia Nouveau Nvidia Geforce AMD Radeon Radeon AMD Radeon Sysmic - J. Pouiller La pile graphique Linux 21 / 29 L’accélération du bureau Possible d’accélérer les application, mais pas encore le bureau dans son ensemble Xgl : DDX s’appuyant sur une fenêtre OpenGL. Chaque fenêtre est rendue dans une texture. Il est alors possible d’appliquer des effets sur ces textures Aiglx : Remplace Xgl (Xgl était critiqué pour son organisation). Les fenêtres sont rendues sur des textures et les appels à GLX sont proxyfiés par AIGLX. Permet en outres aux application distante de faire du rendu OpenGL. Xcompose et Xdamage : extension du protocole X permettant à une application de contrôler l’affichage final des fenêtres (compiz, berryl, kwin, etc...). Sysmic - J. Pouiller La pile graphique Linux 22 / 29 Accélération 3D Sysmic - J. Pouiller La pile graphique Linux 23 / 29 Wayland L’architecture de Xserver date des années 80. L’informatique a beaucoup changé. Xserver est une succession d’extensions et de modifications Wayland est une nouvelle API faisant table rase du passé. Basée sur GLes, EGL, evdev. Wayland est basé sur des buffer dans lesquels les applications font des rendus 2D (comme Xrender) ou 3D (comme GLX).

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    29 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us