summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephane Marchesin <stephane.marchesin@gmail.com>2012-03-11 17:32:48 -0700
committerStephane Marchesin <stephane.marchesin@gmail.com>2012-03-11 17:32:48 -0700
commitf845e596176d828b4d5cac1661cdd8d80b15da5a (patch)
treec9e625a93ca3c4bca01f354b0ce1e4218ccf8896
parent63f78fcab26ae6ccaa81a1fe4dc1a510db59f1a2 (diff)
More changes...
-rw-r--r--linuxgraphicsdrivers.lyx73
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