[Mesa-dev] [PATCH] i965: Fix segfaults from 45a28a927ab7f29ff325b9326d386a39ba538c18

Eric Anholt eric at anholt.net
Mon Feb 4 09:42:38 PST 2013


If you look up a level that isn't in the miptree, you crash.
---
 src/mesa/drivers/dri/i965/brw_wm_surface_state.c  |    3 ++-
 src/mesa/drivers/dri/i965/gen7_wm_surface_state.c |    3 ++-
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
index e732b6d..f8251b2 100644
--- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
@@ -871,7 +871,8 @@ brw_update_texture_surface(struct gl_context *ctx,
 
    surf[4] = 0;
 
-   intel_miptree_get_tile_offsets(intelObj->mt, 0, 0, &tile_x, &tile_y);
+   intel_miptree_get_tile_offsets(intelObj->mt, firstImage->Level, 0,
+                                  &tile_x, &tile_y);
    assert(brw->has_surface_tile_offset || (tile_x == 0 && tile_y == 0));
    /* Note that the low bits of these fields are missing, so
     * there's the possibility of getting in trouble.
diff --git a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
index 9c8bc17..179024a 100644
--- a/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
+++ b/src/mesa/drivers/dri/i965/gen7_wm_surface_state.c
@@ -334,7 +334,8 @@ gen7_update_texture_surface(struct gl_context *ctx,
    surf[3] = SET_FIELD(depth - 1, BRW_SURFACE_DEPTH) |
              ((intelObj->mt->region->pitch) - 1);
 
-   intel_miptree_get_tile_offsets(intelObj->mt, 0, 0, &tile_x, &tile_y);
+   intel_miptree_get_tile_offsets(intelObj->mt, firstImage->Level, 0,
+                                  &tile_x, &tile_y);
    assert(brw->has_surface_tile_offset || (tile_x == 0 && tile_y == 0));
    /* Note that the low bits of these fields are missing, so
     * there's the possibility of getting in trouble.
-- 
1.7.10.4



More information about the mesa-dev mailing list