summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2009-04-09 11:03:03 -0700
committerEric Anholt <[email protected]>2009-04-15 12:55:50 -0700
commit8bc3a6eb1918710eadecb9b8d28a4afa2150a257 (patch)
tree9cd54becb4845cdbea22bbba33fb34c901525475 /src
parentaf9d202b26f75555b653dbe1c2ebaf6a2cf14d28 (diff)
intel: Fix segfault when doing SW mipmap generation with a PBO texture upload.
Triggered in test-fbo from clutter since 37fb2d9b23eab5dbbb43a212c3475cb8016837d8.
Diffstat (limited to 'src')
-rw-r--r--src/mesa/drivers/dri/intel/intel_tex_image.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_tex_image.c b/src/mesa/drivers/dri/intel/intel_tex_image.c
index 71561cf85cd..c81f2309847 100644
--- a/src/mesa/drivers/dri/intel/intel_tex_image.c
+++ b/src/mesa/drivers/dri/intel/intel_tex_image.c
@@ -316,7 +316,7 @@ intelTexImage(GLcontext * ctx,
GLint postConvHeight = height;
GLint texelBytes, sizeInBytes;
GLuint dstRowStride, srcRowStride = texImage->RowStride;
-
+ GLboolean needs_map;
DBG("%s target %s level %d %dx%dx%d border %d\n", __FUNCTION__,
_mesa_lookup_enum_by_nr(target), level, width, height, depth, border);
@@ -482,8 +482,15 @@ intelTexImage(GLcontext * ctx,
LOCK_HARDWARE(intel);
+ /* Two cases where we need a mapping of the miptree: when the user supplied
+ * data is mapped as well (non-PBO, memcpy upload) or when we're going to do
+ * (software) mipmap generation.
+ */
+ needs_map = (pixels != NULL) || (level == texObj->BaseLevel &&
+ texObj->GenerateMipmap);
+
if (intelImage->mt) {
- if (pixels)
+ if (needs_map)
texImage->Data = intel_miptree_image_map(intel,
intelImage->mt,
intelImage->face,
@@ -549,7 +556,7 @@ intelTexImage(GLcontext * ctx,
_mesa_unmap_teximage_pbo(ctx, unpack);
if (intelImage->mt) {
- if (pixels)
+ if (needs_map)
intel_miptree_image_unmap(intel, intelImage->mt);
texImage->Data = NULL;
}