st/dri: Fix setTexBuffer2 with __DRI_TEXTURE_FORMAT_RGB.
authorChia-I Wu <olv@lunarg.com>
Mon, 5 Apr 2010 02:06:52 +0000 (10:06 +0800)
committerDave Airlie <airlied@redhat.com>
Thu, 8 Apr 2010 06:47:11 +0000 (16:47 +1000)
When the format is __DRI_TEXTURE_FORMAT_RGB, the texture should be
treated as if there is no alpha channel.

src/gallium/state_trackers/dri/drm/dri2.c

index 420ff0ee59e64e6ca1d1f326e6d0d91ad7ba37c8..bd2517f2cdd82bd330216253a9c7d17198315c50 100644 (file)
@@ -84,9 +84,25 @@ dri2_set_tex_buffer2(__DRIcontext *pDRICtx, GLint target,
    pt = drawable->textures[ST_ATTACHMENT_FRONT_LEFT];
 
    if (pt) {
+      enum pipe_format internal_format = pt->format;
+
+      if (format == __DRI_TEXTURE_FORMAT_RGB)  {
+         /* only need to cover the formats recognized by dri_fill_st_visual */
+         switch (internal_format) {
+         case PIPE_FORMAT_B8G8R8A8_UNORM:
+            internal_format = PIPE_FORMAT_B8G8R8X8_UNORM;
+            break;
+         case PIPE_FORMAT_A8R8G8B8_UNORM:
+            internal_format = PIPE_FORMAT_X8R8G8B8_UNORM;
+            break;
+         default:
+            break;
+         }
+      }
+
       ctx->st->teximage(ctx->st,
             (target == GL_TEXTURE_2D) ? ST_TEXTURE_2D : ST_TEXTURE_RECT,
-            0, drawable->stvis.color_format, pt, FALSE);
+            0, internal_format, pt, FALSE);
    }
 }