Home | History | Annotate | Download | only in docs
      1 <HTML>
      2 
      3 <TITLE>Cell Driver</TITLE>
      4 
      5 <link rel="stylesheet" type="text/css" href="mesa.css"></head>
      6 
      7 <BODY>
      8 
      9 <H1>Mesa/Gallium Cell Driver</H1>
     10 
     11 <p>
     12 The Mesa
     13 <a href="http://en.wikipedia.org/wiki/Cell_%28microprocessor%29" target="_parent">Cell</a>
     14 driver is part of the 
     15 <a href="http://wiki.freedesktop.org/wiki/Software/gallium" target="_parent">Gallium3D</a>
     16 architecture.
     17 Tungsten Graphics did the original implementation of the Cell driver.
     18 </p>
     19 
     20 
     21 <H2>Source Code</H2>
     22 
     23 <p>
     24 The latest Cell driver source code is on the master branch of the Mesa
     25 git repository.
     26 </p>
     27 <p>
     28 To build the driver you'll need the IBM Cell SDK (version 2.1 or 3.0).
     29 To use the driver you'll need a Cell system, such as a PS3 running Linux,
     30 or the Cell Simulator (untested, though).
     31 </p>
     32 
     33 <p>
     34 If using Cell SDK 2.1, see the configs/linux-cell file for some
     35 special changes.
     36 </p>
     37 
     38 <p>
     39 To compile the code, run <code>make linux-cell</code>.
     40 Or to build in debug mode, run <code>make linux-cell-debug</code>.
     41 </p>
     42 
     43 <p>
     44 To use the library, make sure your current directory is the top of the
     45 Mesa tree, then set <code>LD_LIBRARY_PATH</code> like this:
     46 <pre>
     47   export LD_LIBRARY_PATH=$PWD/lib/gallium:$PWD/lib/
     48 </pre>
     49 
     50 <p>
     51 Verify that the Cell driver is being used by running
     52 <code>progs/xdemos/glxinfo</code> and looking for:
     53 <pre>
     54   OpenGL renderer string: Gallium 0.3, Cell on Xlib
     55 </pre>
     56 
     57 
     58 <H2>Driver Implementation Summary</H2>
     59 
     60 <p>
     61 Rasterization is parallelized across the SPUs in a tiled-based manner.
     62 Batches of transformed triangles are sent to the SPUs (actually, pulled by from
     63 main memory by the SPUs).
     64 Each SPU loops over a set of 32x32-pixel screen tiles, rendering the triangles
     65 into each tile.
     66 Because of the limited SPU memory, framebuffer tiles are paged in/out of
     67 SPU local store as needed.
     68 Similarly, textures are tiled and brought into local store as needed.
     69 </p>
     70 
     71 
     72 <H2>Status</H2>
     73 
     74 <p>
     75 As of October 2008, the driver runs quite a few OpenGL demos.
     76 Features that work include:
     77 </p>
     78 <ul>
     79 <li>Point/line/triangle rendering, glDrawPixels
     80 <li>2D, NPOT and cube texture maps with nearest/linear/mipmap filtering
     81 <li>Dynamic SPU code generation for fragment shaders, but not complete
     82 <li>Dynamic SPU code generation for fragment ops (blend, Z-test, etc), but not complete
     83 <li>Dynamic PPU/PPC code generation for vertex shaders, but not complete
     84 </ul>
     85 <p>
     86 Performance has recently improved with the addition of PPC code generation
     87 for vertex shaders, but the code quality isn't too great yet.
     88 </p>
     89 <p>
     90 Another bottleneck is SwapBuffers.  It may be the limiting factor for
     91 many simple GL tests.
     92 </p>
     93 
     94 
     95 
     96 <H2>Debug Options</H2>
     97 
     98 <p>
     99 The CELL_DEBUG env var can be set to a comma-separated list of one or
    100 more of the following debug options:
    101 </p>
    102 <ul>
    103 <li><b>checker</b> - use a different background clear color for each SPU.
    104    This lets you see which SPU is rendering which screen tiles.
    105 <li><b>sync</b> - wait/synchronize after each DMA transfer
    106 <li><b>asm</b> - print generated SPU assembly code to stdout
    107 <li><b>fragops</b> - emit fragment ops debug messages
    108 <li><b>fragopfallback</b> - don't use codegen for fragment ops
    109 <li><b>cmd</b> - print SPU commands as their received
    110 <li><b>cache</b> - print texture cache statistics when program exits
    111 </ul>
    112 <p>
    113 Note that some of these options may only work for linux-cell-debug builds.
    114 </p>
    115 
    116 <p>
    117 If the GALLIUM_NOPPC env var is set, PPC code generation will not be used
    118 and vertex shaders will be run with the TGSI interpreter.
    119 </p>
    120 <p>
    121 If the GALLIUM_NOCELL env var is set, the softpipe driver will be used
    122 intead of the Cell driver.
    123 This is useful for comparison/validation.
    124 </p>
    125 
    126 
    127 
    128 <H2>Contributing</H2>
    129 
    130 <p>
    131 If you're interested in contributing to the effort, familiarize yourself
    132 with the code, join the <a href="lists.html">mesa3d-dev mailing list</a>,
    133 and describe what you'd like to do.
    134 </p>
    135 
    136 
    137 </BODY>
    138 </HTML>
    139