From d1fc920f613aa349e6721963e22e12c6eb49e3f9 Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Tue, 1 Mar 2011 11:15:34 -0800 Subject: [PATCH] intel: Support glCopyTexImage() from ARGB8888 to XRGB8888. Nexuiz was hitting a software fallback. --- src/mesa/drivers/dri/intel/intel_tex_copy.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/mesa/drivers/dri/intel/intel_tex_copy.c b/src/mesa/drivers/dri/intel/intel_tex_copy.c index 136d8e1d0a9..62d4169acd1 100644 --- a/src/mesa/drivers/dri/intel/intel_tex_copy.c +++ b/src/mesa/drivers/dri/intel/intel_tex_copy.c @@ -77,6 +77,7 @@ intel_copy_texsubimage(struct intel_context *intel, { struct gl_context *ctx = &intel->ctx; struct intel_renderbuffer *irb; + bool copy_supported = false; bool copy_supported_with_alpha_override = false; intel_prepare_render(intel); @@ -89,13 +90,21 @@ intel_copy_texsubimage(struct intel_context *intel, return GL_FALSE; } + copy_supported = intelImage->base.TexFormat == irb->Base.Format; + + /* Converting ARGB8888 to XRGB8888 is trivial: ignore the alpha bits */ + if (irb->Base.Format == MESA_FORMAT_ARGB8888 && + intelImage->base.TexFormat == MESA_FORMAT_XRGB8888) { + copy_supported = true; + } + + /* Converting XRGB8888 to ARGB8888 requires setting the alpha bits to 1.0 */ if (irb->Base.Format == MESA_FORMAT_XRGB8888 && intelImage->base.TexFormat == MESA_FORMAT_ARGB8888) { copy_supported_with_alpha_override = true; } - if (intelImage->base.TexFormat != irb->Base.Format && - !copy_supported_with_alpha_override) { + if (!copy_supported && !copy_supported_with_alpha_override) { if (unlikely(INTEL_DEBUG & DEBUG_FALLBACKS)) fprintf(stderr, "%s mismatched formats %s, %s\n", __FUNCTION__, -- 2.30.2