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