spu_tile.c

Go to the documentation of this file.
00001 /**************************************************************************
00002  * 
00003  * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
00004  * All Rights Reserved.
00005  * 
00006  * Permission is hereby granted, free of charge, to any person obtaining a
00007  * copy of this software and associated documentation files (the
00008  * "Software"), to deal in the Software without restriction, including
00009  * without limitation the rights to use, copy, modify, merge, publish,
00010  * distribute, sub license, and/or sell copies of the Software, and to
00011  * permit persons to whom the Software is furnished to do so, subject to
00012  * the following conditions:
00013  * 
00014  * The above copyright notice and this permission notice (including the
00015  * next paragraph) shall be included in all copies or substantial portions
00016  * of the Software.
00017  * 
00018  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00019  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00020  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
00021  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
00022  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
00023  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
00024  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00025  * 
00026  **************************************************************************/
00027 
00028 
00029 
00030 #include "spu_tile.h"
00031 #include "spu_main.h"
00032 
00033 
00037 void
00038 get_tile(uint tx, uint ty, tile_t *tile, int tag, int zBuf)
00039 {
00040    const uint offset = ty * spu.fb.width_tiles + tx;
00041    const uint bytesPerTile = TILE_SIZE * TILE_SIZE * (zBuf ? spu.fb.zsize : 4);
00042    const ubyte *src = zBuf ? spu.fb.depth_start : spu.fb.color_start;
00043 
00044    src += offset * bytesPerTile;
00045 
00046    ASSERT(tx < spu.fb.width_tiles);
00047    ASSERT(ty < spu.fb.height_tiles);
00048    ASSERT_ALIGN16(tile);
00049    /*
00050    printf("get_tile:  dest: %p  src: 0x%x  size: %d\n",
00051           tile, (unsigned int) src, bytesPerTile);
00052    */
00053    mfc_get(tile->ui,  /* dest in local memory */
00054            (unsigned int) src, /* src in main memory */
00055            bytesPerTile,
00056            tag,
00057            0, /* tid */
00058            0  /* rid */);
00059 }
00060 
00061 
00065 void
00066 put_tile(uint tx, uint ty, const tile_t *tile, int tag, int zBuf)
00067 {
00068    const uint offset = ty * spu.fb.width_tiles + tx;
00069    const uint bytesPerTile = TILE_SIZE * TILE_SIZE * (zBuf ? spu.fb.zsize : 4);
00070    ubyte *dst = zBuf ? spu.fb.depth_start : spu.fb.color_start;
00071 
00072    dst += offset * bytesPerTile;
00073 
00074    ASSERT(tx < spu.fb.width_tiles);
00075    ASSERT(ty < spu.fb.height_tiles);
00076    ASSERT_ALIGN16(tile);
00077    /*
00078    printf("SPU %u: put_tile:  src: %p  dst: 0x%x  size: %d\n",
00079           spu.init.id,
00080           tile, (unsigned int) dst, bytesPerTile);
00081    */
00082    mfc_put((void *) tile->ui,  /* src in local memory */
00083            (unsigned int) dst,  /* dst in main memory */
00084            bytesPerTile,
00085            tag,
00086            0, /* tid */
00087            0  /* rid */);
00088 }
00089 

Generated on Tue Sep 29 06:25:16 2009 for Gallium3D by  doxygen 1.5.4