138 lines
3.6 KiB
HTML
138 lines
3.6 KiB
HTML
<HTML>
|
|
|
|
<TITLE>Cell Driver</TITLE>
|
|
|
|
<link rel="stylesheet" type="text/css" href="mesa.css"></head>
|
|
|
|
<BODY>
|
|
|
|
<H1>Mesa/Gallium Cell Driver</H1>
|
|
|
|
<p>
|
|
The Mesa
|
|
<a href="http://en.wikipedia.org/wiki/Cell_%28microprocessor%29" target="_parent">Cell</a>
|
|
driver is part of the
|
|
<a href="http://www.tungstengraphics.com/wiki/index.php/Gallium3D" target="_parent">Gallium3D</a>
|
|
architecture.
|
|
</p>
|
|
|
|
<p>
|
|
<a href="http://www.tungstengraphics.com/" target="_parent">Tungsten Graphics</a>
|
|
is leading the project.
|
|
Two phases are planned.
|
|
First, to implement the framework for parallel rasterization using the Cell
|
|
SPEs, including texture mapping.
|
|
Second, to implement a full-featured OpenGL driver with support for GLSL, etc.
|
|
The second phase is now underway.
|
|
</p>
|
|
|
|
|
|
<H2>Source Code</H2>
|
|
|
|
<p>
|
|
The latest Cell driver source code is on the <code>gallium-0.2</code> branch
|
|
of the Mesa git repository.
|
|
After you've cloned the repository, check out the branch with:
|
|
</p>
|
|
<pre>
|
|
git-checkout -b gallium-0.2 origin/gallium-0.2
|
|
</pre>
|
|
<p>
|
|
To build the driver you'll need the IBM Cell SDK (version 2.1 or 3.0).
|
|
To use the driver you'll need a Cell system, such as a PS3 running Linux,
|
|
or the Cell Simulator (untested, though).
|
|
</p>
|
|
|
|
<p>
|
|
If using Cell SDK 2.1, see the configs/linux-cell file for some
|
|
special changes.
|
|
</p>
|
|
|
|
<p>
|
|
To compile the code, run <code>make linux-cell</code>.
|
|
To build in debug mode, run <code>make linux-cell-debug</code>.
|
|
</p>
|
|
|
|
<p>
|
|
To use the library, make sure <code>LD_LIBRARY_PATH</code> points the Mesa/lib/
|
|
directory that contains <code>libGL.so</code>.
|
|
</p>
|
|
|
|
<p>
|
|
Verify that the Cell driver is being used by running <code>glxinfo</code>
|
|
and looking for:
|
|
<pre>
|
|
OpenGL renderer string: Gallium 0.2, Cell on Xlib
|
|
</pre>
|
|
|
|
|
|
<H2>Driver Implementation Summary</H2>
|
|
|
|
<p>
|
|
Rasterization is parallelized across the SPUs in a tiled-based manner.
|
|
Batches of transformed triangles are sent to the SPUs (actually, pulled by from
|
|
main memory by the SPUs).
|
|
Each SPU loops over a set of 32x32-pixel screen tiles, rendering the triangles
|
|
into each tile.
|
|
Because of the limited SPU memory, framebuffer tiles are paged in/out of
|
|
SPU local store as needed.
|
|
Similarly, textures are tiled and brought into local store as needed.
|
|
</p>
|
|
|
|
|
|
<H2>Status</H2>
|
|
|
|
<p>
|
|
As of September 2008, the driver supports smooth/flat shaded triangle rendering
|
|
with Z testing and simple texture mapping.
|
|
Simple demos like gears run successfully.
|
|
To test texture mapping, try progs/demos/texcyl (press right mouse button for
|
|
rendering options).
|
|
</p>
|
|
<p>
|
|
Runtime/dynamic code generation is being done for per-fragment
|
|
operations (Z test, blend, etc) and for fragment programs (though only a
|
|
few opcodes are implemented now).
|
|
</p>
|
|
<p>
|
|
In general, however, the driver is rather slow because all vertex
|
|
transformation is being done by an interpreter running on the PPU.
|
|
Programs with many vertices or complex vertex shaders will run especially
|
|
slow.
|
|
This will be addressed in the future.
|
|
</p>
|
|
|
|
|
|
|
|
<H2>Debug Options</H2>
|
|
|
|
<p>
|
|
The CELL_DEBUG env var can be set to a comma-separated list of one or
|
|
more of the following debug options:
|
|
</p>
|
|
<ul>
|
|
<li><b>checker</b> - use a different background clear color for each SPU.
|
|
This lets you see which SPU is rendering which screen tiles.
|
|
<li><b>sync</b> - wait/synchronize after each DMA transfer
|
|
</ul>
|
|
|
|
<p>
|
|
If the GALLIUM_NOCELL env var is set, the softpipe driver will be used
|
|
intead of the Cell driver.
|
|
This is useful for comparison/validation.
|
|
</p>
|
|
|
|
|
|
|
|
<H2>Contributing</H2>
|
|
|
|
<p>
|
|
If you're interested in contributing to the effort, familiarize yourself
|
|
with the code, join the <a href="lists.html">mesa3d-dev mailing list</a>,
|
|
and describe what you'd like to do.
|
|
</p>
|
|
|
|
|
|
</BODY>
|
|
</HTML>
|