#include "pipe/p_state.h"
#include "util/u_debug.h"
-
-
-#define LP_MAX_TEXTURE_2D_LEVELS 12 /* 2K x 2K for now */
-#define LP_MAX_TEXTURE_3D_LEVELS 10 /* 512 x 512 x 512 for now */
-
-#define LP_MAX_TEXTURE_LEVELS LP_MAX_TEXTURE_2D_LEVELS
+#include "lp_limits.h"
enum lp_texture_usage
struct pipe_resource base;
/** Row stride in bytes */
- unsigned stride[LP_MAX_TEXTURE_LEVELS];
+ unsigned row_stride[LP_MAX_TEXTURE_LEVELS];
+ /** Image stride (for cube maps or 3D textures) in bytes */
+ unsigned img_stride[LP_MAX_TEXTURE_LEVELS];
unsigned tiles_per_row[LP_MAX_TEXTURE_LEVELS];
+ unsigned tiles_per_image[LP_MAX_TEXTURE_LEVELS];
+ /** Number of 3D slices or cube faces per level */
+ unsigned num_slices_faces[LP_MAX_TEXTURE_LEVELS];
/**
* Display target, for textures with the PIPE_BIND_DISPLAY_TARGET
*/
void *data;
- /** per-tile layout info */
- enum lp_texture_layout *layout[PIPE_TEX_FACE_MAX][LP_MAX_TEXTURE_LEVELS];
+ /** array [level][face or slice][tile_y][tile_x] of layout values) */
+ enum lp_texture_layout *layout[LP_MAX_TEXTURE_LEVELS];
boolean userBuffer; /** Is this a user-space buffer? */
unsigned timestamp;
unsigned id; /**< temporary, for debugging */
+
+#ifdef DEBUG
+ /** for linked list */
+ struct llvmpipe_resource *prev, *next;
+#endif
};
void llvmpipe_init_context_resource_funcs(struct pipe_context *pipe);
static INLINE unsigned
-llvmpipe_resource_stride(struct pipe_resource *texture,
+llvmpipe_resource_stride(struct pipe_resource *resource,
unsigned level)
{
- struct llvmpipe_resource *lpt = llvmpipe_resource(texture);
+ struct llvmpipe_resource *lpr = llvmpipe_resource(resource);
assert(level < LP_MAX_TEXTURE_2D_LEVELS);
- return lpt->stride[level];
+ return lpr->row_stride[level];
}
void *
-llvmpipe_resource_map(struct pipe_resource *texture,
- unsigned face,
+llvmpipe_resource_map(struct pipe_resource *resource,
+ unsigned face_slice,
unsigned level,
unsigned zslice,
enum lp_texture_usage tex_usage,
enum lp_texture_layout layout);
void
-llvmpipe_resource_unmap(struct pipe_resource *texture,
- unsigned face,
+llvmpipe_resource_unmap(struct pipe_resource *resource,
+ unsigned face_slice,
unsigned level,
unsigned zslice);
llvmpipe_resource_data(struct pipe_resource *resource);
-void *
-llvmpipe_get_texture_image_address(struct llvmpipe_resource *lpt,
- unsigned face, unsigned level,
+unsigned
+llvmpipe_resource_size(const struct pipe_resource *resource);
+
+
+ubyte *
+llvmpipe_get_texture_image_address(struct llvmpipe_resource *lpr,
+ unsigned face_slice, unsigned level,
enum lp_texture_layout layout);
void *
llvmpipe_get_texture_image(struct llvmpipe_resource *resource,
- unsigned face, unsigned level,
+ unsigned face_slice, unsigned level,
enum lp_texture_usage usage,
enum lp_texture_layout layout);
+void *
+llvmpipe_get_texture_image_all(struct llvmpipe_resource *lpr,
+ unsigned level,
+ enum lp_texture_usage usage,
+ enum lp_texture_layout layout);
ubyte *
-llvmpipe_get_texture_tile_linear(struct llvmpipe_resource *lpt,
- unsigned face, unsigned level,
+llvmpipe_get_texture_tile_linear(struct llvmpipe_resource *lpr,
+ unsigned face_slice, unsigned level,
enum lp_texture_usage usage,
unsigned x, unsigned y);
ubyte *
-llvmpipe_get_texture_tile(struct llvmpipe_resource *lpt,
- unsigned face, unsigned level,
+llvmpipe_get_texture_tile(struct llvmpipe_resource *lpr,
+ unsigned face_slice, unsigned level,
enum lp_texture_usage usage,
unsigned x, unsigned y);
+void
+llvmpipe_unswizzle_cbuf_tile(struct llvmpipe_resource *lpr,
+ unsigned face_slice, unsigned level,
+ unsigned x, unsigned y,
+ uint8_t *tile);
+
+void
+llvmpipe_swizzle_cbuf_tile(struct llvmpipe_resource *lpr,
+ unsigned face_slice, unsigned level,
+ unsigned x, unsigned y,
+ uint8_t *tile);
+
+extern void
+llvmpipe_print_resources(void);
+
extern void
llvmpipe_init_screen_texture_funcs(struct pipe_screen *screen);