i965: fixup format for TFP zero copy
authorDave Airlie <airlied@linux.ie>
Fri, 25 Jul 2008 10:32:22 +0000 (20:32 +1000)
committerEric Anholt <eric@anholt.net>
Wed, 20 Aug 2008 18:28:39 +0000 (11:28 -0700)
(cherry picked from commit 9bc9e0ecb0fb2069b2c123e665eb2118e358098f which
was lost in a merge)

src/mesa/drivers/dri/i965/brw_wm_surface_state.c

index 0272156c977f1914ab5660338112ec8222f80345..af1401b34b777182685e13a2d917feef85fa7396 100644 (file)
@@ -188,7 +188,17 @@ brw_create_texture_surface( struct brw_context *brw,
 
    surf.ss0.mipmap_layout_mode = BRW_SURFACE_MIPMAPLAYOUT_BELOW;
    surf.ss0.surface_type = translate_tex_target(key->target);
-   surf.ss0.surface_format = translate_tex_format(key->format, key->depthmode);
+
+   if (key->bo) 
+      surf.ss0.surface_format = translate_tex_format(key->format, key->depthmode);
+   else {
+     switch(key->depth) {
+     case 32: surf.ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8A8_UNORM; break;
+     default:
+     case 24: surf.ss0.surface_format = BRW_SURFACEFORMAT_B8G8R8X8_UNORM; break;
+     case 16: surf.ss0.surface_format = BRW_SURFACEFORMAT_B5G6R5_UNORM; break;
+     }
+   }
 
    /* This is ok for all textures with channel width 8bit or less:
     */
@@ -250,6 +260,7 @@ brw_update_texture_surface( GLcontext *ctx, GLuint unit )
       key.bo = NULL;
       key.offset = intelObj->textureOffset;
    } else {
+      key.format = firstImage->TexFormat->MesaFormat;
       key.pitch = intelObj->mt->pitch;
       key.depth = firstImage->Depth;
       key.bo = intelObj->mt->region->buffer;
@@ -258,7 +269,6 @@ brw_update_texture_surface( GLcontext *ctx, GLuint unit )
 
    key.target = tObj->Target;
    key.depthmode = tObj->DepthMode;
-   key.format = firstImage->TexFormat->MesaFormat;
    key.first_level = intelObj->firstLevel;
    key.last_level = intelObj->lastLevel;
    key.width = firstImage->Width;