isl: Don't align phys_level0_sa by block dimension
authorNanley Chery <nanley.g.chery@intel.com>
Mon, 20 May 2019 21:50:23 +0000 (14:50 -0700)
committerNanley Chery <nanleychery@gmail.com>
Thu, 27 Jun 2019 23:38:38 +0000 (23:38 +0000)
commit02f6995d76c9fa0fdbc7a89013f4968970ab016e
tree36e034c4fe58eba3b01c96967c0d6db1bdbc47a2
parentfb1350c76f1525e6bd320cef62d55aff19ec3f05
isl: Don't align phys_level0_sa by block dimension

Aligning phys_level0_sa by the compression block dimension prior to
mipmap layout causes the layout of compressed surfaces to differ from
the sampler's expectations in certain cases. The hardware docs agree:

From the BDW PRM, Vol. 5, Compressed Mipmap Layout,

   The compressed mipmaps are stored in a similar fashion to
   uncompressed mipmaps [...]

   The following exceptions apply to the layout of compressed (vs.
   uncompressed) mipmaps:
      * [...]
      * The dimensions of the mip maps are first determined by applying
the sizing algorithm presented in Non-Power-of-Two Mipmaps
above. Then, if necessary, they are padded out to compression
block boundaries.

The last bullet indicates that alignment should not be done for
calculating a miplevel's dimensions, but rather for determining miplevel
placement/padding. Comply with this text by removing the extra
alignment.

Fixes some fbo-generatemipmap-formats piglit failures on all tested
platforms (SNB-KBL).

v2:
- Note fixed platforms.
- Update some consumers via a helper function.

Cc: <mesa-stable@lists.freedesktop.org>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
src/intel/isl/isl.c
src/intel/isl/isl.h