diff options
-rw-r--r-- | src/mesa/state_tracker/st_mipmap_tree.c | 13 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_mipmap_tree.h | 99 |
2 files changed, 68 insertions, 44 deletions
diff --git a/src/mesa/state_tracker/st_mipmap_tree.c b/src/mesa/state_tracker/st_mipmap_tree.c index e99cd987e8b..6293cc8f512 100644 --- a/src/mesa/state_tracker/st_mipmap_tree.c +++ b/src/mesa/state_tracker/st_mipmap_tree.c @@ -179,7 +179,7 @@ st_miptree_depth_offsets(struct pipe_mipmap_tree *mt, GLuint level) GLuint -st_miptree_image_offset(struct pipe_mipmap_tree * mt, +st_miptree_image_offset(const struct pipe_mipmap_tree * mt, GLuint face, GLuint level) { if (mt->target == GL_TEXTURE_CUBE_MAP_ARB) @@ -190,6 +190,17 @@ st_miptree_image_offset(struct pipe_mipmap_tree * mt, } +GLuint +st_miptree_texel_offset(const struct pipe_mipmap_tree * mt, + GLuint face, GLuint level, + GLuint col, GLuint row, GLuint img) +{ + GLuint imgOffset = st_miptree_image_offset(mt, face, level); + + return imgOffset + row * (mt->pitch + col) * mt->cpp; +} + + /** * Map a teximage in a mipmap tree. diff --git a/src/mesa/state_tracker/st_mipmap_tree.h b/src/mesa/state_tracker/st_mipmap_tree.h index ea3b52ca425..3e7fd7fa0ce 100644 --- a/src/mesa/state_tracker/st_mipmap_tree.h +++ b/src/mesa/state_tracker/st_mipmap_tree.h @@ -36,70 +36,83 @@ struct pipe_mipmap_tree; struct pipe_region; -struct pipe_mipmap_tree *st_miptree_create(struct pipe_context *pipe, - GLenum target, - GLenum internal_format, - GLuint first_level, - GLuint last_level, - GLuint width0, - GLuint height0, - GLuint depth0, - GLuint cpp, - GLuint compress_byte); - -void st_miptree_reference(struct pipe_mipmap_tree **dst, - struct pipe_mipmap_tree *src); - -void st_miptree_release(struct pipe_context *pipe, - struct pipe_mipmap_tree **mt); +extern struct pipe_mipmap_tree * +st_miptree_create(struct pipe_context *pipe, + GLenum target, + GLenum internal_format, + GLuint first_level, + GLuint last_level, + GLuint width0, + GLuint height0, + GLuint depth0, + GLuint cpp, + GLuint compress_byte); + +extern void +st_miptree_reference(struct pipe_mipmap_tree **dst, + struct pipe_mipmap_tree *src); + +extern void +st_miptree_release(struct pipe_context *pipe, struct pipe_mipmap_tree **mt); + /* Check if an image fits an existing mipmap tree layout */ -GLboolean st_miptree_match_image(struct pipe_mipmap_tree *mt, - struct gl_texture_image *image, - GLuint face, GLuint level); +extern GLboolean +st_miptree_match_image(struct pipe_mipmap_tree *mt, + struct gl_texture_image *image, + GLuint face, GLuint level); /* Return a pointer to an image within a tree. Return image stride as * well. */ -GLubyte *st_miptree_image_map(struct pipe_context *pipe, - struct pipe_mipmap_tree *mt, - GLuint face, - GLuint level, - GLuint * row_stride, GLuint * image_stride); +extern GLubyte * +st_miptree_image_map(struct pipe_context *pipe, + struct pipe_mipmap_tree *mt, + GLuint face, GLuint level, + GLuint * row_stride, GLuint * image_stride); + +extern void +st_miptree_image_unmap(struct pipe_context *pipe, + struct pipe_mipmap_tree *mt); + -void st_miptree_image_unmap(struct pipe_context *pipe, - struct pipe_mipmap_tree *mt); +/* Return pointers to each 2d slice within an image. Indexed by depth + * value. + */ +extern const GLuint * +st_miptree_depth_offsets(struct pipe_mipmap_tree *mt, GLuint level); /* Return the linear offset of an image relative to the start of the * tree: */ -GLuint st_miptree_image_offset(struct pipe_mipmap_tree *mt, - GLuint face, GLuint level); +extern GLuint +st_miptree_image_offset(const struct pipe_mipmap_tree *mt, + GLuint face, GLuint level); -/* Return pointers to each 2d slice within an image. Indexed by depth - * value. - */ -const GLuint *st_miptree_depth_offsets(struct pipe_mipmap_tree *mt, - GLuint level); +extern GLuint +st_miptree_texel_offset(const struct pipe_mipmap_tree * mt, + GLuint face, GLuint level, + GLuint col, GLuint row, GLuint img); /* Upload an image into a tree */ -void st_miptree_image_data(struct pipe_context *pipe, - struct pipe_mipmap_tree *dst, - GLuint face, - GLuint level, - void *src, - GLuint src_row_pitch, GLuint src_image_pitch); +extern void +st_miptree_image_data(struct pipe_context *pipe, + struct pipe_mipmap_tree *dst, + GLuint face, GLuint level, void *src, + GLuint src_row_pitch, GLuint src_image_pitch); + /* Copy an image between two trees */ -void st_miptree_image_copy(struct pipe_context *pipe, - struct pipe_mipmap_tree *dst, - GLuint face, GLuint level, - struct pipe_mipmap_tree *src); +extern void +st_miptree_image_copy(struct pipe_context *pipe, + struct pipe_mipmap_tree *dst, + GLuint face, GLuint level, + struct pipe_mipmap_tree *src); #endif |