From 6f1dda555f7d1b0cf83b707305fbdc8018b536d1 Mon Sep 17 00:00:00 2001
From: Dave Airlie <airlied@redhat.com>
Date: Mon, 5 Apr 2010 07:30:11 +1000
Subject: [PATCH] dri/st: add hacky tfp format override

---
 .../state_trackers/dri/common/dri_drawable.h       |    1 +
 src/gallium/state_trackers/dri/drm/dri2.c          |    6 ++++++
 2 files changed, 7 insertions(+), 0 deletions(-)

diff --git a/src/gallium/state_trackers/dri/common/dri_drawable.h b/src/gallium/state_trackers/dri/common/dri_drawable.h
index 98abeb9..f008a92 100644
--- a/src/gallium/state_trackers/dri/common/dri_drawable.h
+++ b/src/gallium/state_trackers/dri/common/dri_drawable.h
@@ -64,6 +64,7 @@ struct dri_drawable
    unsigned int desired_fences;
    unsigned int cur_fences;
 
+   enum pipe_format format_tfp_override;
    /* used only by DRI1 */
    struct pipe_surface *dri1_surface;
 };
diff --git a/src/gallium/state_trackers/dri/drm/dri2.c b/src/gallium/state_trackers/dri/drm/dri2.c
index c632f0f..d3521aa 100644
--- a/src/gallium/state_trackers/dri/drm/dri2.c
+++ b/src/gallium/state_trackers/dri/drm/dri2.c
@@ -79,7 +79,9 @@ dri2_set_tex_buffer2(__DRIcontext *pDRICtx, GLint target,
    struct dri_drawable *drawable = dri_drawable(dPriv);
    struct pipe_texture *pt;
 
+   drawable->format_tfp_override = (drawable->stvis.color_format == PIPE_FORMAT_B8G8R8A8_UNORM && format == __DRI_TEXTURE_FORMAT_RGB) ? PIPE_FORMAT_B8G8R8X8_UNORM : 0;
    dri_st_framebuffer_validate_att(drawable->stfb, ST_ATTACHMENT_FRONT_LEFT);
+   drawable->format_tfp_override = 0;
 
    pt = drawable->textures[ST_ATTACHMENT_FRONT_LEFT];
 
@@ -114,6 +116,10 @@ dri2_drawable_get_format(struct dri_drawable *drawable,
 
    switch (statt) {
    case ST_ATTACHMENT_FRONT_LEFT:
+      if (drawable->format_tfp_override) {
+	 format = drawable->format_tfp_override;
+	 break;
+      }
    case ST_ATTACHMENT_BACK_LEFT:
    case ST_ATTACHMENT_FRONT_RIGHT:
    case ST_ATTACHMENT_BACK_RIGHT:
-- 
1.6.6.1

