Les dmabuf sont un concept dans le noyau qui permettent d'exposer une zone mémoire d'un composant matérial sous la forme d'un pseudo-fichier ; justement pour ne pas faire de copie.
Par exemple, une application utilisant OpenGL va effectuer son rendu, et transmettre le contenu de la fenêtre au compositeur sous la forme d'un dmabuf fd (file descriptor). Ensuite le compositeur va pouvoir utiliser ce dmabuf comme une texture pour dessiner le bureau complet. Comme le rendu du jeu et du compositeur sont effectués sur le même GPU, il n'y a besoin d'aucune copie.
Mais dans certains cas, comme j'imagine une vidéo ou un jeu en mode fenêtré, GTK va faire quelque chose comme ça pour dessiner la zone de la vidéo :
1) faire décoder au GPU la vidéo -> le résultat est un dmabuf
2) importer ce dmabuf qui contient la vidéo
3) dessiner la vidéo
4) exporter le résultat dans un nouveau dmabuf pour le compositeur
Dans le cas général, le contenu du dmabuf obtenu à l'étape 4 sera exactement le même que celui obtenu à l'étape 1. L'optimisation décrite c'est de permettre de sauter les étapes 2, 3, et 4 et de directement transmettre le dmabuf de 1 au compositeur.
L'étape d'après étant de sauter aussi l'étape "envoyer le dmabuf au compositeur" et à la place l'envoyer directement à la partie affichage du GPU pour dessiner la vidéo "au dessus" du bureau produit par le compositeur (direct scanout).
[^] # Re: Lapin compris
Posté par pepp . En réponse au lien GTK 4.14 Adding Graphics Offloading Capabilities Under Wayland (via phoronix) - GTK Development Blog. Évalué à 10.
Les dmabuf sont un concept dans le noyau qui permettent d'exposer une zone mémoire d'un composant matérial sous la forme d'un pseudo-fichier ; justement pour ne pas faire de copie.
Par exemple, une application utilisant OpenGL va effectuer son rendu, et transmettre le contenu de la fenêtre au compositeur sous la forme d'un dmabuf fd (file descriptor). Ensuite le compositeur va pouvoir utiliser ce dmabuf comme une texture pour dessiner le bureau complet. Comme le rendu du jeu et du compositeur sont effectués sur le même GPU, il n'y a besoin d'aucune copie.
Mais dans certains cas, comme j'imagine une vidéo ou un jeu en mode fenêtré, GTK va faire quelque chose comme ça pour dessiner la zone de la vidéo :
1) faire décoder au GPU la vidéo -> le résultat est un dmabuf
2) importer ce dmabuf qui contient la vidéo
3) dessiner la vidéo
4) exporter le résultat dans un nouveau dmabuf pour le compositeur
Dans le cas général, le contenu du dmabuf obtenu à l'étape 4 sera exactement le même que celui obtenu à l'étape 1. L'optimisation décrite c'est de permettre de sauter les étapes 2, 3, et 4 et de directement transmettre le dmabuf de 1 au compositeur.
L'étape d'après étant de sauter aussi l'étape "envoyer le dmabuf au compositeur" et à la place l'envoyer directement à la partie affichage du GPU pour dessiner la vidéo "au dessus" du bureau produit par le compositeur (direct scanout).