X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fllvmpipe%2Flp_texture.h;h=4e4a65dcb401d1e260b79655ab301a45e6e8c2f1;hb=06472ad7e835813ef7c9bf8a5cd8b62a25fa9cc3;hp=dd54e17dc4691d11b6474d622f84c7cf6d7fb575;hpb=ee7cf9d80ff962e714bc66487f621e03f21e1293;p=mesa.git diff --git a/src/gallium/drivers/llvmpipe/lp_texture.h b/src/gallium/drivers/llvmpipe/lp_texture.h index dd54e17dc46..4e4a65dcb40 100644 --- a/src/gallium/drivers/llvmpipe/lp_texture.h +++ b/src/gallium/drivers/llvmpipe/lp_texture.h @@ -31,12 +31,7 @@ #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 @@ -92,8 +87,13 @@ struct llvmpipe_resource 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 @@ -112,13 +112,18 @@ struct llvmpipe_resource */ 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 }; @@ -161,7 +166,7 @@ llvmpipe_resource_stride(struct pipe_resource *resource, { struct llvmpipe_resource *lpr = llvmpipe_resource(resource); assert(level < LP_MAX_TEXTURE_2D_LEVELS); - return lpr->stride[level]; + return lpr->row_stride[level]; } @@ -184,7 +189,11 @@ void * 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); @@ -195,6 +204,11 @@ llvmpipe_get_texture_image(struct llvmpipe_resource *resource, 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, @@ -209,6 +223,21 @@ llvmpipe_get_texture_tile(struct llvmpipe_resource *lpr, 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);