[Mesa-dev] [PATCH] i915: Set swrast_texture_image::Buffer and ::Map during swrast mapping

Ian Romanick idr at freedesktop.org
Tue Feb 14 10:57:17 PST 2012


From: Ian Romanick <ian.d.romanick at intel.com>

Before calling _tnl_run_pipeline, the i915 driver maps all textures
used in vertex shaders (via intel_tex_map_images).  Later run_vp tries
to map the textures again (via _swrast_map_texture).  However, this
just replaces the actual mappings with NULL pointers.  When the
pointers are dereferened, a segfault occurs.

Setting swrast_texture_image::Buffer in intel_tex_map_images works
around the problem, but I have a hard time believing this is the right
fix.

NOTE: This is a candidate for the 8.0 branch.

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
Cc: Eric Anholt <eric at anholt.net>
Cc: Brian Paul <brianp at vmware.com>
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=45882
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=45885
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=45886
---
 src/mesa/drivers/dri/intel/intel_tex_validate.c |    2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/src/mesa/drivers/dri/intel/intel_tex_validate.c b/src/mesa/drivers/dri/intel/intel_tex_validate.c
index b96f2a4..b91f364 100644
--- a/src/mesa/drivers/dri/intel/intel_tex_validate.c
+++ b/src/mesa/drivers/dri/intel/intel_tex_validate.c
@@ -158,6 +158,7 @@ intel_tex_map_image_for_swrast(struct intel_context *intel,
 
       intel_image->base.Map = intel_region_map(intel, mt->region, mode) +
 	 (x + y * mt->region->pitch) * mt->cpp;
+      intel_image->base.Buffer = intel_image->base.Map;
    }
 
    intel_image->base.RowStride = mt->region->pitch;
@@ -170,6 +171,7 @@ intel_tex_unmap_image_for_swrast(struct intel_context *intel,
    if (intel_image && intel_image->mt) {
       intel_region_unmap(intel, intel_image->mt->region);
       intel_image->base.Map = NULL;
+      intel_image->base.Buffer = NULL;
    }
 }
 
-- 
1.7.6.5



More information about the mesa-dev mailing list