13ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca/**************************************************************************
23ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca *
33ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
43ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * All Rights Reserved.
53ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca *
63ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a
73ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * copy of this software and associated documentation files (the
83ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * "Software"), to deal in the Software without restriction, including
93ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * without limitation the rights to use, copy, modify, merge, publish,
103ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * distribute, sub license, and/or sell copies of the Software, and to
113ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * permit persons to whom the Software is furnished to do so, subject to
123ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * the following conditions:
133ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca *
143ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * The above copyright notice and this permission notice (including the
153ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * next paragraph) shall be included in all copies or substantial portions
163ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * of the Software.
173ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca *
183ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
193ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
203ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
213ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
223ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
233ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
243ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
253ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca *
263ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca **************************************************************************/
273ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca
283ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca#ifndef LP_TILE_SOA_H
293ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca#define LP_TILE_SOA_H
303ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca
313ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca#include "pipe/p_compiler.h"
326b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard#include "tgsi/tgsi_exec.h" /* for TGSI_NUM_CHANNELS */
332de31f2bf2b9c68aaa76a63fa0d0d3e0731ccfb5Brian Paul#include "lp_limits.h"
343ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca
353ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca#ifdef __cplusplus
363ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonsecaextern "C" {
373ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca#endif
383ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca
393ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca
40efab431684bb17459073f6a2e96044cb2ebd2524José Fonsecastruct pipe_transfer;
41efab431684bb17459073f6a2e96044cb2ebd2524José Fonseca
42efab431684bb17459073f6a2e96044cb2ebd2524José Fonseca
432f5f357c5b67869e75087fc1f17ed0d666fb134eJosé Fonseca#define TILE_VECTOR_HEIGHT 4
442f5f357c5b67869e75087fc1f17ed0d666fb134eJosé Fonseca#define TILE_VECTOR_WIDTH 4
45efab431684bb17459073f6a2e96044cb2ebd2524José Fonseca
46efab431684bb17459073f6a2e96044cb2ebd2524José Fonsecaextern const unsigned char
47efab431684bb17459073f6a2e96044cb2ebd2524José Fonsecatile_offset[TILE_VECTOR_HEIGHT][TILE_VECTOR_WIDTH];
48efab431684bb17459073f6a2e96044cb2ebd2524José Fonseca
4958903b378188861a6f7a67bbfb07424b73df2a1bBrian Paul#define TILE_C_STRIDE (TILE_VECTOR_HEIGHT * TILE_VECTOR_WIDTH) //16
506b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard#define TILE_X_STRIDE (TGSI_NUM_CHANNELS * TILE_C_STRIDE) //64
516b63e25b3d7a6ac0bd738c139ead0c7e7ad84368Tom Stellard#define TILE_Y_STRIDE (TILE_VECTOR_HEIGHT * TILE_SIZE * TGSI_NUM_CHANNELS) //1024
52efab431684bb17459073f6a2e96044cb2ebd2524José Fonseca
530639765b2850739af1678f10fc0c5706d5827776Brian Paul
5423df86d851dd6cbce1ddd7a45424c7bf14c04a3eJosé Fonseca#ifdef DEBUG
5523df86d851dd6cbce1ddd7a45424c7bf14c04a3eJosé Fonsecaextern unsigned lp_tile_unswizzle_count;
5623df86d851dd6cbce1ddd7a45424c7bf14c04a3eJosé Fonsecaextern unsigned lp_tile_swizzle_count;
5723df86d851dd6cbce1ddd7a45424c7bf14c04a3eJosé Fonseca#endif
580639765b2850739af1678f10fc0c5706d5827776Brian Paul
590639765b2850739af1678f10fc0c5706d5827776Brian Paul
600639765b2850739af1678f10fc0c5706d5827776Brian Paul/**
610639765b2850739af1678f10fc0c5706d5827776Brian Paul * Return offset of the given pixel (and color channel) from the start
620639765b2850739af1678f10fc0c5706d5827776Brian Paul * of a tile, in bytes.
630639765b2850739af1678f10fc0c5706d5827776Brian Paul */
640639765b2850739af1678f10fc0c5706d5827776Brian Paulstatic INLINE unsigned
650639765b2850739af1678f10fc0c5706d5827776Brian Paultile_pixel_offset(unsigned x, unsigned y, unsigned c)
660639765b2850739af1678f10fc0c5706d5827776Brian Paul{
670639765b2850739af1678f10fc0c5706d5827776Brian Paul   unsigned ix = (x / TILE_VECTOR_WIDTH) * TILE_X_STRIDE;
680639765b2850739af1678f10fc0c5706d5827776Brian Paul   unsigned iy = (y / TILE_VECTOR_HEIGHT) * TILE_Y_STRIDE;
690639765b2850739af1678f10fc0c5706d5827776Brian Paul   unsigned offset = iy + ix + c * TILE_C_STRIDE +
700639765b2850739af1678f10fc0c5706d5827776Brian Paul      tile_offset[y % TILE_VECTOR_HEIGHT][x % TILE_VECTOR_WIDTH];
710639765b2850739af1678f10fc0c5706d5827776Brian Paul   return offset;
720639765b2850739af1678f10fc0c5706d5827776Brian Paul}
730639765b2850739af1678f10fc0c5706d5827776Brian Paul
740639765b2850739af1678f10fc0c5706d5827776Brian Paul
750639765b2850739af1678f10fc0c5706d5827776Brian Paul#define TILE_PIXEL(_p, _x, _y, _c)   ((_p)[tile_pixel_offset(_x, _y, _c)])
76efab431684bb17459073f6a2e96044cb2ebd2524José Fonseca
77efab431684bb17459073f6a2e96044cb2ebd2524José Fonseca
783ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonsecavoid
7923df86d851dd6cbce1ddd7a45424c7bf14c04a3eJosé Fonsecalp_tile_swizzle_4ub(enum pipe_format format,
80589ec337f0080893baba996201cf65bb6e1a2fecJosé Fonseca                 uint8_t *dst,
81589ec337f0080893baba996201cf65bb6e1a2fecJosé Fonseca                 const void *src, unsigned src_stride,
826d17f00600ffca7cb39e6f66277cec018ff2c151José Fonseca                 unsigned x, unsigned y);
83589ec337f0080893baba996201cf65bb6e1a2fecJosé Fonseca
843ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca
853ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonsecavoid
8623df86d851dd6cbce1ddd7a45424c7bf14c04a3eJosé Fonsecalp_tile_unswizzle_4ub(enum pipe_format format,
87589ec337f0080893baba996201cf65bb6e1a2fecJosé Fonseca                  const uint8_t *src,
88589ec337f0080893baba996201cf65bb6e1a2fecJosé Fonseca                  void *dst, unsigned dst_stride,
896d17f00600ffca7cb39e6f66277cec018ff2c151José Fonseca                  unsigned x, unsigned y);
90589ec337f0080893baba996201cf65bb6e1a2fecJosé Fonseca
913ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca
923ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca
933ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca#ifdef __cplusplus
943ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca}
953ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca#endif
963ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca
973ce1abf950b7175d65a32fb9d182561a9d3d57f7José Fonseca#endif
98