1 /* 2 * Copyright © 2014 Broadcom 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21 * IN THE SOFTWARE. 22 */ 23 24 #ifndef V3D_TILING_H 25 #define V3D_TILING_H 26 27 #include "util/u_box.h" 28 29 /* A UIFblock is a 256-byte region of memory that's 256-byte aligned. These 30 * will be grouped in 4x4 blocks (left-to-right, then top-to-bottom) in a 4KB 31 * page. Those pages are then arranged left-to-right, top-to-bottom, to cover 32 * an image. 33 * 34 * The inside of a UIFblock, for packed pixels, will be split into 4 64-byte 35 * utiles. Utiles may be 8x8 (8bpp), 8x4(16bpp) or 4x4 (32bpp). 36 */ 37 38 /** 39 * Tiling mode enum used for v3d_resource.c, which maps directly to the Memory 40 * Format field of render target and Z/Stencil config. 41 */ 42 enum v3d_tiling_mode { 43 /* Untiled resources. Not valid as texture inputs. */ 44 V3D_TILING_RASTER, 45 46 /* Single line of u-tiles. */ 47 V3D_TILING_LINEARTILE, 48 49 /* Departure from standard 4-UIF block column format. */ 50 V3D_TILING_UBLINEAR_1_COLUMN, 51 52 /* Departure from standard 4-UIF block column format. */ 53 V3D_TILING_UBLINEAR_2_COLUMN, 54 55 /* Normal tiling format: grouped in 4x4 UIFblocks, each of which is 56 * split 2x2 into utiles. 57 */ 58 V3D_TILING_UIF_NO_XOR, 59 60 /* Normal tiling format: grouped in 4x4 UIFblocks, each of which is 61 * split 2x2 into utiles. 62 */ 63 V3D_TILING_UIF_XOR, 64 }; 65 66 uint32_t v3d_utile_width(int cpp) ATTRIBUTE_CONST; 67 uint32_t v3d_utile_height(int cpp) ATTRIBUTE_CONST; 68 bool v3d_size_is_lt(uint32_t width, uint32_t height, int cpp) ATTRIBUTE_CONST; 69 void v3d_load_tiled_image(void *dst, uint32_t dst_stride, 70 void *src, uint32_t src_stride, 71 enum v3d_tiling_mode tiling_format, int cpp, 72 uint32_t image_h, 73 const struct pipe_box *box); 74 void v3d_store_tiled_image(void *dst, uint32_t dst_stride, 75 void *src, uint32_t src_stride, 76 enum v3d_tiling_mode tiling_format, int cpp, 77 uint32_t image_h, 78 const struct pipe_box *box); 79 80 #endif /* V3D_TILING_H */ 81