summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2011-09-28 15:25:30 -0700
committerEric Anholt <eric@anholt.net>2011-10-03 13:29:38 -0700
commit055995abc4e2f4a73122bd008a0e6f0558300d82 (patch)
treef99665efeadab2973890e20ebe22357e8a2ae893
parent9aff2944a449f586e32f537350e590910d09d016 (diff)
intel: Clean up the function chain for mapping texture images for swrast.
Too many separate functions each called from one location (in different files). This code should all die soon when swrast starts using MapTextureImage.
-rw-r--r--src/mesa/drivers/dri/intel/intel_mipmap_tree.c57
-rw-r--r--src/mesa/drivers/dri/intel/intel_mipmap_tree.h12
-rw-r--r--src/mesa/drivers/dri/intel/intel_tex_validate.c109
3 files changed, 65 insertions, 113 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
index 8289c398ff1..c25df35ff84 100644
--- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
@@ -310,63 +310,6 @@ intel_miptree_get_image_offset(struct intel_mipmap_tree *mt,
}
/**
- * Map a teximage in a mipmap tree.
- * \param row_stride returns row stride in bytes
- * \param image_stride returns image stride in bytes (for 3D textures).
- * \param image_offsets pointer to array of pixel offsets from the returned
- * pointer to each depth image
- * \return address of mapping
- */
-GLubyte *
-intel_miptree_image_map(struct intel_context * intel,
- struct intel_mipmap_tree * mt,
- GLuint face,
- GLuint level,
- GLuint * row_stride, GLuint * image_offsets)
-{
- GLuint x, y;
-
- if (row_stride)
- *row_stride = mt->region->pitch * mt->cpp;
-
- if (mt->target == GL_TEXTURE_3D) {
- int i;
-
- for (i = 0; i < mt->level[level].depth; i++) {
-
- intel_miptree_get_image_offset(mt, level, face, i,
- &x, &y);
- image_offsets[i] = x + y * mt->region->pitch;
- }
-
- DBG("%s \n", __FUNCTION__);
-
- return intel_region_map(intel, mt->region);
- } else {
- assert(mt->level[level].depth == 1);
- intel_miptree_get_image_offset(mt, level, face, 0,
- &x, &y);
- image_offsets[0] = 0;
-
- DBG("%s: (%d,%d) -> (%d, %d)/%d\n",
- __FUNCTION__, face, level, x, y, mt->region->pitch * mt->cpp);
-
- return intel_region_map(intel, mt->region) +
- (x + y * mt->region->pitch) * mt->cpp;
- }
-}
-
-
-void
-intel_miptree_image_unmap(struct intel_context *intel,
- struct intel_mipmap_tree *mt)
-{
- DBG("%s\n", __FUNCTION__);
- intel_region_unmap(intel, mt->region);
-}
-
-
-/**
* Upload data for a particular image.
*/
void
diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h
index 0d4d2f91f7a..7ca24f9bb60 100644
--- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h
+++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h
@@ -165,18 +165,6 @@ void intel_miptree_release(struct intel_mipmap_tree **mt);
GLboolean intel_miptree_match_image(struct intel_mipmap_tree *mt,
struct gl_texture_image *image);
-/* Return a pointer to an image within a tree. Return image stride as
- * well.
- */
-GLubyte *intel_miptree_image_map(struct intel_context *intel,
- struct intel_mipmap_tree *mt,
- GLuint face,
- GLuint level,
- GLuint * row_stride, GLuint * image_stride);
-
-void intel_miptree_image_unmap(struct intel_context *intel,
- struct intel_mipmap_tree *mt);
-
void
intel_miptree_get_image_offset(struct intel_mipmap_tree *mt,
GLuint level, GLuint face, GLuint depth,
diff --git a/src/mesa/drivers/dri/intel/intel_tex_validate.c b/src/mesa/drivers/dri/intel/intel_tex_validate.c
index 137910816f5..f227ab8f8b1 100644
--- a/src/mesa/drivers/dri/intel/intel_tex_validate.c
+++ b/src/mesa/drivers/dri/intel/intel_tex_validate.c
@@ -156,70 +156,91 @@ intel_finalize_mipmap_tree(struct intel_context *intel, GLuint unit)
return GL_TRUE;
}
-void
-intel_tex_map_level_images(struct intel_context *intel,
- struct intel_texture_object *intelObj,
- int level)
+static void
+intel_tex_map_image_for_swrast(struct intel_context *intel,
+ struct intel_texture_image *intel_image)
{
- GLuint nr_faces = (intelObj->base.Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
- GLuint face;
+ int level = intel_image->base.Base.Level;
+ int face = intel_image->base.Base.Face;
+ struct intel_mipmap_tree *mt;
+ unsigned int x, y;
- for (face = 0; face < nr_faces; face++) {
- struct intel_texture_image *intelImage =
- intel_texture_image(intelObj->base.Image[face][level]);
-
- if (intelImage && intelImage->mt) {
- intelImage->base.Base.Data =
- intel_miptree_image_map(intel,
- intelImage->mt,
- intelImage->base.Base.Face,
- intelImage->base.Base.Level,
- &intelImage->base.Base.RowStride,
- intelImage->base.Base.ImageOffsets);
- /* convert stride to texels, not bytes */
- intelImage->base.Base.RowStride /= intelImage->mt->cpp;
- /* intelImage->base.ImageStride /= intelImage->mt->cpp; */
+ if (!intel_image || !intel_image->mt)
+ return;
+
+ mt = intel_image->mt;
+
+ if (mt->target == GL_TEXTURE_3D) {
+ int i;
+
+ /* ImageOffsets[] is only used for swrast's fetch_texel_3d, so we can't
+ * share code with the normal path.
+ */
+ for (i = 0; i < mt->level[level].depth; i++) {
+ intel_miptree_get_image_offset(mt, level, face, i, &x, &y);
+ intel_image->base.Base.ImageOffsets[i] = x + y * mt->region->pitch;
}
+
+ DBG("%s \n", __FUNCTION__);
+
+ intel_image->base.Base.Data = intel_region_map(intel, mt->region);
+ } else {
+ assert(mt->level[level].depth == 1);
+ intel_miptree_get_image_offset(mt, level, face, 0, &x, &y);
+ intel_image->base.Base.ImageOffsets[0] = 0;
+
+ DBG("%s: (%d,%d) -> (%d, %d)/%d\n",
+ __FUNCTION__, face, level, x, y, mt->region->pitch * mt->cpp);
+
+ intel_image->base.Base.Data = intel_region_map(intel, mt->region) +
+ (x + y * mt->region->pitch) * mt->cpp;
}
+
+ intel_image->base.Base.RowStride = mt->region->pitch;
}
-void
-intel_tex_unmap_level_images(struct intel_context *intel,
- struct intel_texture_object *intelObj,
- int level)
+static void
+intel_tex_unmap_image_for_swrast(struct intel_context *intel,
+ struct intel_texture_image *intel_image)
{
- GLuint nr_faces = (intelObj->base.Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
- GLuint face;
-
- for (face = 0; face < nr_faces; face++) {
- struct intel_texture_image *intelImage =
- intel_texture_image(intelObj->base.Image[face][level]);
-
- if (intelImage && intelImage->mt) {
- intel_miptree_image_unmap(intel, intelImage->mt);
- intelImage->base.Base.Data = NULL;
- }
+ if (intel_image && intel_image->mt) {
+ intel_region_unmap(intel, intel_image->mt->region);
+ intel_image->base.Base.Data = NULL;
}
}
void
intel_tex_map_images(struct intel_context *intel,
- struct intel_texture_object *intelObj)
+ struct intel_texture_object *intelObj)
{
- int i;
+ GLuint nr_faces = (intelObj->base.Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
+ int i, face;
DBG("%s\n", __FUNCTION__);
- for (i = intelObj->base.BaseLevel; i <= intelObj->_MaxLevel; i++)
- intel_tex_map_level_images(intel, intelObj, i);
+ for (i = intelObj->base.BaseLevel; i <= intelObj->_MaxLevel; i++) {
+ for (face = 0; face < nr_faces; face++) {
+ struct intel_texture_image *intel_image =
+ intel_texture_image(intelObj->base.Image[face][i]);
+
+ intel_tex_map_image_for_swrast(intel, intel_image);
+ }
+ }
}
void
intel_tex_unmap_images(struct intel_context *intel,
- struct intel_texture_object *intelObj)
+ struct intel_texture_object *intelObj)
{
- int i;
+ GLuint nr_faces = (intelObj->base.Target == GL_TEXTURE_CUBE_MAP) ? 6 : 1;
+ int i, face;
- for (i = intelObj->base.BaseLevel; i <= intelObj->_MaxLevel; i++)
- intel_tex_unmap_level_images(intel, intelObj, i);
+ for (i = intelObj->base.BaseLevel; i <= intelObj->_MaxLevel; i++) {
+ for (face = 0; face < nr_faces; face++) {
+ struct intel_texture_image *intel_image =
+ intel_texture_image(intelObj->base.Image[face][i]);
+
+ intel_tex_unmap_image_for_swrast(intel, intel_image);
+ }
+ }
}