#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;
- /** array [level][face or slice][tile] of layout values) */
- enum lp_texture_layout *layout[LP_MAX_TEXTURE_LEVELS][PIPE_TEX_FACE_MAX];
+ /** 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
};
{
struct llvmpipe_resource *lpr = llvmpipe_resource(resource);
assert(level < LP_MAX_TEXTURE_2D_LEVELS);
- return lpr->stride[level];
+ return lpr->row_stride[level];
}
llvmpipe_resource_data(struct pipe_resource *resource);
-void *
+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);
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 *lpr,
+extern void
+llvmpipe_print_resources(void);
+
+
extern void
llvmpipe_init_screen_texture_funcs(struct pipe_screen *screen);