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,
+ 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
\rowcolor{platinum}
\\
\rowcolor{platinum}
- \small{· \color{coolblack}{\textbf{Allocating} the resources (textures,
+ \small{· \color{coolblack}{\textbf{Allocating} resources (like textures,
buffers) \textbf{once} from Vulkan.}}\\
\rowcolor{platinum}
\small{· \color{coolblack}{\textbf{Reusing} them \textbf{several times} from
\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.}
+ \footnotesize{\textbf{Example:} a VR compositor where the left and right eye
+ images are allocated and displayed by Vulkan but their contents are filled by
+ OpenGL processes.}
\end{frame}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{frame}[fragile]
- \frametitle{OpenGL extensions for interoperability}
+ \frametitle{OpenGL extensions for interoperability on Linux}
- \center{\textbf{\color{coolblack}{OpenGL EXTENSIONS}}}
+ \center{\textbf{\color{coolblack}{OpenGL Extensions (Linux)}}}
\vspace{0.2cm}
\setbeamertemplate{itemize/enumerate body begin}{\footnotesize}
\begin{itemize}
\item enables an OpenGL application to import a memory object or
semaphore from POSIX file descriptor external handles
+ (\textbf{Linux only!})
\end{itemize}
\end{block}
\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 enables an OpenGL application to:
+ \small{
+ \begin{itemize}
+ \setbeamertemplate{itemize/enumerate subbody begin}{\normalsize}
+
+ \item[--] create OpenGL objects, textures buffers and semaphores from
+ imported Vulkan memory
+ \item[--] synchronize the rendering using the GL semaphores
+ \end{itemize}
+ }
\item {extends existing GL calls that set and query properties}
\end{itemize}
\end{block}
\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
+ {\color{coolblack}\textbf{Piglit}} and Vulkan/GL tests that cover
+ some common
EXT\_external\_objects(\_fd) use cases.
}
\end{block}
\tiny{
\begin{table}[t]
\begin{tabularx}{\textwidth}{|l|X|l|}
- \hline
+ \hline
\rowcolor{paleaqua}
Driver & Igalia's Contributions & Status \\
- \hline
- \hline
+ \hline
+ \hline
\rowcolor{platinum}
iris & \textbf{\color{coolblack}implemented} EXT\_external\_objects,
EXT\_external\_objects\_fd & \cellcolor{babypink}{under review (MR
\rowcolor{whitesmoke}
i965 & helped with the \textbf{\color{coolblack}review}, patches & \cellcolor{babypink}{under review
(Draft MR !5594)}\\
- \hline
+ \hline
\end{tabularx}
\end{table}
}
\tiny{
\begin{table}[ht]
\begin{tabularx}{\textwidth}{|l|X|X|}
- \hline
+ \hline
\rowcolor{paleaqua}
Driver & Patches & Reviews, Comments, Advice\\
- \hline
- \hline
+ \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,
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
+ i965 & Rohan Garg, Juan A. Suárez Romero, Tapani Pälli
& Tomeu Vizoso, Eleni Maria Stea, Oscar Barenys \\
- \hline
+ \hline
\end{tabularx}
\end{table}
}
\begin{center}\textbf{Reusing color images:}\end{center}
\begin{table}[t]
\begin{tabularx}{\textwidth}{|l|X|c|l|}
- \hline
+ \hline
\rowcolor{paleaqua}
- Test name & Use case
+ Test name & Description
& Output & Status\\
- \hline
- \hline
+ \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
+ \hline
\rowcolor{whitesmoke}
- vk-image-display &
+ 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
\adjustbox{valign=t, margin=1ex,
padding=1ex}{\includegraphics[height=1cm]{shots/image_display.png}}
& \cellcolor{green}{upstream}\\
- \hline
+ \hline
\rowcolor{platinum}
- vk-image-display-overwrite &
+ 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
+ \hline
\end{tabularx}
\end{table}
}
\begin{center}\textbf{Reusing the depth and stencil buffer:}\end{center}
\begin{table}[t]
\begin{tabularx}{\textwidth}{|l|X|c|l|}
- \hline
+ \hline
\rowcolor{paleaqua}
- Test name & Use case
+ Test name & Description
& Output & Status\\
- \hline
- \hline
+ \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}.
+ vk-depth-display & On the Vulkan side we draw a quad at a
+ specific depth to fill the z buffer with a recognizable pattern.
+ Then we use the Vulkan z buffer from OpenGL, where we clear the
+ framebuffer to green and render a
+ blue fullscreen quad positioned on the z-axis further away than
+ the depth of the original quad. If the z buffer has been imported
+ correctly the blue quad should be partially obscured due to the
+ depth test failing in the middle.
\vspace{0.3cm}
&
\adjustbox{valign=t, margin=1ex,
padding=1ex}{\includegraphics[height=1cm]{shots/depth.png}}
& \cellcolor{babypink}{under review}\\
- \hline
+ \hline
\rowcolor{whitesmoke}
vk-stencil-display & Similarly, a small quad is rendered with
Vulkan and the stencil test enabled. It is
\adjustbox{valign=t, margin=1ex,
padding=1ex}{\includegraphics[height=1cm]{shots/stencil.png}}
& \cellcolor{babypink}{under review}\\
- \hline
+ \hline
\end{tabularx}
\end{table}
}
\begin{table}[t]
\begin{tabularx}{\textwidth}{|l|X|l|l|}
- \hline
+ \hline
\rowcolor{paleaqua}
- Test name & Use case
+ Test name & Description
& Output & Status\\
- \hline
- \hline
+ \hline
+ \hline
\rowcolor{platinum}
vk-buf-exchange &
The test renders an image and copies it to a buffer using
\begin{center}\textbf{Reusing a vertex buffer:}\end{center}
\begin{table}[t]
\begin{tabularx}{\textwidth}{|l|X|l|l|}
- \hline
+ \hline
\rowcolor{paleaqua}
- Test name & Use case
+ Test name & Description
& Output & Status\\
- \hline
- \hline
+ \hline
+ \hline
\rowcolor{platinum}
- vk-vert-buf-update-errors &
+ 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
\adjustbox{valign=t, margin=1ex,
padding=1ex}{\includegraphics[height=1cm]{shots/vert_buf_update_errors.png}}
& \cellcolor{blond}{work in progress}\\
- \hline
+ \hline
\rowcolor{whitesmoke}
vk-vert-buf-reuse &
Similar to the previous test, but the Vulkan vertex buffer is
padding=1ex}{\includegraphics[height=1cm]{shots/vert_buf_update_errors.png}}
&
\cellcolor{blond}{work in progress}\\
- \hline
+ \hline
\end{tabularx}
\end{table}
}
\tiny{
\begin{table}[t]
\begin{tabularx}{\textwidth}{|l|X|}
- \hline
+ \hline
\rowcolor{paleaqua}
Contributors & Contributions \\
- \hline
- \hline
+ \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
+ Tapani Pälli (\textit{\color{coolblack}{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
+ \hline
\end{tabularx}
\end{table}
}
\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
+ \item The feature seems to work well for the most use cases tested 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.\\
+ proprietary Nvidia driver, unfortunately not on Mesa yet.\\
\vspace{0.5cm}
\item radeonsi needs some fixes to better support buffers and
optimal tiling (WIP).