lp_texture.h revision 3abc7b985ce0787c5103d1a86bd0ba07b127a82f
1/************************************************************************** 2 * 3 * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas. 4 * All Rights Reserved. 5 * 6 * Permission is hereby granted, free of charge, to any person obtaining a 7 * copy of this software and associated documentation files (the 8 * "Software"), to deal in the Software without restriction, including 9 * without limitation the rights to use, copy, modify, merge, publish, 10 * distribute, sub license, and/or sell copies of the Software, and to 11 * permit persons to whom the Software is furnished to do so, subject to 12 * the following conditions: 13 * 14 * The above copyright notice and this permission notice (including the 15 * next paragraph) shall be included in all copies or substantial portions 16 * of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21 * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR 22 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 * 26 **************************************************************************/ 27 28#ifndef LP_TEXTURE_H 29#define LP_TEXTURE_H 30 31 32#include "pipe/p_state.h" 33 34 35#define LP_MAX_TEXTURE_2D_LEVELS 13 /* 4K x 4K for now */ 36#define LP_MAX_TEXTURE_3D_LEVELS 10 /* 512 x 512 x 512 for now */ 37 38 39struct pipe_context; 40struct pipe_screen; 41struct llvmpipe_context; 42 43struct sw_displaytarget; 44 45 46struct llvmpipe_texture 47{ 48 struct pipe_texture base; 49 50 unsigned long level_offset[LP_MAX_TEXTURE_2D_LEVELS]; 51 unsigned stride[LP_MAX_TEXTURE_2D_LEVELS]; 52 53 /** 54 * Display target, for textures with the PIPE_TEXTURE_USAGE_DISPLAY_TARGET 55 * usage. 56 */ 57 struct sw_displaytarget *dt; 58 59 /** 60 * Malloc'ed data for regular textures, or a mapping to dt above. 61 */ 62 void *data; 63 64 unsigned timestamp; 65}; 66 67 68struct llvmpipe_transfer 69{ 70 struct pipe_transfer base; 71 72 unsigned long offset; 73}; 74 75 76/** cast wrappers */ 77static INLINE struct llvmpipe_texture * 78llvmpipe_texture(struct pipe_texture *pt) 79{ 80 return (struct llvmpipe_texture *) pt; 81} 82 83 84static INLINE const struct llvmpipe_texture * 85llvmpipe_texture_const(const struct pipe_texture *pt) 86{ 87 return (const struct llvmpipe_texture *) pt; 88} 89 90 91static INLINE struct llvmpipe_transfer * 92llvmpipe_transfer(struct pipe_transfer *pt) 93{ 94 return (struct llvmpipe_transfer *) pt; 95} 96 97 98static INLINE unsigned 99llvmpipe_texture_stride(struct pipe_texture *texture, 100 unsigned level) 101{ 102 struct llvmpipe_texture *lpt = llvmpipe_texture(texture); 103 assert(level < LP_MAX_TEXTURE_2D_LEVELS); 104 return lpt->stride[level]; 105} 106 107 108void * 109llvmpipe_texture_map(struct pipe_texture *texture, 110 unsigned face, 111 unsigned level, 112 unsigned zslice); 113 114void 115llvmpipe_texture_unmap(struct pipe_texture *texture, 116 unsigned face, 117 unsigned level, 118 unsigned zslice); 119 120extern void 121llvmpipe_init_screen_texture_funcs(struct pipe_screen *screen); 122 123extern void 124llvmpipe_init_context_texture_funcs(struct pipe_context *pipe); 125 126#endif /* LP_TEXTURE_H */ 127