There's really no reason to limit ourselves to a single format; the technique works just as well for any format in this family.
Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> --- src/mesa/drivers/dri/i965/brw_blorp_blit.cpp | 10 ++-------- src/mesa/drivers/dri/i965/intel_blit.c | 16 +++++++--------- 2 files changed, 9 insertions(+), 17 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp index 9e80935..277c5ff 100644 --- a/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp +++ b/src/mesa/drivers/dri/i965/brw_blorp_blit.cpp @@ -199,18 +199,12 @@ do_blorp_blit(struct brw_context *brw, GLbitfield buffer_bit, static bool color_formats_match(mesa_format src_format, mesa_format dst_format) { - mesa_format linear_src_format = _mesa_get_srgb_format_linear(src_format); - mesa_format linear_dst_format = _mesa_get_srgb_format_linear(dst_format); - /* Normally, we require the formats to be equal. However, we also support * blitting from ARGB to XRGB (discarding alpha), and from XRGB to ARGB * (overriding alpha to 1.0 via blending). */ - return linear_src_format == linear_dst_format || - (linear_src_format == MESA_FORMAT_B8G8R8X8_UNORM && - linear_dst_format == MESA_FORMAT_B8G8R8A8_UNORM) || - (linear_src_format == MESA_FORMAT_B8G8R8A8_UNORM && - linear_dst_format == MESA_FORMAT_B8G8R8X8_UNORM); + return _mesa_get_srgb_format_linear(_mesa_format_x_to_a(src_format)) == + _mesa_get_srgb_format_linear(_mesa_format_x_to_a(dst_format)); } static bool diff --git a/src/mesa/drivers/dri/i965/intel_blit.c b/src/mesa/drivers/dri/i965/intel_blit.c index d482272..fb10072 100644 --- a/src/mesa/drivers/dri/i965/intel_blit.c +++ b/src/mesa/drivers/dri/i965/intel_blit.c @@ -166,19 +166,17 @@ intel_miptree_blit(struct brw_context *brw, * consistent with what we want in the callers (glCopyTexSubImage(), * glBlitFramebuffer(), texture validation, etc.). */ - mesa_format src_format = _mesa_get_srgb_format_linear(src_mt->format); - mesa_format dst_format = _mesa_get_srgb_format_linear(dst_mt->format); + mesa_format src_format = + _mesa_get_srgb_format_linear(_mesa_format_x_to_a(src_mt->format)); + mesa_format dst_format = + _mesa_get_srgb_format_linear(_mesa_format_x_to_a(dst_mt->format)); /* The blitter doesn't support doing any format conversions. We do also * support blitting ARGB8888 to XRGB8888 (trivial, the values dropped into * the X channel don't matter), and XRGB8888 to ARGB8888 by setting the A * channel to 1.0 at the end. */ - if (src_format != dst_format && - ((src_format != MESA_FORMAT_B8G8R8A8_UNORM && - src_format != MESA_FORMAT_B8G8R8X8_UNORM) || - (dst_format != MESA_FORMAT_B8G8R8A8_UNORM && - dst_format != MESA_FORMAT_B8G8R8X8_UNORM))) { + if (src_format != dst_format) { perf_debug("%s: Can't use hardware blitter from %s to %s, " "falling back.\n", __FUNCTION__, _mesa_get_format_name(src_format), @@ -275,8 +273,8 @@ intel_miptree_blit(struct brw_context *brw, return false; } - if (src_mt->format == MESA_FORMAT_B8G8R8X8_UNORM && - dst_mt->format == MESA_FORMAT_B8G8R8A8_UNORM) { + if (src_mt->format != dst_mt->format && + _mesa_format_x_to_a(src_mt->format) == dst_mt->format) { intel_miptree_set_alpha_to_one(brw, dst_mt, dst_x, dst_y, width, height); -- 1.9.0 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev