diff options
author | Stephane Marchesin <stephane.marchesin@gmail.com> | 2012-03-11 17:32:48 -0700 |
---|---|---|
committer | Stephane Marchesin <stephane.marchesin@gmail.com> | 2012-03-11 17:32:48 -0700 |
commit | f845e596176d828b4d5cac1661cdd8d80b15da5a (patch) | |
tree | c9e625a93ca3c4bca01f354b0ce1e4218ccf8896 | |
parent | 63f78fcab26ae6ccaa81a1fe4dc1a510db59f1a2 (diff) |
More changes...
-rw-r--r-- | linuxgraphicsdrivers.lyx | 73 |
1 files changed, 68 insertions, 5 deletions
diff --git a/linuxgraphicsdrivers.lyx b/linuxgraphicsdrivers.lyx index a9a1700..bbf6129 100644 --- a/linuxgraphicsdrivers.lyx +++ b/linuxgraphicsdrivers.lyx @@ -253,8 +253,8 @@ reference "cha:The-DRM-Kernel" \end_inset - introduces the DRM, a kernel module which is in charge of arbitrating all - graphics activity going on in a Linux system. + introduces the Direct Rendering Manager (or DRM), a kernel module which + is in charge of arbitrating all graphics activity going on in a Linux system. The next chapter (Chapter \begin_inset CommandInset ref LatexCommand ref @@ -3148,6 +3148,12 @@ Interrupts are a way for hardware peripherals in general, and GPUs in particular Graphics Hardware Examples \end_layout +\begin_layout Subsection + +\lang english +Classical renderers +\end_layout + \begin_layout Paragraph* \lang english @@ -3204,6 +3210,55 @@ Shader engine nv40/nv50 http://nouveau.freedesktop.org/wiki/HonzaHavlicek \end_layout +\begin_layout Subsection +Deferred Renderers +\end_layout + +\begin_layout Standard +Deferred renderers are a different design for GPUs. + Instead of rendering each 3D primitive as it is submitted by the rendering + API, the driver stores it in memory and then issues a single hardware call + to render the whole scene. + This has a number of advantages over classic architectures: +\end_layout + +\begin_layout Itemize +Much better rendering locality can be achieved by splitting the screen into + tiles (usually in the 32x32 pixel range). + The GPU can then iterate over these tiles, and for each of those can resolve + per-pixel depth in an internal (mini) zbuffer. + Once the whole tile is rendered it can be written back to video memory, + saving precious bandwidth. + Similarly, since visibility is determined before fetching texture data, + only the useful texture data is read, again saving bandwidth. +\end_layout + +\begin_layout Itemize +If the depth buffer values are not required, they don't need to be written + to memory. + The depth buffer resolution can happen per-tile inside the GPU and never + be written back to video memory, therefore saving video memory bandwith + and space. +\end_layout + +\begin_layout Standard +Of course tiled renders require the ability to store the whole scene in + memory before starting, and will also add latency since you need to wait + for an end of frame even before you start drawing. + The latency problem can be partially hidden by drawing a given frame on + the GPU while the driver already allows the application to submit data + for the next frame. + However in some situations (readbacks, cross-process synchronization) it's + not always possible to avoid it. +\end_layout + +\begin_layout Standard +All in all, the deferred renderers are particularly useful for embedded + platforms where the bandwidth is generally very scarce and the applications + are simple enough that the additional latency and the limitations of the + approach don't matter. +\end_layout + \begin_layout Paragraph* \lang english @@ -3213,13 +3268,20 @@ SGX \begin_layout Standard \lang english -Tiling architecture +The SGX is an example of a deferred rendering GPU. + It uses a tiling architecture. +\end_layout + +\begin_layout Standard + +\lang english +The SGX shaders combine blending and depth test \end_layout \begin_layout Standard \lang english -Combined shader with blending and depth test +Another example of a deferred renderer is the Mali family of GPUs. \end_layout \begin_layout Standard @@ -5044,7 +5106,8 @@ name "cha:The-DRM-Kernel" \lang english The use of a kernel module is a requirement in a complex world. - The kernel module, or DRM, has multiple purposes: + This kernel module is called the Direct Rendering Manager (DRM, not to + be confused with Digital Rights Management) and serves multiple purposes: \end_layout \begin_layout Itemize |