diff options
| author | Brian <brian.paul@tungstengraphics.com> | 2008-03-31 16:35:13 -0600 | 
|---|---|---|
| committer | Brian <brian.paul@tungstengraphics.com> | 2008-03-31 16:36:25 -0600 | 
| commit | ab8bcc4ec626be2d09bcdbaba2d1030b8dac7e25 (patch) | |
| tree | 5ac210cf4fb45b04c7297c12ded74aea390b861f /src/gallium | |
| parent | 8a81429fa866cc1e2a14dec7e888fd2c888dc40a (diff) | |
cell: implement logicop/output for PIPE_FORMAT_B8G8R8A8_UNORM
Remote display to my usual terminal shows the right colors again.
Not 100% sure about the shuffle control words, but they seem to work.
Diffstat (limited to 'src/gallium')
| -rw-r--r-- | src/gallium/drivers/cell/ppu/cell_state_per_fragment.c | 36 | 
1 files changed, 26 insertions, 10 deletions
| diff --git a/src/gallium/drivers/cell/ppu/cell_state_per_fragment.c b/src/gallium/drivers/cell/ppu/cell_state_per_fragment.c index f10025bd7c..0a79cccc83 100644 --- a/src/gallium/drivers/cell/ppu/cell_state_per_fragment.c +++ b/src/gallium/drivers/cell/ppu/cell_state_per_fragment.c @@ -1164,7 +1164,7 @@ int PC_OFFSET(const struct spe_function *f, const void *d)   * masking.   *   * \bug - * This routine is hard-coded to only work with ARGB8 data. + * Only two framebuffer formats are supported at this time.   */  void  cell_generate_logic_op(struct spe_function *f, struct pipe_blend_state *blend, @@ -1235,15 +1235,31 @@ cell_generate_logic_op(struct spe_function *f, struct pipe_blend_state *blend,     /* Convert fragment colors to framebuffer format in AoS layout.      */ -   data[0] = 0x00010203; -   data[1] = 0x10111213; -   data[2] = 0x04050607; -   data[3] = 0x14151617; - -   data[4] = 0x0c000408; -   data[5] = 0x80808080; -   data[6] = 0x80808080; -   data[7] = 0x80808080; +   switch (surf->format) { +   case PIPE_FORMAT_A8R8G8B8_UNORM: +      data[0] = 0x00010203; +      data[1] = 0x10111213; +      data[2] = 0x04050607; +      data[3] = 0x14151617; +      data[4] = 0x0c000408; +      data[5] = 0x80808080; +      data[6] = 0x80808080; +      data[7] = 0x80808080; +      break; +   case PIPE_FORMAT_B8G8R8A8_UNORM: +      data[0] = 0x03020100; +      data[1] = 0x13121110; +      data[2] = 0x07060504; +      data[3] = 0x17161514; +      data[4] = 0x0804000c; +      data[5] = 0x80808080; +      data[6] = 0x80808080; +      data[7] = 0x80808080; +      break; +   default: +      fprintf(stderr, "CELL: Bad pixel format in cell_generate_logic_op()"); +      ASSERT(0); +   }     spe_ilh(f, tmp[0], 0x0808);     spe_lqr(f, shuf_xpose_hi, PC_OFFSET(f, data+0)); | 
