blorp: Properly handle Z24X8 blits.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 10 Aug 2018 06:28:24 +0000 (23:28 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Sat, 11 Aug 2018 19:34:01 +0000 (12:34 -0700)
commitde57926dc909b3fb180ff06a6c5235309fdbf4df
tree05bc4c49abd8371a951f8c9cce218acfeb49a543
parent8a290862859bade4b238f595378d63bb920e763a
blorp: Properly handle Z24X8 blits.

One of the reasons we didn't notice that R24_UNORM_X8_TYPELESS
destinations were broken was that an earlier layer was swapping it
out for B8G8R8A8_UNORM.  That made Z24X8 -> Z24X8 blits work.

However, R32_FLOAT -> R24_UNORM_X8_TYPELESS was still totally broken.
The old code only considered one format at a time, without thinking
that format conversion may need to occur.

This patch moves the translation out to a place where it can consider
both formats.  If both are Z24X8, we continue using B8G8R8A8_UNORM to
avoid having to do shader math workarounds.  If we have a Z24X8
destination, but a non-matching source, we use our shader hacks to
actually render to it properly.

Fixes: 804856fa5735164cc0733ad0ea62adad39b00ae2 (intel/blorp: Handle more exotic destination formats)
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/blorp/blorp.c
src/intel/blorp/blorp_blit.c