intel: Fallback to meta if we're asked to CopyTexImage2D from RGB to RGBA
authorKristian Høgsberg <krh@bitplanet.net>
Tue, 1 Jun 2010 18:33:43 +0000 (14:33 -0400)
committerKristian Høgsberg <krh@bitplanet.net>
Tue, 1 Jun 2010 18:33:43 +0000 (14:33 -0400)
The pixel transfer rules state that we must set alpha to 1.0 in this case
which we can't easily do with the blitter.  We can do to passes: one that
sets the alpha to 0xff and one that copies the RGB bits or we can just
use the 3D engine.  Neither approach seems worth it for this case.

src/mesa/drivers/dri/intel/intel_tex_copy.c

index 549a4acc7d909d160581672f88a233a539db7b60..ddc2c337c8a0f1b6d03df9e89bbcfaa33e9fafd1 100644 (file)
@@ -74,6 +74,14 @@ get_teximage_source(struct intel_context *intel, GLenum internalFormat)
       return NULL;
    case GL_RGBA:
    case GL_RGBA8:
+      irb = intel_renderbuffer(intel->ctx.ReadBuffer->_ColorReadBuffer);
+      /* We're required to set alpha to 1.0 in this case, but we can't
+       * do that with the blitter, so fall back.  We could use the 3D
+       * engine or do two passes with the blitter, but it doesn't seem
+       * worth it for this case. */
+      if (irb->Base._BaseFormat == GL_RGB)
+        return NULL;
+      return irb->region;
    case GL_RGB:
    case GL_RGB8:
       return intel_readbuf_region(intel);