summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChad Versace <[email protected]>2012-09-20 18:54:29 +0200
committerChad Versace <[email protected]>2012-09-26 09:47:46 -0700
commitbb7ecb29fb6358a4c65278c2fe88936c578074cd (patch)
treef31479e22f8881d5284884d498a073428dc2c3a6
parent0aa47b2d8b83bbed9d774d58558058a35faa8795 (diff)
intel: Fix size of temporary etc1 buffer
Fixes valgrind errors in piglit test oes_compressed_etc1_rgb8_texture-miptree: an invalid write in _mesa_store_compressed_store_texsubimage() at line 4406 and invalid reads in texcompress_etc_tmp.h:etc1_parse_block(). The calculation of the size of the temporary etc1 buffer allocated by intel_miptree_map_etc1() was incorrect. Sometimes the allocated buffer was too small, sometimes too large. This patch corrects the size to that expected by _mesa_store_compressed_store_texsubimage(). Note: This is candidate for the 9.0 branch. Reviewed-by: Eric Anholt <[email protected]> Signed-off-by: Chad Versace <[email protected]>
-rw-r--r--src/mesa/drivers/dri/intel/intel_mipmap_tree.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
index 556a82fc7ff..cd7299e2a30 100644
--- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
+++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
@@ -1292,9 +1292,10 @@ intel_miptree_map_etc1(struct intel_context *intel,
assert(map->x == 0);
assert(map->y == 0);
- /* Each ETC1 block contains 4x4 pixels in 8 bytes. */
- map->stride = 2 * map->w;
- map->buffer = map->ptr = malloc(map->stride * map->h);
+ map->stride = _mesa_format_row_stride(MESA_FORMAT_ETC1_RGB8, map->w);
+ map->buffer = malloc(_mesa_format_image_size(MESA_FORMAT_ETC1_RGB8,
+ map->w, map->h, 1));
+ map->ptr = map->buffer;
}
static void