123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- <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 October 2008, the driver runs quite a few OpenGL demos.
- Features that work include:
- </p>
- <ul>
- <li>Point/line/triangle rendering, glDrawPixels
- <li>2D, NPOT and cube texture maps with nearest/linear/mipmap filtering
- <li>Dynamic SPU code generation for fragment shaders, but not complete
- <li>Dynamic SPU code generation for fragment ops (blend, Z-test, etc), but not complete
- <li>Dynamic PPU/PPC code generation for vertex shaders, but not complete
- </ul>
- <p>
- Performance has recently improved with the addition of PPC code generation
- for vertex shaders, but the code quality isn't too great yet.
- </p>
- <p>
- Another bottleneck is SwapBuffers. It may be the limiting factor for
- many simple GL tests.
- </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
- <li><b>asm</b> - print generated SPU assembly code to stdout
- <li><b>fragops</b> - emit fragment ops debug messages
- <li><b>fragopfallback</b> - don't use codegen for fragment ops
- <li><b>cmd</b> - print SPU commands as their received
- <li><b>cache</b> - print texture cache statistics when program exits
- </ul>
- <p>
- Note that some of these options may only work for linux-cell-debug builds.
- </p>
-
- <p>
- If the GALLIUM_NOPPC env var is set, PPC code generation will not be used
- and vertex shaders will be run with the TGSI interpreter.
- </p>
- <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>
|