Module: Mesa Branch: master Commit: de57926dc909b3fb180ff06a6c5235309fdbf4df URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=de57926dc909b3fb180ff06a6c5235309fdbf4df
Author: Kenneth Graunke <kenn...@whitecape.org> Date: Thu Aug 9 23:28:24 2018 -0700 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 <ja...@jlekstrand.net> --- src/intel/blorp/blorp.c | 12 ------------ src/intel/blorp/blorp_blit.c | 11 +++++++++++ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/intel/blorp/blorp.c b/src/intel/blorp/blorp.c index c36ec703b1..ffe26076e1 100644 --- a/src/intel/blorp/blorp.c +++ b/src/intel/blorp/blorp.c @@ -75,18 +75,6 @@ brw_blorp_surface_info_init(struct blorp_context *blorp, if (format == ISL_FORMAT_UNSUPPORTED) format = surf->surf->format; - if (format == ISL_FORMAT_R24_UNORM_X8_TYPELESS) { - /* Unfortunately, ISL_FORMAT_R24_UNORM_X8_TYPELESS it isn't supported as - * a render target, which would prevent us from blitting to 24-bit - * depth. The miptree consists of 32 bits per pixel, arranged as 24-bit - * depth values interleaved with 8 "don't care" bits. Since depth - * values don't require any blending, it doesn't matter how we interpret - * the bit pattern as long as we copy the right amount of data, so just - * map it as 8-bit BGRA. - */ - format = ISL_FORMAT_B8G8R8A8_UNORM; - } - info->surf = *surf->surf; info->addr = surf->addr; diff --git a/src/intel/blorp/blorp_blit.c b/src/intel/blorp/blorp_blit.c index f4bf26d84a..7cc580abd0 100644 --- a/src/intel/blorp/blorp_blit.c +++ b/src/intel/blorp/blorp_blit.c @@ -2250,6 +2250,17 @@ blorp_blit(struct blorp_batch *batch, } } + /* ISL_FORMAT_R24_UNORM_X8_TYPELESS it isn't supported as a render target, + * which requires shader math to render to it. Blitting Z24X8 to Z24X8 + * is fairly common though, so we'd like to avoid it. Since we don't need + * to blend depth values, we can simply pick a renderable format with the + * right number of bits-per-pixel, like 8-bit BGRA. + */ + if (dst_surf->surf->format == ISL_FORMAT_R24_UNORM_X8_TYPELESS && + src_surf->surf->format == ISL_FORMAT_R24_UNORM_X8_TYPELESS) { + src_format = dst_format = ISL_FORMAT_B8G8R8A8_UNORM; + } + brw_blorp_surface_info_init(batch->blorp, ¶ms.src, src_surf, src_level, src_layer, src_format, false); brw_blorp_surface_info_init(batch->blorp, ¶ms.dst, dst_surf, dst_level, _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit