summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/state_tracker/st_mipmap_tree.c13
-rw-r--r--src/mesa/state_tracker/st_mipmap_tree.h99
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