1 \documentclass[usenames,dvipsnames]{beamer}
2 \usepackage[font=small,skip=-1pt]{caption}
4 \usepackage{color, colortbl}
11 \usepackage{tgpagella}
12 \usepackage[utf8]{inputenc}
14 \usepackage{tabularx, array, booktabs}
18 \usepackage{adjustbox}
20 \newcommand\topalign[1]{%
22 \raisebox{\dimexpr-\ht0+\dp0\relax}{\usebox0}}
24 \definecolor{blond}{rgb}{0.98, 0.94, 0.75}
25 \definecolor{beige}{rgb}{0.96, 0.96, 0.86}
26 \definecolor{mGreen}{rgb}{0,0.6,0}
27 \definecolor{mGray}{rgb}{0.5,0.5,0.5}
28 \definecolor{mPurple}{rgb}{0.58,0,0.82}
29 \definecolor{bgcolor}{rgb}{0.8,0.8,0.8}
30 \definecolor{afblue}{rgb}{0.46, 0.64, 0.76}
31 \definecolor{coolblack}{rgb}{0.0, 0.18, 0.39}
32 \definecolor{paleaqua}{rgb}{0.74, 0.83, 0.9}
33 \definecolor{platinum}{rgb}{0.9, 0.89, 0.89}
34 \definecolor{whitesmoke}{rgb}{0.96, 0.96, 0.96}
35 \definecolor{carolinablue}{rgb}{0.6, 0.73, 0.89}
36 \definecolor{amber}{rgb}{1.0, 0.75, 0.0}
37 \definecolor{deepjunglegreen}{rgb}{0.0, 0.29, 0.29}
38 \definecolor{mediumred-violet}{rgb}{0.73, 0.2, 0.52}
39 \definecolor{babypink}{rgb}{0.96, 0.76, 0.76}
40 \definecolor{beaublue}{rgb}{0.74, 0.83, 0.9}
41 \definecolor{bananayellow}{rgb}{1.0, 0.88, 0.21}
42 \definecolor{bananamania}{rgb}{0.98, 0.91, 0.81}
44 \lstdefinestyle{CStyle}{
45 language=C++, % choose the language of the code
46 % basicstyle=\footnotesize, % the size of the fonts that are used for the code
47 basicstyle=\tt\color{afblue},
48 breakatwhitespace=false,
50 backgroundcolor=\color{bgcolor}, % choose the background color. You must add \usepackage{color}
51 showspaces=false, % show spaces adding particular underscores
52 showstringspaces=false, % underline spaces within strings
53 showtabs=false, % show tabs within strings adding particular underscores
54 frame=single, % adds a frame around the code
55 tabsize=2, % sets default tabsize to 2 spaces
56 captionpos=b, % sets the caption-position to bottom
57 breaklines=true, % sets automatic line breaking
58 breakatwhitespace=false, % sets if automatic breaks should only happen at whitespace
59 commentstyle=\color{mGreen},
60 keywordstyle=\color{magenta},
61 stringstyle=\color{mPurple},
62 rulesepcolor=\color{gray},
63 rulecolor=\color{black},
66 \setmainfont{Noto Sans} % substitute with any font that exists on your system
67 \setsansfont{Noto Sans} % substitute with any font that exists on your system
68 \setmonofont{Noto Sans Mono Medium} % substitute with any font that exists on your system
71 \useoutertheme{infolines}
74 \captionsetup[figure]{labelformat=empty}
76 \addtobeamertemplate{headline}{}{\vskip2pt}
77 \addtobeamertemplate{headline}{}{%
78 \begin{textblock*}{5mm}(.9\textwidth,-0.6cm)
79 \includegraphics[height=0.67cm]{data/igalia-logo.png}
82 \definecolor{links}{rgb}{0.1, 0.3, 0.6}
83 \hypersetup{colorlinks,linkcolor=,urlcolor=links}
85 \pgfdeclareimage[height=\paperheight]{igaliabglight}{data/igalia_bg_light.eps}
86 \pgfdeclareimage[height=\paperheight]{igaliabg}{data/igaliabg.eps}
88 %\setbeamertemplate{title page}{
89 % \begin{picture}(-90, 180)
91 % \pgfuseimage{igaliabg}
95 % \begin{minipage}[b][36mm][t]{240mm}
96 % \usebeamerfont{title}{\inserttitle\par}
97 % \usebeamerfont{author}{\insertauthor\par}
98 % \usebeamerfont{title}{\insertinstitute\par}
104 \setbeamertemplate{navigation symbols}{}
105 \setbeamertemplate{title page}{
108 \pgfuseimage{igaliabg}
112 \begin{minipage}[b][38mm][t]{220mm}
113 \usebeamerfont{title}{\inserttitle\par}
114 \usebeamerfont{author}{\insertauthor\par}
119 \usebeamerfont{date}{\huge{{\insertdate}}\par}
124 \setbeamertemplate{itemize items}[triangle]
125 \setbeamertemplate{itemize subitem}[circle]
126 \setbeamerfont{frametitle}{size=\small}
128 \setbeamertemplate{blocks}[default]
129 \setbeamercolor{block title}{fg=amber,bg=black}
131 \title{\textbf{OpenGL and Vulkan Interoperability}}
132 \author[Eleni Maria Stea <estea@igalia.com>]{\small{Eleni Maria Stea
133 <estea@igalia.com>}\\\\\includegraphics{data/igalia.eps}}
140 \tableofcontents[currentsection]
144 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
146 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
157 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
159 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
160 \section[Introduction]{OpenGL interoperability extensions}
161 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
163 \begin{frame}[fragile,c]
164 \frametitle{Interoperability Concept}
167 \textbf{\color{coolblack}{INTEROPERABILITY}}
171 % The idea is to avoid unnecessary allocations and conversions when we
172 % exchange texture and buffer data across APIs.\\
176 \begin{tabularx}{\textwidth}{X}
179 \color{paleaqua}{EXT\_external\_objects(\_fd) extensions enable:}
184 \small{· \color{coolblack}{\textbf{Allocation} of resources (textures,
185 buffers) from Vulkan and {\textbf{sharing}} of those resources from both APIs}
191 \small{· \color{coolblack}{\textbf{Synchronization} of the access to
192 shared resources between APIs.}}\\
199 \footnotesize{\textbf{Example:} a VR compositor where the left and right eye
200 images are allocated and displayed by Vulkan but their contents are filled by
204 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
206 \begin{frame}[fragile]
207 \frametitle{OpenGL extensions for interoperability on Linux}
209 \center{\textbf{\color{coolblack}{OpenGL Extensions (Linux)}}}
212 \setbeamertemplate{itemize/enumerate body begin}{\footnotesize}
213 \setbeamertemplate{itemize/enumerate subbody begin}{\tiny}
214 \setbeamertemplate{itemize/enumerate subsubbody begin}{\tiny}
216 \setbeamertemplate{itemize items}[triangle]
217 \setbeamertemplate{blocks}[rounded][shadow]
219 \begin{block}{\color{afblue}{\footnotesize\textbf{EXT\_external\_objects\_fd
220 (EXT\_memory\_object\_fd, EXT\_semaphore\_fd)}:}}
222 \item enables an OpenGL application to import a memory object or
223 semaphore from POSIX file descriptor external handles
229 \begin{block}{\color{afblue}{\footnotesize\textbf{EXT\_external\_objects
230 (EXT\_memory\_object, EXT\_semaphore)}:}}
232 \item enables an OpenGL application to
233 create OpenGL objects corresponding to Vulkan objects (textures,
234 buffers, semaphores) and synchronize access to shared objects
236 \item {extends existing GL calls that set and query properties}
241 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
242 \section[Interoperability on Mesa]{Additions to Mesa and Piglit}
243 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
245 \frametitle{Igalia's contributions}
247 \setbeamertemplate{blocks}[rounded]
249 \normalsize{\textbf{\color{coolblack}{Work on the feature}}}
256 Igalia contributed to the implementation of the interoperability
257 extensions for different {\color{deepjunglegreen}\textbf{Mesa
264 \begin{block}{Piglit (drivers testing framework)}
266 As there were \textbf{no conformance tests} available for the
267 extensions, we've written a Vulkan framework for
268 {\color{coolblack}\textbf{Piglit}} and Vulkan/GL tests that cover
270 EXT\_external\_objects(\_fd) use cases.
275 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
278 \frametitle{Additions to Mesa (the details)}
281 \normalsize{\textbf{\color{coolblack}{Contributions to Mesa
286 \begin{tabularx}{\textwidth}{|l|X|l|}
289 Driver & Igalia's Contributions & Status \\
293 iris & \textbf{\color{coolblack}implemented} EXT\_external\_objects,
294 EXT\_external\_objects\_fd & \cellcolor{babypink}{under review (MR
296 \rowcolor{whitesmoke}
297 freedreno & \textbf{\color{coolblack}implemented} EXT\_external\_objects,
298 EXT\_external\_objects\_fd & \cellcolor{green}{upstream} \\
300 radeonsi & \textbf{\color{coolblack}fixes} to the already implemented feature &
301 \cellcolor{bananamania}{work in
302 progress (WIP MR !6364)} \\
303 \rowcolor{whitesmoke}
304 i965 & helped with the \textbf{\color{coolblack}review}, patches & \cellcolor{babypink}{under review
312 \normalsize{\textbf{\color{coolblack}{Contributors, reviewers,
313 people who helped!}}}
318 \begin{tabularx}{\textwidth}{|l|X|X|}
321 Driver & Patches & Reviews, Comments, Advice\\
325 iris & Juan A. Suárez Romero, Eleni Maria Stea, Tapani Pälli, Eduardo Lima Mitev
326 & Tapani Pälli, Rohan Garg, Eric Engestrom, Kenneth Graunke,
327 Jason Ekstrand, Oscar Barenys, Daniel Stone, Matt Turner, Tomeu Vizoso \\
328 \rowcolor{whitesmoke}
329 freedreno & Eduardo Lima Mitev, Hyunjun Ko & Rob
330 Clark, Marek Olšák, Jonathan Marek, Rohan Garg\\
332 radeonsi & The feature was implemented by
333 AMD a few years ago and we are mostly working on fixes (WIP).
334 & feedback from: Bas Nieuwenhuizen, Marek Olšák \\
335 \rowcolor{whitesmoke}
336 i965 & Rohan Garg, Juan A. Suárez Romero, Tapani Pälli
337 & Tomeu Vizoso, Eleni Maria Stea, Oscar Barenys \\
345 \item {The information above was accurate at the beginning of
346 September when I pre-recorded this presentation! Apologies if
347 I've not included someone or something!}
352 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
354 \begin{frame}[fragile]
355 \frametitle{Additions to Piglit (the details) I}
358 \normalsize{\textbf{\color{coolblack}{Contributions to Piglit I }}}
362 \begin{center}\textbf{Reusing color images:}\end{center}
365 \begin{tabularx}{\textwidth}{|l|X|c|l|}
368 Test name & Description
377 \item[\textbullet] \textbf{\color{coolblack}Vulkan:} allocates images of
378 different formats and tiling modes
379 \item[\textbullet] \textbf{\color{coolblack}{OpenGL:}} fills them with
381 \item[\textbullet] \textbf{\color{coolblack}{Expectation:}} green screen
384 \adjustbox{valign=t, margin=1ex, padding=1ex}{\includegraphics[height=1cm]{shots/image_overwrite.png}} & \cellcolor{green}{upstream}\\
386 \rowcolor{whitesmoke}
391 \item[\textbullet] \textbf{\color{coolblack}Vulkan:} creates
392 an image and fills it with colored bars
393 \item[\textbullet] \textbf{\color{coolblack}{OpenGL:}} draws
394 the image on screen using semaphores to synchronize
396 \item[\textbullet] \textbf{\color{coolblack}{Expectation:}}
397 a stripped image on screen
400 \adjustbox{valign=t, margin=1ex,
401 padding=1ex}{\includegraphics[height=1cm]{shots/image_display.png}}
402 & \cellcolor{green}{upstream}\\
405 vk-image-display-overwrite &
409 \item[\textbullet] \textbf{\color{coolblack}Vulkan:} creates
410 an image and fills it
411 \item[\textbullet] \textbf{\color{coolblack}{OpenGL:}}
412 overwrites that image with another stripped pattern
413 \item[\textbullet] \textbf{\color{coolblack}Vulkan:}
414 reads back the contents of the image
415 \item[\textbullet] \textbf{\color{coolblack}{Expectation:}}
416 the modified contents to be read back
419 \adjustbox{valign=t, margin=1ex,
420 padding=1ex}{\includegraphics[height=1cm]{shots/image_display_overwrite.png}}
421 & \cellcolor{green}{upstream}\\
428 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
430 \begin{frame}[fragile]
431 \frametitle{Additions to Piglit (the details) II}
434 \normalsize{\textbf{\color{coolblack}{Contributions to Piglit II }}}
438 \begin{center}\textbf{Reusing the depth and stencil buffer:}\end{center}
440 \begin{tabularx}{\textwidth}{|l|X|c|l|}
443 Test name & Description
452 \item[\textbullet] \textbf{\color{coolblack}Vulkan:}
453 creates a depth buffer pattern
454 \item[\textbullet] \textbf{\color{coolblack}{OpenGL:}}
455 draws a fullscreen quad at a greater depth
456 \item[\textbullet] \textbf{\color{coolblack}{Expectation:}}
457 quad partially obscured
460 \adjustbox{valign=t, margin=1ex,
461 padding=1ex}{\includegraphics[height=1cm]{shots/depth.png}}
462 & \cellcolor{babypink}{under review}\\
464 \rowcolor{whitesmoke}
469 \item[\textbullet] \textbf{\color{coolblack}Vulkan:}
470 creates a pattern in the stencil buffer
471 \item[\textbullet] \textbf{\color{coolblack}{OpenGL:}}
472 draws a blue fullscreen quad with stencil testing
473 \item[\textbullet] \textbf{\color{coolblack}{Expectation:}}
474 quad masked by stencil pattern
477 \adjustbox{valign=t, margin=1ex,
478 padding=1ex}{\includegraphics[height=1cm]{shots/stencil.png}}
479 & \cellcolor{babypink}{under review}\\
486 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
488 \begin{frame}[fragile]
489 \frametitle{Additions to Piglit (the details) III}
492 \normalsize{\textbf{\color{coolblack}{Contributions to Piglit III }}}
496 \begin{center}\textbf{Reusing a pixel buffer:}\end{center}
499 \begin{tabularx}{\textwidth}{|l|X|c|l|}
502 Test name & Description
511 \item[\textbullet] \textbf{\color{coolblack}Vulkan:}
512 creates and fills an image with color bars and copies
513 its content to a buffer
514 \item[\textbullet] \textbf{\color{coolblack}{OpenGL:}}
515 uses the buffer as pixel storage for a texture and
517 \item[\textbullet] \textbf{\color{coolblack}{Expectation:}}
518 colored bars on screen
521 \adjustbox{valign=t, margin=1ex,
522 padding=1ex}{\includegraphics[height=1cm]{shots/image_display.png}}
523 & \cellcolor{green}{upstream}\\
525 \rowcolor{whitesmoke}
526 vk-pix-buf-update-errors &
530 \item[\textbullet] \textbf{\color{coolblack}{OpenGL:}}
531 attempts to overwrite the buffer
532 \item[\textbullet] \textbf{\color{coolblack}{Expectation:}}
533 error is generated, the buffer remains unchanged
536 \adjustbox{valign=t, margin=1ex,
537 padding=1ex}{\includegraphics[height=1cm]{shots/image_display.png}}
538 & \cellcolor{blond}{work in progress}\\
545 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
547 \begin{frame}[fragile]
548 \frametitle{Additions to Piglit (the details) IV}
551 \normalsize{\textbf{\color{coolblack}{Contributions to Piglit IV }}}
555 \begin{center}\textbf{Reusing a vertex buffer:}\end{center}
557 \begin{tabularx}{\textwidth}{|l|X|l|l|}
560 Test name & Description
565 vk-vert-buf-update-errors &
569 \item[\textbullet] \textbf{\color{coolblack}Vulkan:}
570 creates a vertex buffer and fills it with only the odd
571 quads of a chess board pattern
572 \item[\textbullet] \textbf{\color{coolblack}{OpenGL:}}
573 clears the screen to red and draws the vertex buffer in
575 \item[\textbullet] \textbf{\color{coolblack}OpenGL:}
576 attempts to overwrite the VBO
577 \item[\textbullet] \textbf{\color{coolblack}{Expectation:}}
578 a red-blue chess board pattern on screen and an invalid
579 operation error is generated
582 \adjustbox{valign=t, margin=1ex,
583 padding=1ex}{\includegraphics[height=1cm]{shots/vert_buf_update_errors.png}}
584 & \cellcolor{blond}{work in progress}\\
586 \rowcolor{whitesmoke}
591 \item[\textbullet] \textbf{\color{coolblack}Vulkan:}
593 \item[\textbullet] \textbf{\color{coolblack}{OpenGL:}}
594 same as above minus the invalid overwrite test
595 \item[\textbullet] \textbf{\color{coolblack}Vulkan:}
596 reuses the VBO in a renderpass to draw the chess board
597 \item[\textbullet] \textbf{\color{coolblack}{Expectation:}}
601 \adjustbox{valign=t, margin=1ex,
602 padding=1ex}{\includegraphics[height=1cm]{shots/vert_buf_update_errors.png}}
604 \cellcolor{blond}{work in progress}\\
611 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
613 \begin{frame}[fragile]
614 \frametitle{Additions to Piglit (the details) V}
616 \normalsize{\textbf{\color{coolblack}{Contributions to Piglit V }}}\\
618 \scriptsize{Many people helped us with the work on the
624 \begin{tabularx}{\textwidth}{|l|X|}
627 Contributors & Contributions \\
631 Eleni Maria Stea & tests, Vulkan framework code \\
632 \rowcolor{whitesmoke}
633 Juan A. Suárez Romero & contributions to the framework, and
634 vk-image-overwrite, testing \\
636 Tapani Pälli (\textit{\color{coolblack}{many thanks!}}) & reviews, testing and patches
638 \rowcolor{whitesmoke}
639 Bas Nieuwenhuizen & framework patch to support dedicated memory \\
641 Topi Pohjolainen & we've used some old patches of him as an example
642 at the very beginning\\
649 \item Also thanks to Germán Poo Caamaño who helped tidying up the
650 initial mess of the Vulkan framework commits.
651 \item Again, this information was accurate when I prepared and
652 pre-recorded the slides. Sorry if I am missing someone or something!
656 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
658 \begin{frame}[fragile]
659 \frametitle{Piglit Results}
660 \begin{block}{\begin{center}Conclusions from running the tests:\end{center}}
663 \item Most of the new Piglit tests are passing in the mesa drivers
664 mentioned before (iris, freedreno, radeonsi, i965).\\
666 \item Unfortunately Mesa does not yet support the depth and stencil
667 buffer exchange. The only implementation I 've found that currently
668 supports this feature is the Nvidia proprietary driver.\\
670 \item radeonsi needs some fixes to better support buffers and
671 optimal tiling (WIP).
678 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
680 %\begin{frame}[fragile]
681 % \frametitle{vk-image-overwrite}
682 % \begin{block}{vk-image-overwrite}
683 % \lstinline[language=C++, style=CStyle]{glCreateMemoryObjectsEXT(1, gl_mem_obj); }
687 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
688 \section[Q \& A]{Questions}
689 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
692 \frametitle{Questions?}
693 {\fontsize{8}{7}\selectfont
696 \includegraphics[scale=0.04]{data/qmark.png}
699 {\large E-mail: {\color{coolblack}estea@igalia.com}}\\
700 {\large IRC/Freenode: {\color{coolblack}hikiko}}\\
705 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
706 \section[References]{References}
707 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
708 %\setbeamertemplate{bibliography entry title}{}
709 %\setbeamertemplate{bibliography entry location}{}
710 %\setbeamertemplate{bibliography entry note}{}
711 \setbeamerfont{bibliography item}{size=\footnotesize}
712 \setbeamerfont{bibliography entry author}{size=\footnotesize}
713 \setbeamerfont{bibliography entry title}{size=\footnotesize}
714 \setbeamerfont{bibliography entry year}{size=\footnotesize}
715 \setbeamerfont{bibliography entry note}{size=\footnotesize}
717 \begin{frame}[allowframebreaks]
719 \bibliographystyle{unsrt}
720 \bibliography{bib/references.bib}
724 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
727 \begin{minipage}[b][0.6\textheight]{\linewidth}
728 \begin{picture}(0, 0)
730 \pgfuseimage{igaliabglight}
732 \begin{minipage}[b][0.4\textheight]{\linewidth}
734 \includegraphics[scale=0.6]{data/mesa.png}
738 \hfill \huge{\textbf{\color{coolblack}Thank you!}}\\
744 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
746 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%