i965: Don't disable aux buffers for non-overlapping miplevels.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 13 Oct 2017 03:47:41 +0000 (20:47 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 19 Oct 2017 18:10:00 +0000 (11:10 -0700)
commit82144b7392d1651167cbfd4746aea6a14d5aff46
treeb4a1638e066fe7695cbced149fe435cbf00d8149
parentfa6ca6991bccea97fbb98c29fb02e2a195818b8c
i965: Don't disable aux buffers for non-overlapping miplevels.

Meta's GenerateMipmap implementation binds the same image for both
sampling and rendering - but it samples from one miplevel while
rendering the next.  This is a false self-dependency, and there's
no need to disable auxiliary buffers in this case.  In fact, we really
want to leave it enabled so the new miplevels gain color compression.

Thankfully, the texture object's _MaxLevel is always one shy of the
miplevel being rendered.  So we can simply check if irb->mt_level is
overlaps with the texture's defined levels.  If not, there's no self-
dependency and we can leave the auxiliary buffers enabled.

Fixes a performance regression in GFXBench4 Car Chase, which apparently
calls glGenerateMipmap() on every frame.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=103247
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
Reviewed-by; Jason Ekstrand <jason@jlekstrand.net>
src/mesa/drivers/dri/i965/brw_draw.c