1*7688df22SAndroid Build Coastguard Worker /* 2*7688df22SAndroid Build Coastguard Worker * Copyright © 2011 Red Hat All Rights Reserved. 3*7688df22SAndroid Build Coastguard Worker * 4*7688df22SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining 5*7688df22SAndroid Build Coastguard Worker * a copy of this software and associated documentation files (the 6*7688df22SAndroid Build Coastguard Worker * "Software"), to deal in the Software without restriction, including 7*7688df22SAndroid Build Coastguard Worker * without limitation the rights to use, copy, modify, merge, publish, 8*7688df22SAndroid Build Coastguard Worker * distribute, sub license, and/or sell copies of the Software, and to 9*7688df22SAndroid Build Coastguard Worker * permit persons to whom the Software is furnished to do so, subject to 10*7688df22SAndroid Build Coastguard Worker * the following conditions: 11*7688df22SAndroid Build Coastguard Worker * 12*7688df22SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 13*7688df22SAndroid Build Coastguard Worker * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 14*7688df22SAndroid Build Coastguard Worker * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 15*7688df22SAndroid Build Coastguard Worker * NON-INFRINGEMENT. IN NO EVENT SHALL THE COPYRIGHT HOLDERS, AUTHORS 16*7688df22SAndroid Build Coastguard Worker * AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17*7688df22SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 18*7688df22SAndroid Build Coastguard Worker * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 19*7688df22SAndroid Build Coastguard Worker * USE OR OTHER DEALINGS IN THE SOFTWARE. 20*7688df22SAndroid Build Coastguard Worker * 21*7688df22SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the 22*7688df22SAndroid Build Coastguard Worker * next paragraph) shall be included in all copies or substantial portions 23*7688df22SAndroid Build Coastguard Worker * of the Software. 24*7688df22SAndroid Build Coastguard Worker */ 25*7688df22SAndroid Build Coastguard Worker /* 26*7688df22SAndroid Build Coastguard Worker * Authors: 27*7688df22SAndroid Build Coastguard Worker * Jérôme Glisse <[email protected]> 28*7688df22SAndroid Build Coastguard Worker */ 29*7688df22SAndroid Build Coastguard Worker #ifndef RADEON_SURFACE_H 30*7688df22SAndroid Build Coastguard Worker #define RADEON_SURFACE_H 31*7688df22SAndroid Build Coastguard Worker 32*7688df22SAndroid Build Coastguard Worker /* Note : 33*7688df22SAndroid Build Coastguard Worker * 34*7688df22SAndroid Build Coastguard Worker * For texture array, the n layer are stored one after the other within each 35*7688df22SAndroid Build Coastguard Worker * mipmap level. 0 value for field than can be hint is always valid. 36*7688df22SAndroid Build Coastguard Worker */ 37*7688df22SAndroid Build Coastguard Worker 38*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_MAX_LEVEL 32 39*7688df22SAndroid Build Coastguard Worker 40*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_TYPE_MASK 0xFF 41*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_TYPE_SHIFT 0 42*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_TYPE_1D 0 43*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_TYPE_2D 1 44*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_TYPE_3D 2 45*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_TYPE_CUBEMAP 3 46*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_TYPE_1D_ARRAY 4 47*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_TYPE_2D_ARRAY 5 48*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_MODE_MASK 0xFF 49*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_MODE_SHIFT 8 50*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_MODE_LINEAR 0 51*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_MODE_LINEAR_ALIGNED 1 52*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_MODE_1D 2 53*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_MODE_2D 3 54*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_SCANOUT (1 << 16) 55*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_ZBUFFER (1 << 17) 56*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_SBUFFER (1 << 18) 57*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_Z_OR_SBUFFER (RADEON_SURF_ZBUFFER | RADEON_SURF_SBUFFER) 58*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_HAS_SBUFFER_MIPTREE (1 << 19) 59*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_HAS_TILE_MODE_INDEX (1 << 20) 60*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_FMASK (1 << 21) 61*7688df22SAndroid Build Coastguard Worker 62*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_GET(v, field) (((v) >> RADEON_SURF_ ## field ## _SHIFT) & RADEON_SURF_ ## field ## _MASK) 63*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_SET(v, field) (((v) & RADEON_SURF_ ## field ## _MASK) << RADEON_SURF_ ## field ## _SHIFT) 64*7688df22SAndroid Build Coastguard Worker #define RADEON_SURF_CLR(v, field) ((v) & ~(RADEON_SURF_ ## field ## _MASK << RADEON_SURF_ ## field ## _SHIFT)) 65*7688df22SAndroid Build Coastguard Worker 66*7688df22SAndroid Build Coastguard Worker /* first field up to mode need to match r6 struct so that we can reuse 67*7688df22SAndroid Build Coastguard Worker * same function for linear & linear aligned 68*7688df22SAndroid Build Coastguard Worker */ 69*7688df22SAndroid Build Coastguard Worker struct radeon_surface_level { 70*7688df22SAndroid Build Coastguard Worker uint64_t offset; 71*7688df22SAndroid Build Coastguard Worker uint64_t slice_size; 72*7688df22SAndroid Build Coastguard Worker uint32_t npix_x; 73*7688df22SAndroid Build Coastguard Worker uint32_t npix_y; 74*7688df22SAndroid Build Coastguard Worker uint32_t npix_z; 75*7688df22SAndroid Build Coastguard Worker uint32_t nblk_x; 76*7688df22SAndroid Build Coastguard Worker uint32_t nblk_y; 77*7688df22SAndroid Build Coastguard Worker uint32_t nblk_z; 78*7688df22SAndroid Build Coastguard Worker uint32_t pitch_bytes; 79*7688df22SAndroid Build Coastguard Worker uint32_t mode; 80*7688df22SAndroid Build Coastguard Worker }; 81*7688df22SAndroid Build Coastguard Worker 82*7688df22SAndroid Build Coastguard Worker enum si_tiling_mode { 83*7688df22SAndroid Build Coastguard Worker SI_TILING_AUTO = 0, 84*7688df22SAndroid Build Coastguard Worker 85*7688df22SAndroid Build Coastguard Worker SI_TILING_COLOR_1D, 86*7688df22SAndroid Build Coastguard Worker SI_TILING_COLOR_1D_SCANOUT, 87*7688df22SAndroid Build Coastguard Worker SI_TILING_COLOR_2D_8BPP, 88*7688df22SAndroid Build Coastguard Worker SI_TILING_COLOR_2D_16BPP, 89*7688df22SAndroid Build Coastguard Worker SI_TILING_COLOR_2D_32BPP, 90*7688df22SAndroid Build Coastguard Worker SI_TILING_COLOR_2D_64BPP, 91*7688df22SAndroid Build Coastguard Worker SI_TILING_COLOR_2D_SCANOUT_16BPP, 92*7688df22SAndroid Build Coastguard Worker SI_TILING_COLOR_2D_SCANOUT_32BPP, 93*7688df22SAndroid Build Coastguard Worker SI_TILING_COLOR_LINEAR, 94*7688df22SAndroid Build Coastguard Worker 95*7688df22SAndroid Build Coastguard Worker SI_TILING_STENCIL_1D, 96*7688df22SAndroid Build Coastguard Worker SI_TILING_STENCIL_2D, 97*7688df22SAndroid Build Coastguard Worker SI_TILING_STENCIL_2D_2AA, 98*7688df22SAndroid Build Coastguard Worker SI_TILING_STENCIL_2D_4AA, 99*7688df22SAndroid Build Coastguard Worker SI_TILING_STENCIL_2D_8AA, 100*7688df22SAndroid Build Coastguard Worker 101*7688df22SAndroid Build Coastguard Worker SI_TILING_DEPTH_1D, 102*7688df22SAndroid Build Coastguard Worker SI_TILING_DEPTH_2D, 103*7688df22SAndroid Build Coastguard Worker SI_TILING_DEPTH_2D_2AA, 104*7688df22SAndroid Build Coastguard Worker SI_TILING_DEPTH_2D_4AA, 105*7688df22SAndroid Build Coastguard Worker SI_TILING_DEPTH_2D_8AA, 106*7688df22SAndroid Build Coastguard Worker 107*7688df22SAndroid Build Coastguard Worker SI_TILING_LAST_MODE, 108*7688df22SAndroid Build Coastguard Worker }; 109*7688df22SAndroid Build Coastguard Worker 110*7688df22SAndroid Build Coastguard Worker struct radeon_surface { 111*7688df22SAndroid Build Coastguard Worker uint32_t npix_x; 112*7688df22SAndroid Build Coastguard Worker uint32_t npix_y; 113*7688df22SAndroid Build Coastguard Worker uint32_t npix_z; 114*7688df22SAndroid Build Coastguard Worker uint32_t blk_w; 115*7688df22SAndroid Build Coastguard Worker uint32_t blk_h; 116*7688df22SAndroid Build Coastguard Worker uint32_t blk_d; 117*7688df22SAndroid Build Coastguard Worker uint32_t array_size; 118*7688df22SAndroid Build Coastguard Worker uint32_t last_level; 119*7688df22SAndroid Build Coastguard Worker uint32_t bpe; 120*7688df22SAndroid Build Coastguard Worker uint32_t nsamples; 121*7688df22SAndroid Build Coastguard Worker uint32_t flags; 122*7688df22SAndroid Build Coastguard Worker /* Following is updated/fill by the allocator. It's allowed to 123*7688df22SAndroid Build Coastguard Worker * set some of the value but they are use as hint and can be 124*7688df22SAndroid Build Coastguard Worker * overridden (things lile bankw/bankh on evergreen for 125*7688df22SAndroid Build Coastguard Worker * instance). 126*7688df22SAndroid Build Coastguard Worker */ 127*7688df22SAndroid Build Coastguard Worker uint64_t bo_size; 128*7688df22SAndroid Build Coastguard Worker uint64_t bo_alignment; 129*7688df22SAndroid Build Coastguard Worker /* apply to eg */ 130*7688df22SAndroid Build Coastguard Worker uint32_t bankw; 131*7688df22SAndroid Build Coastguard Worker uint32_t bankh; 132*7688df22SAndroid Build Coastguard Worker uint32_t mtilea; 133*7688df22SAndroid Build Coastguard Worker uint32_t tile_split; 134*7688df22SAndroid Build Coastguard Worker uint32_t stencil_tile_split; 135*7688df22SAndroid Build Coastguard Worker uint64_t stencil_offset; 136*7688df22SAndroid Build Coastguard Worker struct radeon_surface_level level[RADEON_SURF_MAX_LEVEL]; 137*7688df22SAndroid Build Coastguard Worker struct radeon_surface_level stencil_level[RADEON_SURF_MAX_LEVEL]; 138*7688df22SAndroid Build Coastguard Worker uint32_t tiling_index[RADEON_SURF_MAX_LEVEL]; 139*7688df22SAndroid Build Coastguard Worker uint32_t stencil_tiling_index[RADEON_SURF_MAX_LEVEL]; 140*7688df22SAndroid Build Coastguard Worker }; 141*7688df22SAndroid Build Coastguard Worker 142*7688df22SAndroid Build Coastguard Worker struct radeon_surface_manager *radeon_surface_manager_new(int fd); 143*7688df22SAndroid Build Coastguard Worker void radeon_surface_manager_free(struct radeon_surface_manager *surf_man); 144*7688df22SAndroid Build Coastguard Worker int radeon_surface_init(struct radeon_surface_manager *surf_man, 145*7688df22SAndroid Build Coastguard Worker struct radeon_surface *surf); 146*7688df22SAndroid Build Coastguard Worker int radeon_surface_best(struct radeon_surface_manager *surf_man, 147*7688df22SAndroid Build Coastguard Worker struct radeon_surface *surf); 148*7688df22SAndroid Build Coastguard Worker 149*7688df22SAndroid Build Coastguard Worker #endif 150