[Mesa-dev] [PATCH] [v2] i965: Make sure we blit a full compressed block
Matt Turner
mattst88 at gmail.com
Sun Feb 7 02:22:17 UTC 2016
On Sat, Feb 6, 2016 at 6:11 PM, Ben Widawsky
<benjamin.widawsky at intel.com> wrote:
> This fixes an assertion failure in [at least] one of the Unreal Engine Linux
> demo/games that uses DXT1 compression. Specifically, the "Vehicle Game".
>
> At some point, the game ends up trying to blit mip level whose size is 2x2,
> which is smaller than a DXT1 block. As a result, the assertion in the blit path
> is triggered. It should be safe to simply make sure we align the width and
> height, which is sadly an example of compression being less efficient.
>
> NOTE: The demo seems to work fine without the assert, and therefore release
> builds of mesa wouldn't stumble over this. Perhaps there is some unnoticeable
> corruption, but I had trouble spotting it.
>
> Thanks to Jason for looking at my backtrace and figuring out what was going on.
>
> v2: Use NPOT alignment to make sure ASTC is handled properly (Ilia)
> Remove comment about how this doesn't fix other bugs, because it does.
>
> Cc: Jason Ekstrand <jason.ekstrand at intel.com>
> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93358
> Signed-off-by: Ben Widawsky <benjamin.widawsky at intel.com>
> ---
> src/mesa/drivers/dri/i965/intel_copy_image.c | 13 +++++++++++++
> 1 file changed, 13 insertions(+)
>
> diff --git a/src/mesa/drivers/dri/i965/intel_copy_image.c b/src/mesa/drivers/dri/i965/intel_copy_image.c
> index 0a3337e..42bd7ff 100644
> --- a/src/mesa/drivers/dri/i965/intel_copy_image.c
> +++ b/src/mesa/drivers/dri/i965/intel_copy_image.c
> @@ -212,6 +212,7 @@ intel_copy_image_sub_data(struct gl_context *ctx,
> struct brw_context *brw = brw_context(ctx);
> struct intel_mipmap_tree *src_mt, *dst_mt;
> unsigned src_level, dst_level;
> + GLuint bw, bh;
>
> if (_mesa_meta_CopyImageSubData_uncompressed(ctx,
> src_image, src_renderbuffer,
> @@ -275,6 +276,18 @@ intel_copy_image_sub_data(struct gl_context *ctx,
> intel_miptree_all_slices_resolve_depth(brw, dst_mt);
> intel_miptree_resolve_color(brw, dst_mt);
>
> + _mesa_get_format_block_size(src_mt->format, &bw, &bh);
No need to resend, but there should be a blank line before a multi-line comment.
> + /* It's legal to have a WxH that's smaller than a compressed block. This
> + * happens for example when you are using a higher level LOD. For this case,
> + * we still want to copy the entire block, or else the decompression will be
> + * incorrect.
> + */
More information about the mesa-dev
mailing list