<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Sat, Feb 6, 2016 at 6:11 PM, Ben Widawsky <span dir="ltr"><<a href="mailto:benjamin.widawsky@intel.com" target="_blank">benjamin.widawsky@intel.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">This fixes an assertion failure in [at least] one of the Unreal Engine Linux<br>
demo/games that uses DXT1 compression. Specifically, the "Vehicle Game".<br>
<br>
</span><span class="">At some point, the game ends up trying to blit mip level whose size is 2x2,<br>
which is smaller than a DXT1 block. As a result, the assertion in the blit path<br>
is triggered. It should be safe to simply make sure we align the width and<br>
height, which is sadly an example of compression being less efficient.<br>
<br>
NOTE: The demo seems to work fine without the assert, and therefore release<br>
builds of mesa wouldn't stumble over this. Perhaps there is some unnoticeable<br>
corruption, but I had trouble spotting it.<br>
<br>
Thanks to Jason for looking at my backtrace and figuring out what was going on.<br>
<br>
</span>v2: Use NPOT alignment to make sure ASTC is handled properly (Ilia)<br>
Remove comment about how this doesn't fix other bugs, because it does.<br>
<br>
Cc: Jason Ekstrand <<a href="mailto:jason.ekstrand@intel.com">jason.ekstrand@intel.com</a>><br>
Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=93358" rel="noreferrer" target="_blank">https://bugs.freedesktop.org/show_bug.cgi?id=93358</a><br>
<span class="">Signed-off-by: Ben Widawsky <<a href="mailto:benjamin.widawsky@intel.com">benjamin.widawsky@intel.com</a>><br>
---<br>
 src/mesa/drivers/dri/i965/intel_copy_image.c | 13 +++++++++++++<br>
 1 file changed, 13 insertions(+)<br>
<br>
diff --git a/src/mesa/drivers/dri/i965/intel_copy_image.c b/src/mesa/drivers/dri/i965/intel_copy_image.c<br>
</span>index 0a3337e..42bd7ff 100644<br>
<span class="">--- a/src/mesa/drivers/dri/i965/intel_copy_image.c<br>
+++ b/src/mesa/drivers/dri/i965/intel_copy_image.c<br>
@@ -212,6 +212,7 @@ intel_copy_image_sub_data(struct gl_context *ctx,<br>
    struct brw_context *brw = brw_context(ctx);<br>
    struct intel_mipmap_tree *src_mt, *dst_mt;<br>
    unsigned src_level, dst_level;<br>
+   GLuint bw, bh;<br>
<br>
    if (_mesa_meta_CopyImageSubData_uncompressed(ctx,<br>
                                                 src_image, src_renderbuffer,<br>
@@ -275,6 +276,18 @@ intel_copy_image_sub_data(struct gl_context *ctx,<br>
    intel_miptree_all_slices_resolve_depth(brw, dst_mt);<br>
    intel_miptree_resolve_color(brw, dst_mt);<br>
<br>
+   _mesa_get_format_block_size(src_mt->format, &bw, &bh);<br>
+   /* It's legal to have a WxH that's smaller than a compressed block. This<br>
+    * happens for example when you are using a higher level LOD. For this case,<br>
+    * we still want to copy the entire block, or else the decompression will be<br>
+    * incorrect.<br>
+    */<br>
+   if (src_width < bw)<br>
</span>+      src_width = ALIGN_NPOT(src_width, bw);<br>
<span class="">+<br>
+   if (src_height < bh)<br>
</span>+      src_height = ALIGN_NPOT(src_height, bh);<br></blockquote><div><br></div><div>I've been going back-and-forth as to whether or not this is the right place to do this or if we wanted it further up or down the stack.  At the end of the day, I concluded that it's as good a place as any.<br><br></div><div>Reviewed-by: Jason Ekstrand <<a href="mailto:jason.ekstrand@intel.com">jason.ekstrand@intel.com</a>><br></div><div>Cc "11.0 11.1" <<a href="mailto:mesa-stable@lists.freedesktop.org">mesa-stable@lists.freedesktop.org</a>><br><br></div><div>--Jason<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5">+<br>
    if (copy_image_with_blitter(brw, src_mt, src_level,<br>
                                src_x, src_y, src_z,<br>
                                dst_mt, dst_level,<br>
--<br>
2.7.0<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</div></div></blockquote></div><br></div></div>