X-Git-Url: http://git.mutantstargoat.com?a=blobdiff_plain;f=codecamp.tex;h=74d1fb3988824d402d82103a76f42d7c53fd9730;hb=a251c89d377e518de0fdc8816f402b901422a361;hp=24cfebb7a98599cca33b43a9ecdb5b55441c50d5;hpb=70b34c2424b01ce1fb33f8eed9acf1f09bd1be9e;p=webkit_codecamp diff --git a/codecamp.tex b/codecamp.tex index 24cfebb..74d1fb3 100644 --- a/codecamp.tex +++ b/codecamp.tex @@ -111,7 +111,8 @@ \put(0,-110.7){% \begin{minipage}[b][38mm][t]{220mm} - \usebeamerfont{title}{\inserttitle\par} + \usebeamerfont{title}{\textbf{Adoption of ANGLE in + WPE/WebKitGTK}\par} \usebeamerfont{author}{\insertauthor\par} \end{minipage} } @@ -259,29 +260,32 @@ {\footnotesize{ \begin{enumerate} \itemsep0.3cm - \item {\color{coolblack}\textbf{Use ANGLE and EGL in the same program: - create 2 X11 windows, and draw 2 images from 2 different contexts - by 2 different drivers.} + \item {\color{coolblack}\textbf{Similar to WebKit: I've + used ANGLE and EGL in the same program (created 2 X11 windows, and + rendered 2 images from 2 different contexts by 2 different + drivers on them.} \tiny{{(In several cases ANGLE behaves different from EGL: e.g. when \texttt{eglMakeCurrent} doesn't call \texttt{eglMakeCurrent}!!).}} } - \item {\color{coolblack}\textbf{Fix the problem with shared - context and shared textures.} + \item {\color{coolblack}\textbf{Shared context: Filled a shared texture with ANGLE, + displayed it with the native driver. (REJECTED)} \tiny{{(required modifications in ANGLE OpenGL driver, writing an ANGLE extension, forcing the EGL/OpenGL backend, and it wouldn't work with multiple processes)}} } - \item {\color{coolblack}\textbf{Fix the problem by sharing a Linux kernel - dma-buf buffer across drivers.} + \item {\color{coolblack}\textbf{DMA-buffers: Filled two textures + from two drivers simultaneously by using a shared Linux kernel + dma-buf buffer. (ADOPTED)} - \tiny{{(drivers must support some EGL/GL extensions, but both mesa and + \tiny{{(drivers should support some EGL/GL extensions: both mesa and ANGLE support them)}} } - \item {\color{coolblack}\textbf{Solve the multiple processes case.} + \item {\color{coolblack}\textbf{Investigated the multiple processes + case. (FUTURE)} \tiny{{(we need some sort of IPC to exchange the dma-buf FD)}} } @@ -362,8 +366,8 @@ program} \end{center} \vspace{-0.1cm} \scriptsize{\color{coolblack} - I've first written a program where both ANGLE and native system driver render - images on two different X11 windows and displayed them side by side: + I've first written a program where both ANGLE and the native system driver render + images on X11 windows: } \vspace{-0.1cm} \begin{center} @@ -404,7 +408,8 @@ program} \vspace{-0.1cm} \begin{center} - \textbf{\color{coolblack}More on Makefile changes and dynamic loading:} + \textbf{\color{coolblack}Read more about invalidation and dynamic + loading:} \end{center} \setbeamertemplate{itemize/enumerate body begin}{\tiny} @@ -462,7 +467,7 @@ program} \\ \rowcolor{platinum} \textbf{new\_ctx} = {\color{mediumred-violet}eglCreateContext}(new\_ctx\_dpy, new\_ctx\_config, - \textbf{native\_ctx}, new\_ctx\_attrib);\\ + \textbf{shared\_ctx}, new\_ctx\_attrib);\\ \rowcolor{platinum}\\ \hline \end{tabular} @@ -472,8 +477,9 @@ program} \vspace{0.1cm} \scriptsize{ - \textbf{\color{coolblack}{A texture generated by each context can be bound and used by the - other\\ without ever leaving the GPU!}} + \textbf{\color{coolblack}{Each texture created by the + \texttt{shared\_ctx} can + be bound and used by the \texttt{new\_ctx} while it stays in the GPU!}} } \vspace{0.01cm} @@ -540,16 +546,17 @@ program} \vspace{0.3cm} - \begin{block}{Requirements to use shared context/textures in \textbf{WebKit}:} + \begin{block}{What would we need to change in \textbf{WebKit} for + shared context to work?} \begin{itemize} - \item We should use the \textbf{ANGLE EGL/OpenGL backend in + \item Force the \textbf{ANGLE EGL/OpenGL backend in WebGL2} to match the main Graphics Pipeline API/driver (both contexts should be OpenGL or GLESv2 and from the same driver!) \item We'd need an \textbf{ANGLE extension} to allow passing native shared context to ANGLE's eglCreateContext instead of ANGLE shared context. - \item We should never move WebGL2 and Graphics Pipeline in + \item We should never split WebGL2 and Graphics Pipeline in different processes. Shared contexts should be created by the same process! (\textbf{Reason we've rejected this method}). @@ -621,19 +628,7 @@ program} OpenGL context between native EGL and ANGLE EGL using \texttt{EGL\_ANGLE\_native\_shared\_context}:} - \vspace{0.2cm} - \begin{itemize} - \item \tiny{We'd pass the native EGL context (created by the native system - driver) as {\color{black}shared context} to the - native OpenGL context that is created {\color{black}in the ANGLE - OpenGL backend} using the native system driver!} - \item \tiny{We'd need use the {\color{black}new EGL attribute - (\texttt{EGL\_NATIVE\_SHARED\_CONTEXT\_ANGLE})} to let ANGLE know - that the shared context \textit{\color{coolblack}is not ANGLE but native} - context!} - \end{itemize} - \vspace{-0.2cm} - + \vspace{0.5cm} \begin{table}[t] \centering \begin{tabular}{l} @@ -657,20 +652,16 @@ program} \setbeamercolor{block body}{bg=white} \begin{center} - \begin{block}{\tiny{Extension - \texttt{EGL\_NATIVE\_SHARED\_CONTEXT\_ANGLE}:}} + \begin{block}{\tiny{What happens inside ANGLE + (with \texttt{EGL\_NATIVE\_SHARED\_CONTEXT\_ANGLE}):}} \vspace{0.2cm} \tiny{ \begin{table}[h] \centering - Worked on the extension implementation (draft state, there are - bugs).\\ \begin{tabular}{l} - \\ - \textbf{Concept:}\\ \begin{adjustbox}{max width=\textwidth} \adjustbox{valign=t}{\includegraphics[scale=0.2]{data/shared_ctx3.png}} - \end{adjustbox}\\ + \end{adjustbox} \end{tabular} \end{table} } @@ -772,25 +763,29 @@ program} \setbeamercolor{block body}{bg=white} \setbeamertemplate{itemize/enumerate body begin}{\tiny} - \begin{block}{\scriptsize{How the kernel DMA buffers would help us avoid copying - the WebGL texture data?}} - - \begin{center} - \begin{itemize} - \item Each texture is backed by a Linux kernel dma\_buffer. - \item Multiple textures can use the same dma buffer as backing - storage if they meet some requirements. - \item We can export the file descriptor of one buffer from one - driver and use it to access the buffer from the other - driver. - \item So we can export the FD that corresponds to the compositor - texture, import it in WebGL when we create the render target - and when the WebGL texture is filled, the compositor texture - will be also filled, as they share the backing storage! - \end{itemize} - \end{center} - \end{block} - \begin{block}{\scriptsize{EGL and GL extensions that can be used:}} +% \begin{comment} +% \begin{block}{\scriptsize{How the kernel DMA buffers would help us avoid copying +% the WebGL texture data?}} +% +% \begin{center} +% \begin{itemize} +% \item Each texture is backed by a Linux kernel dma\_buffer. +% \item Multiple textures can use the same dma buffer as backing +% storage if they meet some requirements. +% \item We can export the file descriptor of one buffer from one +% driver and use it to access the buffer from the other +% driver. +% \item So we can export the fd that corresponds to the compositor +% texture, import it in WebGL when we create the render target +% and when the WebGL texture is filled, the compositor texture +% will be also filled, as they share the backing storage! +% \end{itemize} +% \end{center} +% \end{block} +% \end{comment} + + \begin{block}{\scriptsize{EGL and GL extensions to share content across + drivers using dma\_buf buffers:}} \begin{center} \begin{itemize} \item @@ -811,6 +806,21 @@ program} \end{itemize} \end{center} \end{block} + \begin{block}{\scriptsize{Example Programs:}} + \begin{center} + \begin{itemize} + \item Associating two textures with the contents of the same + buffer without copy taking place.\\ + Blog post: \url{https://eleni.mutantstargoat.com/hikiko/egl-dma-1/} \\ + Code: \url{https://gistof.com/dma-egl-version} + \item Sharing texture data between ANGLE and the native system + driver using DMA buffers and EGL. \\ + Blog post: \url{https://eleni.mutantstargoat.com/hikiko/angle-dma/}\\ + Code: \url{https://gistof.com/dmaangleeglversion} + \end{itemize} + \end{center} + \end{block} + \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -821,29 +831,16 @@ program} \setbeamercolor{block body}{bg=white}{\scriptsize} \setbeamertemplate{itemize/enumerate body begin}{\tiny} - \begin{block}{\scriptsize{I've written an example:}} - \begin{center} - \begin{itemize} - \item First using EGL!\\ - Blog post: \url{https://eleni.mutantstargoat.com/hikiko/egl-dma-1/} \\ - Code: \url{https://gistof.com/dma-egl-version} - \item Then using a native EGL context and a context from ANGLE!\\ - Blog post: \url{https://eleni.mutantstargoat.com/hikiko/angle-dma/}\\ - Code: \url{https://gistof.com/dmaangleeglversion} - \end{itemize} - \end{center} - \end{block} - \vspace{-0.3cm} \begin{block}{\scriptsize{Snippet from the exporter:}} - \vspace{-0.1cm} \tiny{ \begin{table}[t] \centering \begin{tabular}{l} {\color{coolblack}Exporting a dma buffer from a texture \texttt{texA}:}\\ + \\ \begin{adjustbox}{max width=\textwidth} - \adjustbox{valign=t}{\includegraphics[height=4cm]{data/dma_export_and_struct.png}} + \adjustbox{valign=t}{\includegraphics[height=6.5cm]{data/dma_export_and_struct.png}} \end{adjustbox}\\ \end{tabular} \end{table} @@ -886,14 +883,13 @@ program} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{frame} - \frametitle{Test program} + \frametitle{Final test program (WORKS!)} \begin{block}{\scriptsize{An exporter-importer that uses ANGLE and native EGL}} \setbeamertemplate{itemize/enumerate body begin}{\scriptsize} \begin{itemize} \itemsep0.3cm - \itemsep0.2cm \item First context is EGL/OpenGL like the one in main graphics pipeline. \item Second is ANGLE with EGL/GLESv2 backend like the one in @@ -931,7 +927,6 @@ program} \begin{frame}[fragile,c] \frametitle{What if WebGL and Graphics pipeline were separate processes?} - \setbeamertemplate{blocks}[rounded] \vspace{0.3cm} \center{ @@ -939,6 +934,7 @@ program} pipeline in two processes. (Žan Doberšek)}}} \vspace{0.5cm} + \setbeamercolor{block body}{bg=white}{\scriptsize} \begin{block}{Can we still use shared DMA buffers?} \footnotesize{ @@ -1036,5 +1032,32 @@ program} \end{frame} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section[TheEnd]{Closing} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{frame}[plain] +\begin{minipage}[b][0.6\textheight]{\linewidth} + \begin{picture}(0, 0) + \put(0, -76){% + \pgfuseimage{igaliabglight} + } + \begin{minipage}[b][0.4\textheight]{\linewidth} + \begin{figure} + \includegraphics[scale=0.6]{data/mesa.png} + \end{figure} + \end{minipage} + \put(-200, 0) { + \hfill \huge{\textbf{\color{coolblack}Thank you!}}\\ + } + \end{picture} +\end{minipage} +\end{frame} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \end{document} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%