1 /**************************************************************************
3 * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the
8 * "Software"), to deal in the Software without restriction, including
9 * without limitation the rights to use, copy, modify, merge, publish,
10 * distribute, sub license, and/or sell copies of the Software, and to
11 * permit persons to whom the Software is furnished to do so, subject to
12 * the following conditions:
14 * The above copyright notice and this permission notice (including the
15 * next paragraph) shall be included in all copies or substantial portions
18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
21 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 **************************************************************************/
35 * Get tile of color or Z values from main memory, put into SPU memory.
38 get_tile(uint tx
, uint ty
, tile_t
*tile
, int tag
, int zBuf
)
40 const uint offset
= ty
* spu
.fb
.width_tiles
+ tx
;
41 const uint bytesPerTile
= TILE_SIZE
* TILE_SIZE
* (zBuf
? spu
.fb
.zsize
: 4);
42 const ubyte
*src
= zBuf
? spu
.fb
.depth_start
: spu
.fb
.color_start
;
44 src
+= offset
* bytesPerTile
;
46 ASSERT(tx
< spu
.fb
.width_tiles
);
47 ASSERT(ty
< spu
.fb
.height_tiles
);
50 printf("get_tile: dest: %p src: 0x%x size: %d\n",
51 tile, (unsigned int) src, bytesPerTile);
53 mfc_get(tile
->ui
, /* dest in local memory */
54 (unsigned int) src
, /* src in main memory */
63 * Move tile of color or Z values from SPU memory to main memory.
66 put_tile(uint tx
, uint ty
, const tile_t
*tile
, int tag
, int zBuf
)
68 const uint offset
= ty
* spu
.fb
.width_tiles
+ tx
;
69 const uint bytesPerTile
= TILE_SIZE
* TILE_SIZE
* (zBuf
? spu
.fb
.zsize
: 4);
70 ubyte
*dst
= zBuf
? spu
.fb
.depth_start
: spu
.fb
.color_start
;
72 dst
+= offset
* bytesPerTile
;
74 ASSERT(tx
< spu
.fb
.width_tiles
);
75 ASSERT(ty
< spu
.fb
.height_tiles
);
78 printf("SPU %u: put_tile: src: %p dst: 0x%x size: %d\n",
80 tile, (unsigned int) dst, bytesPerTile);
82 mfc_put((void *) tile
->ui
, /* src in local memory */
83 (unsigned int) dst
, /* dst in main memory */