i965: Add a safety check for emitting blits.
authorEric Anholt <eric@anholt.net>
Mon, 23 Dec 2013 09:26:56 +0000 (01:26 -0800)
committerEric Anholt <eric@anholt.net>
Thu, 9 Jan 2014 07:23:23 +0000 (15:23 +0800)
With all of the flipping and pitch twiddling and miptree layout involved
in our blits, there are lots of ways for us to scribble outside of a
buffer.  Put in a check that we're not about to do so.

This catches a bug that glamor was running into.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
src/mesa/drivers/dri/i965/intel_blit.c

index 13cc77792e479d5ef361145a9b042c3484f83ce5..9162b1fc336077d42f0c511614760e039e8efc1e 100644 (file)
@@ -391,6 +391,10 @@ intelEmitCopyBlit(struct brw_context *brw,
 
    assert(dst_x < dst_x2);
    assert(dst_y < dst_y2);
+   assert(src_offset + (src_y + h - 1) * abs(src_pitch) +
+          (w * cpp) <= src_buffer->size);
+   assert(dst_offset + (dst_y + h - 1) * abs(dst_pitch) +
+          (w * cpp) <= dst_buffer->size);
 
    BEGIN_BATCH_BLT_TILED(8, dst_y_tiled, src_y_tiled);