\documentclass[usenames,dvipsnames]{beamer}
\usepackage[font=small,skip=-1pt]{caption}
\usepackage{xcolor}
\usepackage{color, colortbl}
\usepackage{caption}
\usepackage{listings}
\usepackage{graphicx}
\usepackage{hyperref}
\usepackage{comment}
\usepackage{textpos}
\usepackage{tgpagella}
\usepackage[utf8]{inputenc}
\usepackage{fontspec}
\usepackage{tabularx, array, booktabs}
\usepackage{cite}
\usepackage{verbatim}
\usepackage{comment}
\usepackage{adjustbox}

\newcommand\topalign[1]{%
  \setbox0\hbox{#1}%
  \raisebox{\dimexpr-\ht0+\dp0\relax}{\usebox0}}

\definecolor{blond}{rgb}{0.98, 0.94, 0.75}
\definecolor{beige}{rgb}{0.96, 0.96, 0.86}
\definecolor{mGreen}{rgb}{0,0.6,0}
\definecolor{mGray}{rgb}{0.5,0.5,0.5}
\definecolor{mPurple}{rgb}{0.58,0,0.82}
\definecolor{bgcolor}{rgb}{0.8,0.8,0.8}
\definecolor{afblue}{rgb}{0.46, 0.64, 0.76}
\definecolor{coolblack}{rgb}{0.0, 0.18, 0.39}
\definecolor{paleaqua}{rgb}{0.74, 0.83, 0.9}
\definecolor{platinum}{rgb}{0.9, 0.89, 0.89}
\definecolor{whitesmoke}{rgb}{0.96, 0.96, 0.96}
\definecolor{carolinablue}{rgb}{0.6, 0.73, 0.89}
\definecolor{amber}{rgb}{1.0, 0.75, 0.0}
\definecolor{deepjunglegreen}{rgb}{0.0, 0.29, 0.29}
\definecolor{mediumred-violet}{rgb}{0.73, 0.2, 0.52}
\definecolor{babypink}{rgb}{0.96, 0.76, 0.76}
\definecolor{beaublue}{rgb}{0.74, 0.83, 0.9}
\definecolor{bananayellow}{rgb}{1.0, 0.88, 0.21}
\definecolor{bananamania}{rgb}{0.98, 0.91, 0.81}

\lstdefinestyle{CStyle}{
	language=C++,                % choose the language of the code
%	basicstyle=\footnotesize,       % the size of the fonts that are used for the code
	basicstyle=\tt\color{afblue},
    breakatwhitespace=false,         
    breaklines=true,                 
	backgroundcolor=\color{bgcolor},  % choose the background color. You must add \usepackage{color}
	showspaces=false,               % show spaces adding particular underscores
	showstringspaces=false,         % underline spaces within strings
	showtabs=false,                 % show tabs within strings adding particular underscores
	frame=single,           % adds a frame around the code
	tabsize=2,          % sets default tabsize to 2 spaces
	captionpos=b,           % sets the caption-position to bottom
	breaklines=true,        % sets automatic line breaking
	breakatwhitespace=false,    % sets if automatic breaks should only happen at whitespace
    commentstyle=\color{mGreen},
    keywordstyle=\color{magenta},
    stringstyle=\color{mPurple},
	rulesepcolor=\color{gray},
    rulecolor=\color{black},
}

\setmainfont{Noto Sans} % substitute with any font that exists on your system
\setsansfont{Noto Sans} % substitute with any font that exists on your system
\setmonofont{Noto Sans Mono Medium} % substitute with any font that exists on your system

\usetheme{Warsaw}
\useoutertheme{infolines}
\usecolortheme{crane}

\captionsetup[figure]{labelformat=empty}

\addtobeamertemplate{headline}{}{\vskip2pt}
\addtobeamertemplate{headline}{}{%
	\begin{textblock*}{5mm}(.9\textwidth,-0.6cm)
	\includegraphics[height=0.67cm]{data/igalia-logo.png}
\end{textblock*}}

\definecolor{links}{rgb}{0.1, 0.3, 0.6}
\hypersetup{colorlinks,linkcolor=,urlcolor=links}

\pgfdeclareimage[height=\paperheight]{igaliabglight}{data/igalia_bg_light.eps}
\pgfdeclareimage[height=\paperheight]{igaliabg}{data/igaliabg.eps}

%\setbeamertemplate{title page}{
%        \begin{picture}(-90, 180)
%			\put(-200, -74){%
%                \pgfuseimage{igaliabg}
%            }
%
%            \put(55,19){%
%				\begin{minipage}[b][36mm][t]{240mm}
%                    \usebeamerfont{title}{\inserttitle\par}
%                    \usebeamerfont{author}{\insertauthor\par}
%                    \usebeamerfont{title}{\insertinstitute\par}
%                \end{minipage}
%            }
%		\end{picture}
%}

\setbeamertemplate{navigation symbols}{}
\setbeamertemplate{title page}{
        \begin{picture}(0,0)
            \put(-30,-164){%
                \pgfuseimage{igaliabg}
            }

            \put(0,-110.7){%
                \begin{minipage}[b][38mm][t]{220mm}
                    \usebeamerfont{title}{\inserttitle\par}
                    \usebeamerfont{author}{\insertauthor\par}
                \end{minipage}
            }

			\put(240, -138){
				\usebeamerfont{date}{\huge{{\insertdate}}\par}
				}
		\end{picture}
}

\setbeamertemplate{itemize items}[triangle]
\setbeamertemplate{itemize subitem}[circle]
\setbeamerfont{frametitle}{size=\small}

\setbeamertemplate{blocks}[default]
\setbeamercolor{block title}{fg=amber,bg=black}

\title{\textbf{OpenGL and Vulkan Interoperability}}
\author[Eleni Maria Stea <estea@igalia.com>]{\small{Eleni Maria Stea
<estea@igalia.com>}\\\\\includegraphics{data/igalia.eps}}
\date{XDC 2020}

\AtBeginSection[]
{
  \begin{frame}
    \frametitle{Outline}
	\tableofcontents[currentsection]
  \end{frame}
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}[plain]
\titlepage
\end{frame}

\begin{frame}
	\frametitle{Outline}
	\tableofcontents
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section[Introduction]{OpenGL and Vulkan interoperability extensions}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}[fragile,c]
	\frametitle{OpenGL and Vulkan Interoperability Concept}

	\begin{center}
	\textbf{\color{coolblack}{INTEROPERABILITY}}
	\vspace{0.5cm}

%
%	The idea is to avoid unnecessary allocations and conversions when we
%	exchange texture and buffer data across APIs.\\
%

	\vspace{0.5cm}
	\begin{tabular}{l}
		\rowcolor{coolblack}
		\multicolumn{1}{c}{
		\color{paleaqua}{EXT\_external\_objects(\_fd) extensions allow:}
		}\\
		\rowcolor{platinum}
		\\
		\rowcolor{platinum}
		\small{· \color{coolblack}{\textbf{Allocating} the resources (textures,
		buffers) \textbf{once} from Vulkan.}}\\
		\rowcolor{platinum}
		\small{· \color{coolblack}{\textbf{Reusing} them \textbf{several times} from
		both APIs.}}\\
		\rowcolor{platinum}
		\small{· \color{coolblack}{\textbf{Synchronizing} the APIs access to
		the resources.}}\\
		\rowcolor{platinum}
		\\
	\end{tabular}

		\vspace{0.5cm}
	\end{center}
	\footnotesize{\textbf{Example:} a Vulkan VR compositor could allocate the
	left and right eye images but let other OpenGL processes to generate and
	write their texture data.}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}[fragile]
	\frametitle{OpenGL extensions for interoperability}

	\center{\textbf{\color{coolblack}{OpenGL EXTENSIONS}}}
	\vspace{0.2cm}

	\setbeamertemplate{itemize/enumerate body begin}{\footnotesize}
	\setbeamertemplate{itemize/enumerate subbody begin}{\tiny}
	\setbeamertemplate{itemize/enumerate subsubbody begin}{\tiny}

	\setbeamertemplate{itemize items}[triangle]
	\setbeamertemplate{blocks}[rounded][shadow]

	\begin{block}{\color{afblue}{\footnotesize\textbf{EXT\_external\_object\_fd
		(EXT\_memory\_object\_fd, EXT\_semaphore\_fd)}:}}
		\begin{itemize}
			\item enables an OpenGL application to import a memory object or
				semaphore from POSIX file descriptor external handles
		\end{itemize}
	\end{block}

	\vspace{0.2cm}

	\begin{block}{\color{afblue}{\footnotesize\textbf{EXT\_external\_object
		(EXT\_memory\_object, EXT\_semaphore)}:}}
		\begin{itemize}
			\item {functions to create GL objects, textures and buffers
				from Vulkan memory}
			\item {functions to create GL semaphore objects that
				correspond to Vulkan ones}
			\item {functions for synchronization}
			\item {extends existing GL calls that set and query properties}
		\end{itemize}
	\end{block}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section[Interoperability on Mesa]{Additions to Mesa and Piglit}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}
	\frametitle{Igalia's contributions}

	\setbeamertemplate{blocks}[rounded]
	\center{
		\normalsize{\textbf{\color{coolblack}{Work on the feature}}}
		}

	\vspace{0.5cm}

	\begin{block}{Mesa}
		\footnotesize{
			Igalia contributed to the implementation of the interoperability
			extensions for different {\color{deepjunglegreen}\textbf{Mesa
			drivers}}.
			}
	\end{block}

	\vspace{0.5cm}

	\begin{block}{Piglit (drivers testing framework)}
		\footnotesize{
			As there were \textbf{no CTS}, we've written a Vulkan framework for
			{\color{coolblack}\textbf{Piglit}} and Vulkan/GL tests that cover the most common
			EXT\_external\_objects(\_fd) use cases.
			}
	\end{block}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
	\frametitle{Additions to Mesa (the details)}

	\center{
		\normalsize{\textbf{\color{coolblack}{Contributions to Mesa
	drivers}}}
	}
	\tiny{
		\begin{table}[t]
			\begin{tabularx}{\textwidth}{|l|X|l|}
				\hline 
				\rowcolor{paleaqua}
				Driver & Igalia's Contributions & Status \\
				\hline 
				\hline 
				\rowcolor{platinum}
				iris & \textbf{\color{coolblack}implemented} EXT\_external\_objects,
				EXT\_external\_objects\_fd & \cellcolor{babypink}{under review (MR
				!4337)}\\
				\rowcolor{whitesmoke}
				freedreno & \textbf{\color{coolblack}implemented} EXT\_external\_objects,
				EXT\_external\_objects\_fd & \cellcolor{green}{upstream} \\
				\rowcolor{platinum}
				radeonsi & \textbf{\color{coolblack}fixes} to the already implemented feature &
				\cellcolor{bananamania}{work in
				progress (WIP MR !6364)} \\
				\rowcolor{whitesmoke}
				i965 & helped with the \textbf{\color{coolblack}review}, patches & \cellcolor{babypink}{under review
				(Draft MR !5594)}\\
				\hline 
			\end{tabularx}
		\end{table}
	}

	\center{
		\normalsize{\textbf{\color{coolblack}{Contributors, reviewers,
		people who helped!}}}
	}

	\tiny{
		\begin{table}[ht]
			\begin{tabularx}{\textwidth}{|l|X|X|}
				\hline 
				\rowcolor{paleaqua}
				Driver & Patches & Reviews, Comments, Advice\\
				\hline 
				\hline 
				\rowcolor{platinum}
				iris & Juan A. Suárez Romero, Eleni Maria Stea, Tapani Pälli, Eduardo Lima Mitev
				& Tapani Pälli, Rohan Garg, Eric Engestrom, Kenneth Graunke,
				Jason Ekstrand, Oscar Barenys, Daniel Stone, Matt Turner, Tomeu Vizoso \\
				\rowcolor{whitesmoke}
				freedreno & Eduardo Lima Mitev, Hyunjun Ko & Rob
				Clark, Marek Olšák, Jonathan Marek, Rohan Garg\\
				\rowcolor{platinum}
				radeonsi & The feature was implemented by
				AMD a few years ago and we are mostly working on fixes (WIP).	
				& feedback from: Bas Nieuwenhuizen, Marek Olšák \\
				\rowcolor{whitesmoke}
				i965 & Rohan Garg, Juan A. Suárez Romero, Tapani Pälli 
				& Tomeu Vizoso, Eleni Maria Stea, Oscar Barenys \\
				\hline 
			\end{tabularx}
		\end{table}
	}

	\tiny{
		\begin{itemize}
			\item {The information above was accurate at the beginning of
				September when I pre-recorded this presentation! Apologies if
				I've not included someone or something!}
		\end{itemize}
	}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}[fragile]
	\frametitle{Additions to Piglit (the details) I}

	\begin{center}
		\normalsize{\textbf{\color{coolblack}{Contributions to Piglit I }}}
	\end{center}

	\tiny{
		\begin{center}\textbf{Reusing color images:}\end{center}
		\begin{table}[t]
			\begin{tabularx}{\textwidth}{|l|X|c|l|}
				\hline 
				\rowcolor{paleaqua}
				Test name & Use case
				& Output & Status\\
				\hline 
				\hline 
				\rowcolor{platinum}
				vk-image-overwrite &
				The test allocates images of different formats and
				tiling modes using Vulkan and fills their pixels using OpenGL.
				&
				\adjustbox{valign=t, margin=1ex, padding=1ex}{\includegraphics[height=1cm]{shots/image_overwrite.png}} & \cellcolor{green}{upstream}\\
				\hline 
				\rowcolor{whitesmoke}
				vk-image-display & 
				The test allocates a Vulkan image and renders a
				pattern to it using Vulkan. Then it displays it using OpenGL.
				The test uses semaphores to synchronize the GL, Vulkan access to
				the texture.\vspace{0.3cm}  &
				\adjustbox{valign=t, margin=1ex,
				padding=1ex}{\includegraphics[height=1cm]{shots/image_display.png}}
				& \cellcolor{green}{upstream}\\
				\hline 
				\rowcolor{platinum}
				vk-image-display-overwrite & 
				Similar to the previous ones, but the Vulkan texture data are
				overwritten again with OpenGL and then read back from Vulkan. &
				\adjustbox{valign=t, margin=1ex,
				padding=1ex}{\includegraphics[height=1cm]{shots/image_display_overwrite.png}}
				& \cellcolor{green}{upstream}\\
				\hline 
			\end{tabularx}
		\end{table}
	}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}[fragile]
	\frametitle{Additions to Piglit (the details) II}

	\begin{center}
		\normalsize{\textbf{\color{coolblack}{Contributions to Piglit II }}}
	\end{center}

	\tiny{
		\begin{center}\textbf{Reusing the depth and stencil buffer:}\end{center}
		\begin{table}[t]
			\begin{tabularx}{\textwidth}{|l|X|c|l|}
				\hline 
				\rowcolor{paleaqua}
				Test name & Use case
				& Output & Status\\
				\hline 
				\hline 
				\rowcolor{platinum}
				vk-depth-display & A Vulkan quad is rendered at a specific depth
				\texttt{d1}. The Vulkan depth buffer is used as a depth attachment while rendering
				a blue quad in an OpenGL FBO with the depth test enabled in a
				depth \texttt{d2 < d1}. We see the framebuffer color where
				\texttt{imported\_depth > depth}.
				\vspace{0.3cm}
				&
				\adjustbox{valign=t, margin=1ex,
				padding=1ex}{\includegraphics[height=1cm]{shots/depth.png}}
				& \cellcolor{babypink}{under review}\\
				\hline 
				\rowcolor{whitesmoke}
				vk-stencil-display & Similarly, a small quad is rendered with
				Vulkan and the stencil test enabled. It is
				then imported and used by OpenGL that renders a fullscreen quad
				with the stencil test enabled. Pixels that pass the stencil test
				have the quad color and the rest the framebuffer
				color.
				\vspace{0.3cm} &
				\adjustbox{valign=t, margin=1ex,
				padding=1ex}{\includegraphics[height=1cm]{shots/stencil.png}}
				& \cellcolor{babypink}{under review}\\
				\hline 
			\end{tabularx}
		\end{table}
		}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}[fragile]
	\frametitle{Additions to Piglit (the details) III}

	\begin{center}
		\normalsize{\textbf{\color{coolblack}{Contributions to Piglit III }}}
	\end{center}

	\tiny{
		\begin{center}\textbf{Reusing a pixel buffer:}\end{center}

		\begin{table}[t]
			\begin{tabularx}{\textwidth}{|l|X|l|l|}
				\hline 
				\rowcolor{paleaqua}
				Test name & Use case
				& Output & Status\\
				\hline 
				\hline 
				\rowcolor{platinum}
				vk-buf-exchange &
				The test renders an image and copies it to a buffer using
				Vulkan. Then, the buffer is imported in OpenGL and is used as
				pixel storage for an OpenGL texture. OpenGL renders the texture
				and we validate that it contains the pattern that was rendered
				by Vulkan. \vspace{0.3cm} &
				\adjustbox{valign=t, margin=1ex,
				padding=1ex}{\includegraphics[height=1cm]{shots/image_display.png}}
				& \cellcolor{green}{upstream}\\
				\hline
				\rowcolor{whitesmoke}
				vk-pix-buf-update-errors &
				The test is similar to the previous one with the difference that
				we attempt to overwrite the buffer using BufferSubData. We
				validate that an invalid operation error is generated and the
				contents of the buffer remain unchanged after the
				attempt.\vspace{0.3cm} & 
				\adjustbox{valign=t, margin=1ex,
				padding=1ex}{\includegraphics[height=1cm]{shots/image_display.png}}
				& \cellcolor{blond}{work in progress}\\
				\hline
			\end{tabularx}
		\end{table}
	}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}[fragile]
	\frametitle{Additions to Piglit (the details) IV}

	\begin{center}
		\normalsize{\textbf{\color{coolblack}{Contributions to Piglit IV }}}
	\end{center}

	\tiny{
		\begin{center}\textbf{Reusing a vertex buffer:}\end{center}
		\begin{table}[t]
			\begin{tabularx}{\textwidth}{|l|X|l|l|}
				\hline 
				\rowcolor{paleaqua}
				Test name & Use case
				& Output & Status\\
				\hline 
				\hline 
				\rowcolor{platinum}
				vk-vert-buf-update-errors & 
				A Vulkan vertex buffer is allocated and filled with data so that
				the vertices create quads that follow a chess pattern. This
				vertex buffer is used by OpenGL that clears the screen with red
				and paints the pixels blue.
				We validate that the geometry is correct and that we can't
				overwrite it using \texttt{glBufferSubdata}. \vspace{0.3cm} &
				\adjustbox{valign=t, margin=1ex,
				padding=1ex}{\includegraphics[height=1cm]{shots/vert_buf_update_errors.png}}
				& \cellcolor{blond}{work in progress}\\
				\hline 
				\rowcolor{whitesmoke}
				vk-vert-buf-reuse &
				Similar to the previous test, but the Vulkan vertex buffer is
				used in a Vulkan renderpass afterwards to make sure Vulkan can
				read back and reuse the vertex buffer.\vspace{0.3cm} &
				\adjustbox{valign=t, margin=1ex,
				padding=1ex}{\includegraphics[height=1cm]{shots/vert_buf_update_errors.png}}
				&
				\cellcolor{blond}{work in progress}\\
				\hline 
			\end{tabularx}
		\end{table}
	}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}[fragile]
	\frametitle{Additions to Piglit (the details) V}
	\begin{center}
		\normalsize{\textbf{\color{coolblack}{Contributions to Piglit V }}}\\
		\vspace{0.5cm}
		\scriptsize{Same as with mesa many people helped us with the work on the
		tests:}
	\end{center}

	\tiny{
		\begin{table}[t]
			\begin{tabularx}{\textwidth}{|l|X|}
				\hline 
				\rowcolor{paleaqua}
				Contributors & Contributions \\
				\hline 
				\hline 
				\rowcolor{platinum}
				Eleni Maria Stea & tests, Vulkan framework code \\
				\rowcolor{whitesmoke}
				Juan A. Suárez Romero & contributions to the framework, and
				vk-image-overwrite, testing \\
				\rowcolor{platinum}
				Tapani Pälli (\textit{many thanks!}) & reviews, testing and patches
				for the framework \\
				\rowcolor{whitesmoke}
				Bas Nieuwenhuizen & framework patch to support dedicated memory \\
				\rowcolor{platinum}
				Topi Pohjolainen & we've used some old patches of him as an example
				at the very beginning\\
				\hline 
			\end{tabularx}
		\end{table}
	}

	\begin{itemize}
		\item Also thanks to Germán Poo Caamaño who helped tidying up the
			initial mess of the Vulkan framework commits.
		\item Again, this information was accurate when I prepared and
			pre-recorded the slides. Sorry if I am missing someone or something!
	\end{itemize}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}[fragile]
	\frametitle{Piglit Results}
	\begin{block}{\begin{center}Conclusions from running the tests:\end{center}}
		\begin{itemize}
				\vspace{0.5cm}
			\item The feature seems to work well for the most common use cases in
				all mesa drivers mentioned before.\\
				\vspace{0.5cm}
			\item Depth and stencil buffer exchange is only supported on
				proprietary Nvidia drivers, unfortunately not on Mesa yet.\\
				\vspace{0.5cm}
			\item radeonsi needs some fixes to better support buffers and
				optimal tiling (WIP).
				\vspace{0.5cm}
		\end{itemize}
	\end{block}

\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%\begin{frame}[fragile]
%	\frametitle{vk-image-overwrite}
%	\begin{block}{vk-image-overwrite}
%		\lstinline[language=C++, style=CStyle]{glCreateMemoryObjectsEXT(1, gl_mem_obj); }
%	\end{block}
%\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section[Q \& A]{Questions}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{frame}
	\frametitle{Questions?}
	{\fontsize{8}{7}\selectfont
	\begin{center}
		\begin{figure}
		\includegraphics[scale=0.04]{data/qmark.png}
		\end{figure}
		\vspace{0.7cm}
		{\large E-mail: {\color{coolblack}estea@igalia.com}}\\
		{\large IRC/Freenode: {\color{coolblack}hikiko}}\\
	\end{center}
	}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section[References]{References}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\setbeamertemplate{bibliography entry title}{}
%\setbeamertemplate{bibliography entry location}{}
%\setbeamertemplate{bibliography entry note}{}
\setbeamerfont{bibliography item}{size=\footnotesize}
\setbeamerfont{bibliography entry author}{size=\footnotesize}
\setbeamerfont{bibliography entry title}{size=\footnotesize}
\setbeamerfont{bibliography entry year}{size=\footnotesize}
\setbeamerfont{bibliography entry note}{size=\footnotesize}

\begin{frame}[allowframebreaks]
	\frametitle{Links}
	\bibliographystyle{unsrt}
	\bibliography{bib/references.bib}
	\nocite{*}
\end{frame}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\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}
